|
Programación |
| Cada módulo
de formulario contiene procedimientos de evento (secciones de código donde
se colocan las instrucciones que se ejecutarán como respuesta a eventos
específicos). Los formularios pueden contener controles. Por cada control
de un formulario, existe el correspondiente conjunto de procedimientos de
evento en el módulo de formulario. Además de procedimientos de evento, los
módulos de formulario pueden contener procedimientos generales que se
ejecutan como respuesta a una llamada desde cualquier procedimiento de
evento.
El
código que no esté relacionado con un control o un formulario específico
se puede colocar en un tipo diferente de módulo, un módulo estándar
(.bas). Se deben colocar en un módulo estándar los procedimientos que se
puedan utilizar como respuesta a eventos de diversos objetos, en lugar de
duplicar el código en los procedimientos de evento de cada objeto.
|
Cómo Funciona una Aplicación controlada por
Eventos
| Un evento es una
acción reconocida por un formulario o un control. Las aplicaciones
controladas por eventos ejecutan código Basic como respuesta a un evento.
Cada formulario y control de Visual Basic tiene un conjunto de eventos
predefinidos. Si se produce uno de dichos eventos y el procedimiento de
evento asociado tiene código, Visual Basic llama a ese código.
Aunque los objetos de Visual Basic reconocen automáticamente un conjunto predefinido de eventos, usted decide cuándo y cómo se responderá a un evento determinado. A cada evento le corresponde una sección de código (un procedimiento de evento). Cuando desea que un control responda a un evento, escribe código en el procedimiento de ese evento. Los tipos de eventos reconocidos por un objeto varían, pero muchos tipos son comunes a la mayoría de los controles. Por ejemplo, la mayoría de los objetos reconocen el evento Click: si un usuario hace clic en un formulario, se ejecuta el código del procedimiento de evento Click del formulario; si un usuario hace clic en un botón de comando, se ejecuta el código del procedimiento de evento Click del botón. El código en cada caso será diferente. He aquí una secuencia típica de eventos en una
aplicación controlada por eventos:
|
Variables
Alcances de las Variables
El alcance de una variable define qué partes del código son conscientes de su existencia. Cuando declara una variable en un procedimiento, sólo el código de dicho procedimiento puede tener acceso o modificar el valor de la variable; tiene un alcance que es local al procedimiento. A veces, sin
embargo, se necesita utilizar una variable con un alcance más general,
como aquella cuyo valor está disponible para todos los procedimientos del
mismo módulo o incluso para todos los procedimientos de toda la
aplicación. Visual Basic le permite especificar el alcance de una variable
cuando la declara. |
Establecimiento del Alcance de las
Variables
|
Dependiendo de cómo se
declara, una variable tiene como alcance un procedimiento (local) o un
módulo.
|
Variables Utilizadas en
un Procedimiento
| Las
variables a nivel de procedimiento sólo se reconocen en el procedimiento
en el que se han declarado. Se las conoce también como variables locales.
Se declaran mediante las palabras clave Dim o Static. Por ejemplo:
Dim intTemp As Integer – o bien – Static intPermanent As Integer Los valores de variables locales declaradas con Static existen mientras se ejecuta la aplicación, mientras que las variables declaradas con Dim sólo existen mientras se ejecuta el procedimiento. Las variables locales resultan una elección apropiada para cálculos temporales. Por ejemplo, puede crear una docena de procedimientos distintos que contengan una variable llamada intTemp. Como cada intTemp se ha declarado como una variable local, cada procedimiento sólo reconoce su propia versión de intTemp. Cualquier
procedimiento puede alterar el valor de su intTemp local sin que ello
afecte a las variables intTemp de los demás procedimientos.
|
Variables Utilizadas en un Módulo
| De forma
predeterminada, una variable a nivel de módulo está disponible para todos
los procedimien tos del módulo, pero no para el código de otros módulos.
Cree variables a nivel de módulo declarándolas con la palabra clave
Private en la sección Declaraciones al principio del módulo. Por ejemplo:
Private intTemp As Integer A nivel de
módulo, no hay diferencia entre Private y Dim, pero es preferible Private
porque contrasta con Public y hace que el código sea más fácil de
comprender. |
Variables Utilizadas por Todos los
Módulos
| Para hacer que una
variable a nivel de módulo esté disponible para otros módulos, utilice la
palabra clave Public para declarar la variable. Los valores de las
variables públicas están disponibles para todos los procedimientos de la
aplicación.
Al igual que
todas las variables a nivel de módulo, las variables públicas se declaran
en la sección Declaraciones al principio del módulo. Por ejemplo:
Nota: No puede declarar variables
públicas en un procedimiento, sólo en la sección Declaraciones de un
módulo. |
Declaración de Variables
| La forma de declarar las variables es la
siguiente:
Dim| Public| Static nombre_variable As tipo Dim: Al declarar una variable con esta palabra estamos diciendo que la variable sea local al ámbito en que se declara. Puede ser dentro de un procedimiento o dentro de un formulario, de esta forma no sería accesible desde los demás procedimientos o formularios. Public: Las variables declaradas serán publicas y podrán estar accesibles desde todos los formularios de la aplicación. Para conseguirlo tendremos que declararlas en un módulo de código, no en la sección declarations de cualquier formulario de los que conste la aplicación. Para crear un módulo de código en el menú principal de Visual Basic marcamos en PROYECTO/INSETAR MÓDULO y aparecerá junto a los demás formularios de la ventana de proyecto aunque con un icono distinto indicando que se trata de un módulo de código. Static: Con esta forma de declarar
variables conseguiremos que las variables locales no se creen y se
destruyan al entrar y salir de los procedimientos donde fueron declaradas
sino que se mantenga su valor durante todo el periodo de ejecución de la
aplicación. De esta forma a entrar en algún procedimiento las variables
recuerdan el valor que tenían cuando se salió de él.
|
Tipos de Variables
|
Matrices
| Para
declarar matrices debemos colocar entre paréntesis el número de elementos
de los que constará a continuación del nombre de la variable:
Dim medidas(9) as integer De esta forma tenemos una matriz de 10 elementos identificados del 0 al 9 Podemos obligar a que el primer elemento de una matriz tenga el índice con valor 1. Esto lo haremos colocando la instrucción option base 1 en la sección declarations de nuestro formulario. También podemos indicar los límites inferior y superior de la matriz: Dim medidas(5 to 14) as integer lo que seria una matriz de 10 elementos cuyos indices van del 5 al 14 Las matrices multidimensionales se declaran de la siguiente forma: Dim medidas(1 to 10, 1 to 10) as
integer |
Consideraciones
| Al trabajar
con Visual Basic es preferible que activemos la opción que nos obligue a
declarar todas las variables que utilicemos, de esta forma nos ahorraremos
errores inesperados como el de trabajar con una variable ya utilizada
anteriormente produciéndose un conflicto díficil de resolver.
En cambio si intentamos declarar 2 variables con el mismo nombre, en el mismo formulario o procedimiento se produce un error en tiempo de edición avisándonos de la situación. Para activar esta opción debemos ir a la opción del menú Herramientas y Opciones para que aparezca un cuadro de dialogo como este.
La opción que nos interesa activar es Requerir declaración de variables que en este caso ya lo está. De esta forma en cada sección declarations de cada formulario aparecerá la sentencia option explicit Otra opción que es interesante activar, es la de Guardar los cambios en la ficha entorno, la cual te guarda una copia del código antes de ejecutarlo por si acaso luego no podemos, se bloquea la aplicación etc... no suele pasar pero nunca se sabe. De esta forma te aseguras que lo último que hayas ejecutado lo tenes guardado en el disco. La
opción Comprobación automática de sintaxis normalmente viene activada por
defecto, no conviene desactivarla puesto que te avisa de errores de
sintaxis conforme vas escribiendo el código: Si te falta el then después
del if, el do antes del while etc...
|
Procedimientos y Funciones
Introducción a los Procedimientos
| Puede
simplificar las tareas de programación si divide los programas en
componentes lógicos más pequeños. Estos componentes, llamados
procedimientos, pueden convertirse en bloques básicos que le permiten
mejorar y ampliar Visual Basic.
Los procedimientos resultan muy útiles para condensar las tareas repetitivas o compartidas, como cálculos utilizados frecuentemente, manipulación de texto y controles, y operaciones con bases de datos. Hay dos
ventajas principales cuando se programa con procedimientos:
|
Procedimientos
[Procedimientos
Generales]
[Procedimientos
de Evento]
[Llamadas
a Procedimientos]
| Un
procedimiento Sub es un bloque de código que se ejecuta como respuesta a
un evento. Al dividir el código de un módulo en procedimientos Sub, es más
sencillo encontrar o modificar el código de la aplicación.
La sintaxis de un procedimiento Sub es la siguiente: [Private|Public][Static]Sub
nombre_procedimiento (argumentos)
Cada vez que se llama al procedimiento se ejecutan las instrucciones que hay entre Sub y End Sub. Se pueden colocar los procedimientos Sub en módulos estándar, módulos de clase y módulos de formulario. De forma predeterminada, los procedimientos Sub son Public en todos los módulos, lo que significa que se les puede llamar desde cualquier parte de la aplicación. Los argumentos de un procedimiento son como las declaraciones de variables; se declaran valores que se pasan desde el procedimiento que hace la llamada. Resulta muy útil en Visual Basic distinguir entre dos tipos de procedimientos Sub, procedimientos generales y procedimientos de evento. Un procedimiento general indica a la aplicación cómo realizar una tarea específica. Una vez que se define un procedimiento general, se le debe llamar específicamente desde la aplicación. Por el contrario, un procedimiento de evento permanece inactivo hasta que se le llama para responder a eventos provocados por el usuario o desencadenados por el sistema. ¿Por qué crear procedimientos generales? Una razón es que muchos procedimientos de evento distintos pueden necesitar que se lleven a cabo las mismas acciones. Es una buena estrategia de programación colocar las instrucciones comunes en un procedimiento distinto (un procedimiento general) y hacer que los procedimientos de evento lo llamen. Esto elimina la necesidad de duplicar código y también hace que la aplicación sea más fácil de mantener. Cuando un objeto
en Visual Basic reconoce que se ha producido un evento, llama
automáticamente al procedimiento de evento utilizando el nombre
correspondiente al evento. Como el nombre establece una asociación entre
el objeto y el código, se dice que los procedimientos de evento están
adjuntos a formularios y controles.
Sintaxis de un evento de control Sintaxis de un evento de formulario Private Sub nombrecontrol_nombreevento
(argumentos ) Private Sub Form_nombreevento
(argumentos) Aunque puede escribir procedimientos de evento nuevos, es más sencillo utilizar los procedimientos de código que facilita Visual Basic, que incluyen automáticamente los nombres correctos de procedimiento. Puede seleccionar una plantilla en la ventana Editor de código si selecciona un objeto en el cuadro Objeto y selecciona un procedimiento en el cuadro Procedimiento. También es conveniente establecer la propiedad Name de los controles antes de empezar a escribir los procedimientos de evento para los mismos. Si cambia el nombre de un control tras vincularle un procedimiento, deberá cambiar también el nombre del procedimiento para que coincida con el nuevo nombre del control. De lo contrario, Visual Basic no será capaz de hacer coincidir el control con el procedimiento. Cuando el nombre de un procedimiento no coincide con el nombre de un control, se convierte en un procedimiento general. Un procedimiento Sub difiere de un procedimiento Function en que al procedimiento Sub no se le puede llamar mediante su nombre en una expresión. La llamada a un procedimiento Sub es una instrucción única. Además, un procedimiento Sub no devuelve un valor en su nombre como hace una función. Sin embargo, al igual que Function, un procedimiento Sub puede modificar los valores de las variables que se le pasan. Hay dos formas de llamar a un procedimiento Sub: ' Ambas instrucciones llaman a un Sub
denominado MiProc. |
Funciones
[Llamadas
a Funciones]
| La sintaxis de un procedimiento Function es la
siguiente:
[Private|Public][Static]Function
nombre_procedimiento (argumentos) [As tipo]
Function Hipotenusa (A As Integer, B As
Integer) As String Se llama a un procedimiento Function de la misma forma que a las funciones incorporadas en Visual Basic: Label1.Caption =
Hipotenusa(CInt(Text1.Text),CInt(Text2.Text)) Normalmente se llama a un procedimiento de función que se ha escrito de la misma forma en que se llama a una función intrínseca de Visual Basic como Abs; es decir, utilizando su nombre en una expresión: ' Las instrucciones siguientes llamarían
a una función Call Year(Now) |
Pasaje de
Argumentos a Procedimientos y Funciones
[Tipos
de Datos]
[Argumentos
Por Valor]
[Argumentos
por Referencia]
Estructuras de Control (Repetición y
Decisión)
[For
Next]
[If...
End If]
[If...Then...Else...End
If]
[Select
Case - End Select]
[Do
While - Loop / Do - Loop While]
| Do While – Loop
/ Do – Loop While.
Utilice el bucle Do para ejecutar un bloque de instrucciones un número indefinido de veces. Hay algunas variantes en la instrucción Do...Loop, pero cada una evalúa una condición numérica para determinar si continúa la ejecución. Como ocurre con If...Then, la condición debe ser un valor o una expresión que dé como resultado False (cero) o True (distinto de cero). En el ejemplo de Do...Loop siguiente, las instrucciones se ejecutan siempre y cuando condición sea True: Do While condición
Por tanto, el bucle se puede ejecutar cualquier número de veces, siempre y cuando condición sea distinta de cero o True. Nunca se ejecutan las instrucciones si condición es False inicialmente. Por ejemplo, este procedimiento cuenta las veces que se repite una cadena de destino dentro de otra cadena repitiendo el bucle tantas veces como se encuentre la cadena de destino: Function ContarCadenas (cadenalarga,
destino) Otra variante de la instrucción Do...Loop ejecuta las instrucciones primero y prueba condición después de cada ejecución. Esta variación garantiza al menos una ejecución de instrucciones: Do
Hace el bucle cero o más veces Hace el bucle al menos una vez Do Until condición
Los bucles Do funcionan bien cuando no se sabe cuántas veces se necesitará ejecutar las instrucciones del bucle. Sin embargo, cuando se sabe que se van a ejecutar las instrucciones un número determinado de veces, es mejor elegir el bucle For…Next. A diferencia del bucle Do, el bucle For utiliza una variable llamada contador que incrementa o reduce su valor en cada repetición del bucle. La sintaxis es la siguiente: For contador = iniciar To finalizar [Step
incremento] Nota El argumento incremento
puede ser positivo o negativo. Si incremento es positivo, iniciar debe ser
menor o igual que finalizar o no se ejecutarán las instrucciones del
bucle. Si incremento es negativo, iniciar debe ser mayor o igual que
finalizar para que se ejecute el cuerpo del bucle. Si no se establece
Step, el valor predeterminado de incremento es 1.
Private Sub Form_Click ()
Sub HighlightButton(MyControl As
Variant) Use la estructura If...Then para ejecutar una o más instrucciones basadas en una condición. Puede utilizar la sintaxis de una línea o un bloque de varias líneas: If condición Then instrucción 'vea que no hace falta cerrar con End If If condición Then
If cualquierFecha < Now Then cualquierFecha = Now If cualquierFecha < Now Then
If cualquierFecha < Now Then
Utilice un bloque If...Then...Else para definir varios bloques de instrucciones, uno de los cuales se ejecutará: If condición1 Then
Por ejemplo, la aplicación podría realizar distintas acciones dependiendo del control en que se haya hecho clic de una matriz de controles de menú: Private Sub mnuCut_Click (Index As
Integer) Visual Basic proporciona la estructura Select Case como alternativa a If...Then...Else para ejecutar selectivamente un bloque de instrucciones entre varios bloques de instrucciones. La instrucción Select Case ofrece posibilidades similares a la instrucción If...Then...Else, pero hace que el código sea más legible cuando hay varias opciones. La estructura Select Case funciona con una única expresión de prueba que se evalúa una vez solamente, al principio de la estructura. Visual Basic compara el resultado de esta expresión con los valores de cada Case de la estructura. Si hay una coincidencia, ejecuta el bloque de instrucciones asociado a ese Case: Select Case expresión_prueba
Por ejemplo, suponga que agrega otro comando al menú Edición en el ejemplo If...Then...Else. Podría agregar otra cláusula ElseIf o podría escribir la función con Select Case: Private Sub mnuCut_Click (Index As
Integer) |