Bitácora del desarrollo de mi clase de Visual Basic, en el que ´publicaré el material de la clase y recibiré comentarios y sugerencias de mis alumnos.

Tuesday, August 26, 2008

2.4.3. Ámbito de las variables

Alcance de las Variables
El alcance de una variable define en qué partes del código son reconocidas. 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 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.

Establecido el alcance de las variables
Dependiendo de cómo se declara, una variable tiene como alcance un procedimiento (local) o un módulo.


Alcance Privado Público
Nivel de procedimiento Las variables son privadas No es aplicable. No
al procedimiento donde se puede declarar variables
declaran. públicas dentro de un
procedimiento.

Nivel de módulo Las variables son privadas Las variables están
al módulo donde se disponibles para todos
declaran. los módulos.


Variables utilizadas en un procedimiento
Las variables al 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 intContador 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.

Variables utilizadas en un módulo
De forma predeterminada, una variable al nivel de módulo está disponible para todos los procedimientos del módulo, pero no para el código de otros módulos. Cree variables al nivel de módulo declarándolas con la palabra clave Private en la sección Declaraciones Generales al principio del módulo. Por ejemplo:

Private intTemp As Integer

Al nivel de módulo, no hay diferencia entre Private y Dim, pero es preferible usar 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 al nivel de módulo esté disponible para otros módulos, utilice la palabra clave Public para declararlas. Los valores de las variables públicas están disponibles para todos los procedimientos de la aplicación. Al igual que todas las variables al nivel del módulo, las variables públicas se declaran en la sección Declaraciones Generales al principio del módulo. Por ejemplo:

Public intTemp As Integer

Nota: No puede declarar variables públicas en un procedimiento, sólo en la sección Declaraciones Generales de un módulo.

2.4.2. Tipos de variables

Tipos de Datos
Un tipo de dato determina la naturaleza del dominio de valores que puede tomar una variable, las operaciones en que puede participar y el espacio de memoria que necesita. La tabla siguiente muestra los tipos de datos, incluyendo el tamaño de almacenamiento y el intervalo.


Tipo de Dato Tamaño de Rango
Almacenamiento
Byte 1 byte 0 a 255

Boolean 2 bytes True o False

Integer 2 bytes -32.768 a 32.767

Long
(entero largo) 4 bytes -2.147.483.648 a 2.147.483.647

Single
(coma flotante/
precisión simple) 4 bytes -3,402823E38 a -1,401298E-45
para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos

Double
(coma flotante/
precisión doble) 8 bytes -1,79769313486232E308 a -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos

Currency
(entero a escala) 8 bytes -922.337.203.685.477,5808 a 922.337.203.685.477,5807

Decimal 14 bytes +/-79.228.162.514.264.337.593.543.950.335 sin punto decimal; +/-7,9228162514264337593543950335 con 28 posiciones a la derecha del signo decimal; el número más pequeño distinto de cero es +/- 0,000000000000000000000000001

Date 8 bytes 1 de enero de 100 a 31 de Diciembre de 9999

Object 4 bytes Cualquier referencia a tipo Object

String 10 bytes
(longitud variable) longitud de la cadena Desde 0 a 2.000 millones

String Longitud de la
(longitud fija) cadena Desde 1 a 65.400 aproximadamente

Variant
(con números) 16 bytes Cualquier valor numérico hasta el intervalo de un tipo Double

Variant 22 bytes
(con caracteres) + longitud de la cadena El mismo intervalo para un tipo String de longitud variable.

Definido por el usuario Número requerido
(utilizando Type) por los elementos El intervalo de cada elemento es el mismo que el intervalo de su tipo de datos


Nota: Las matrices de cualquier tipo de datos requieren 20 bytes de memoria más cuatro bytes para cada dimensión de matriz, más el número de bytes que ocupan los propios datos. Por ejemplo, los datos de una matriz unidimensional que constan de cuatro elementos de datos tipo Integer de dos bytes cada uno, ocupan ocho bytes. Los ocho bytes que requieren los datos más los 24 bytes necesarios para la matriz suman un requisito total de memoria de 32 bytes para dicha matriz. Un tipo Variant que contiene una matriz requiere 12 bytes más que la matriz por sí sola.


Convertir tipos de datos
Visual Basic proporciona varias funciones de conversión que puede utilizar para convertir valores de tipos de datos específicos. Por ejemplo, para convertir un valor a Currency, utilice la función Ccur:

PagoPorSemana = Ccur (horas * PagoPorHora)

La siguiente tabla muestra las funciones de conversión:

Funciones de Convierte una
Conversión expresión en

Cbool Boolean
Cbyte Byte
Ccur Currency
Cdate Date
CDbl Double
Cint Integer
CLng Long
CSng Single
CStr String
Cvar Variant
CVErr Error

Nota: Los valores que se pasan a una función de conversión deben ser válidos para el tipo de dato de destino o se producirá un error. Por ejemplo, si intenta convertir un tipo Long en un Integer, el tipo de Long debe de estar en el intervalo válido del tipo de dato Integer.

2.4.1. Definición y entorno

Variables
Las variables se utilizan para almacenar valores temporalmente durante la ejecución de una aplicación. Las variables tienen un nombre (la palabra que utiliza para referirse al valor que contiene la variable) y un tipo de dato (que determina la clase de dato que la variable puede almacenar).

Almacenamiento y recuperación de datos en variables
Utilice una sentencia de asignación para realizar cálculos y asignar el resultado a una variable:

ManzanaVendidas = 10 ‘ Se pasa el valor 10 a la variable
ManzanasVendidas = ManzanasVendidas + 1

Observe que el signo igual del ejemplo es un operador de asignación, no un operador de igualdad; el valor 10 se asigna a la variable ManzanasVendidas.

Declaración de Variables
Declarar una variable es decirle al programa algo de antemano. Se declara una variable mediante la instrucción Dim, proporcionando un nombre a la variable, según la siguiente sintaxis:

Dim nombre-variable [As tipo]

Las variables que se declaran en un procedimiento mediante la sentencia Dim sólo existen mientras se ejecuta el procedimiento. Cuando termina el procedimiento, desaparece el valor de la variable. Además, el valor de una variable de un procedimiento es local a dicho procedimiento; es decir, no puede tener acceso a una variable de un procedimiento desde otro procedimiento. Estas características le permiten utilizar los mismos nombres de variables en distintos procedimientos sin preocuparse por posibles conflictos o modificaciones accidentales.

El nombre de una variable debe cumplir con los siguientes requisitos:
a) Debe comenzar con una letra.
b) No puede incluir un punto o un carácter de declaración de tipo ($,&,!,%,#,@).
c) No debe exceder de 255 caracteres.
d) Debe ser única en el mismo alcance, que es el intervalo desde el que se puede hacer referencia a la variable: un procedimiento, formulario, etc.

La cláusula opcional As tipo de la sentencia Dim le permite definir el tipo de dato o de objeto de la variable que va a declarar. Los tipos de datos definen el tipo de información que almacena la variable. Algunos ejemplos de tipos de datos son String, Integer y Currency. Las variables también pueden contener objetos de Visual Basic u otras aplicaciones. Algunos ejemplos de tipos de objeto de Visual Basic, o clases, son Object, Form1 y TextBox.

Hay otras formas de declarar variables:
a) Declarar una variable en la sección Declaraciones de un módulo de formulario, estándar o de clase, en vez de un procedimiento, hace que la variable esté disponible para todos los procedimientos del módulo.

b) Declarar una variable mediante la palabra clave Public hace que esté accesible para toda la aplicación.

c) Declarar una variable local mediante la palabra clave Static conserva su valor aunque termine el procedimiento.

Declaración Implícita
No tiene por qué declarar una variable antes de utilizarla. Por ejemplo, podría escribir una función donde no hiciera falta declarar TempVal antes de utilizarla:

Function Raiz (num)
TempVal = Abs (num)
Raiz = Sqr(TempVal)
End Function

Visual Basic crea automáticamente una variable con ese nombre, que puede utilizar como si la hubiera declarado explícitamente. Aunque es cómodo, puede provocar errores sutiles en el código si se equivoca de nombre de variable. Por ejemplo, suponga que ha escrito esta función:

Function Raíz (num)
TempVal = Abs (num)
Raíz = Sqr (TemVal)
End Function

A primera vista, parece igual. Pero como se ha escrito erróneamente la variable TempVal en la tercera línea, la función devolverá siempre cero. Cuando Visual Basic encuentra un nombre nuevo, no puede averiguar si realmente desea declarar una variable nueva o simplemente ha escrito de forma errónea una variable existente, por lo que crea una variable nueva con ese nombre.

Declaración Explícita
Para evitar problemas al equivocarse de nombre en las variables, puede configurar Visual Basic para que le avise siempre que encuentre un nombre que no se haya declarado explícitamente como una variable.

Para declarar variables de forma explícita:

Incluya esta sentencia en la sección Declaraciones Generales del módulo de clase, de formulario o estándar:

Option Explicit

- o bien -

En el menú Herramientas, elija Opciones, haga clic en la ficha Editor y active la opción Declaración de variables requerida. Esto inserta automáticamente la sentencia Option Explicit en los módulos nuevos, pero no en los ya creados, por lo que tendrá que agregar manualmente Option Explicit a los módulos existentes en el proyecto.

Si hubiera tenido efecto dicha instrucción en el módulo de formulario o módulo estándar que contiene la función Raíz, Visual Basic habría reconocido TempVal y TemVal como variables no declaradas y habría generado errores para ambas. Debería, por tanto, declara explícitamente TempVal:

Function Raíz (num)
Dim TempVal
TempVal = Abs (num)
Raíz = Sqr (TemVal)
End Fuction

2.4. Variables

Tema revisado...

2.3.2. Revisar las propiedades de los objetos

Tema revisado...

2.3.1. Incluir objetos en un formulario

Tema revisado...

2.3. Caja de herramientas (controles)

Control Etiqueta (Label)
Se utiliza para mostrar texto que el usuario no puede modificar. Generalmente para identificar otros controles en el formulario o para mostrar instrucciones al usuario.

Propiedades
Alignment Alineación del texto dentro del control.
AutoSize True/False. Determina si el tamaño del control se ajusta automáticamente al texto que contiene.
Caption Texto que muestra el control.
Name Nombre del control.
Font Establece la fuente, estilo y tamaño para el texto del control.

Control Cuadro de Texto (Textbox)
Se utiliza para que el usuario le proporcione datos a la aplicación o para que la aplicación le devuelva la información al usuario. El texto que se muestra en el control puede ser cambiado por el usuario.

Propiedades
Enabled True/False. Establece un valor que determina si el control puede responder a eventos generados por el usuario.
Font Establece la fuentes, estilo y tamaño para el texto del control.
Locked True/False. Determina si es posible modificar el texto en el control.
MaxLength Establece la longitud máxima permitida para el texto en el control.
MultiLine Establece si el control puede aceptar múltiples líneas de texto.
Name Nombre del control.
PasswordChar Carácter utilizado para ocultar el texto que realmente contiene el control.
Text Texto que realmente contiene y muestra el control.
Visible Establece si el control será visible para el usuario.

Eventos
Change Ocurre cuando cambia el texto que contiene el control.
GotFocus Ocurre cuando el control recibe el enfoque.
KeyDown Ocurre cuando el usuario presiona una tecla mientras el control tiene el enfoque.
LostFocus Ocurre cuando el control pierde el enfoque.

Métodos
Refresh Actualiza el texto del control.
SetFocus Mueve el enfoque al control.

Control Botón de Comando (Commandbutton)
Permite que la aplicación inicie, interrumpa o termine un proceso.

Propiedades
Cancel True/False. Establece si el botón se comportará como el botón cancelar en el formulario y se invocará su evento Click cada vez que se presione la tecla ESC.
Caption Establece el texto que muestra el botón.
Default True/False. Establece si el botón se comportará como el botón predeterminado en el formulario.
Font Establece la fuente, estilo y tamaño para el texto del control.
Name Nombre del botón.
Visible True/False. Establece si el botón será visible para el usuario.

Eventos
Click Ocurre cuando se hace clic sobre el botón.

Métodos
SetFocus Mueve el enfoque al botón.



Estableciendo Propiedades
Al diseñar la interfase de usuario de una aplicación Visual Basic, se deben establecer la propiedades para los controles (objetos) creados.

Estableciendo Propiedades en Tiempo de Diseño
Algunas propiedades pueden ser establecidas en tiempo de diseño. Para establecer estas propiedades se emplea la ventana de propiedades. Para acceder a la ventana de propiedades, oprima en botón secundario del ratón sobre un objeto, y luego haga clic en Propiedades. También se puede obtener el mismo resultado seleccionado el objeto y luego presionando F4.
Si selecciona varios objetos a la vez y accede a la ventana de propiedades, sólo se mostrarán las propiedades que son comunes para todos los controles seleccionados. Cualquier cambio que se haga a una propiedad será aplicada a todos los controles.

Estableciendo Propiedades en Tiempo de Ejecución
En tiempo de ejecución, se puede escribir código para establecer u obtener el valor de una propiedad. La siguiente línea de código establece a negrita la fuente de un cuadro de texto llamado txtData.

txtData.Font.Bold = True ' Establece el texto a negrita

Este código establece la propiedad Text del cuadro de texto txtData

txtData.Text = "Hola mundo" 'Establece el valor del texto

Si se omite el nombre de la propiedad, se establece la propiedad predeterminada del control. La propiedad predeterminada de un cuadro de texto es la propiedad Text. La propiedad predeterminada de una etiqueta es la propiedad Caption. Las siguientes líneas de código establecen las propiedades predeterminadas text y caption de un cuadro de texto y de una etiqueta.

txtData = "Se establece la propiedad Text del cuadro de texto"
lblData = "Se establece la propiedad Caption de la etiqueta"

Obteniendo Propiedades en Tiempo de Ejecución
Puede emplear el siguiente código para obtener el valor de una propiedad en tiempo de ejecución.

Dim sNombre as String
sNombre = txtName.Text

2.2.2. Eventos y métodos

Eventos
Activate.- Ocurre cuando el formulario se convierte en la ventana activa.
Click.- Ocurre cuando hace clic sobre el formulario.
Deactivate.- Ocurre cuando el formulario deja de ser la ventana activa.
Load.- Ocurre cuando se carga un formulario.
Unload.- Ocurre cuando un formulario está a punto de descargarse.

Métodos
Hide.- Oculta el formulario.
Refresh.- Actualiza el contenido del formulario.
SetFocus.- Le entrega el enfoque al formulario.
Show.- Hace visible el formulario.


Manejo de Formularios
Normalmente la intefaz de una aplicación está compuesta por varios formularios. Cuando Visual Basic inicia la aplicación, automáticamente se muestra el formulario de arranque, mientras que los otros formularios deben ser mostrados y ocultados a través de código. El método o función usado depende de lo que deseamos hacer.

Tarea Método o Instrucción
Cargar un formulario en memoria, pero Use la sentencia Load, o haga referencia a una
sin mostrarlo propiedad o control sobre el formulario.
Cargar o mostrar el formulario. Use el método Show.
Mostrar un formulario cargado. Use el método Show.
Ocultar u formulario Use el método Hide.
Ocultar un formulario y descargarlo de Use la sentencia Unload.
memoria.


Método Show
Muestra un formulario. Si el formulario no está cargado al momento de ejecutar el método Show, Visual Basic lo cargará automáticamente.

Formato

NombreDelFormulario.Show

Ejemplo

FrmEntrada.Show


Sentencia Load
Carga un formulario a la memoria, pero no lo muestra.

Formato

Load NombreDelFormulario

Ejemplo

Load FrmEntrada


Evento Load
El evento Load ocurre cuando el formulario es cargado en la memoria. Esto sucede cuando se usa la sentencia Load, o cuando se invoca el método Show y el formulario aún no está cargado en memoria. Normalmente, este evento se utiliza para establecer algunas propiedades del formulario, los controles que se encuentran en él, o variables a nivel del formulario.

Ejemplos:
Private Sub Form_Load()
frmIngreso.Left = (Screen.Width - frmIngreso.Width) / 2
frmIngreso.Top = (Screen.Height - frmIngreso.Height) / 2
End Sub

Private Sub Form_Load()
txtUsuario.Text=""
txtContraseña.Text=""
cmdIngresar.Enabled=False
End Sub

Método Hide
Oculta un formulario, pero no lo descarga de memoria.

Formato

NombreDelFormulario.Hide

Ejemplo:

frmIngreso.Hide


Sentencia Unload
Descarga un formulario de memoria

Formato

Unload NombreDelFormulario

Comentarios
La descarga de un formulario puede ser necesario o conveniente en aquellos casos en los que la memoria utilizada se necesite para alguna otra tarea o cuando sea necesario restablecer las propiedades a sus valores originales.
Antes de descargar un formulario se ejecuta el evento Unload (Form_Unload). Si establece el argumento Cancelar a True en este evento, no se descargará el formulario.

Sugerencia

Use la palabra Me para referirse al formulario actual.

Ejemplo

‘Descarga el formulario actual
Private Sub cmdCerrar-Click ( )
Unload Me
End Sub

Evento Unload
Ocurre cuando un formulario está a punto de descargarse. Este evento se desencadena porque un usuario cierra el formulario mediante el comando Cerrar del menú Control o una sentencia Unload.
El parámetro Cancelar, es un entero que determina si el formulario es descargado. Si Cancelar es 0, el formulario se descarga. Establecer Cancelar a cualquier valor distinto de cero impide que el formulario sea descargado.

Ejemplo

Private Sub Form_Unload(Cancel As Integer)
Dim iRpta As Integer
iRpta = MsgBox(“¿Esta seguro de cerrar la ventana?”, _
VbYesNo + vbQuestion, “Mensaje”)
If iRpta = vbNo Then
Cancel = True
End If
End Sub

Formularios Modales y No Modales
Un formulario que se abre como Modal, no permite que el usuario interactúe con otros formularios de la misma aplicación hasta que no sea cerrado.
Un formulario que se abre como No Modal, permite al usuario cambiar a otros formularios de la misma aplicación sin que los primeros sean cerrados.
El argumento Estilo del método Show determina si el formulario se abre como Modal o No Modal.

Ejemplos
' Cargar el formulario frmIngreso _ como Modal
frmEntrada.Show vbModal

'Cargar el formulario _ frmIngreso como No Modal
frmEntrada.Show vbModaless

Finalización de una Aplicación
Se puede finalizar la ejecución de la aplicación descargando el último formulario de la aplicación o usando la sentencia End. La sentencia End termina la ejecución de la aplicación y descarga todos los formularios. Cuando finaliza su aplicación con la sentencia End no se desencadena ningún evento de los formularios.
Ejemplos

‘ Descarga el formulario actual
Private Sub cmdCerrar_Click ( )
Unload Me
End Sub

‘ Finaliza la aplicación
Private Sub cmdFinalizar_Click ( )
End
End Sub

2.2.1. Propiedades de un formulario

Propiedades
BackColor.- Color de fondo del formulario.
BorderStyle.- Estilo del borde del formulario.
Caption.- Texto en la barra de título del formulario.
ControlBox True/False.- Determina si tiene o no el cuadro de control.
Enabled True/False.- Determina si está habilitado para responder a las acciones del usuario.
Icon.- Icono que se muestra cuando el formulario está minimizado.
Left y Top.- Ubicación del formulario.
MaxButton True/False.- Determina si tiene o no el botón Maximizar.
MinButton True/False.- Determina si tiene o no el botón Minimizar.
Name.- Nombre del formulario.
WindowState.- Estado inicial del formulario (normal, maximizado o minimizado)

2.2. Formularios

Formularios
El formulario es el principal medio de comunicación entre el usuario y la aplicación. Los usuarios interactúan con los controles sobre el formulario para ingresarle datos y obtener resultados.

Propiedades
BackColor.- Color de fondo del formulario.
BorderStyle.- Estilo del borde del formulario.
Caption.- Texto en la barra de título del formulario.
ControlBox True/False.- Determina si tiene o no el cuadro de control.
Enabled True/False.- Determina si está habilitado para responder a las acciones del usuario.
Icon.- Icono que se muestra cuando el formulario está minimizado.
Left y Top.- Ubicación del formulario.
MaxButton True/False.- Determina si tiene o no el botón Maximizar.
MinButton True/False.- Determina si tiene o no el botón Minimizar.
Name.- Nombre del formulario.
WindowState.- Estado inicial del formulario (normal, maximizado o minimizado)

Eventos
Activate.-
Ocurre cuando el formulario se convierte en la ventana activa.
Click.- Ocurre cuando hace clic sobre el formulario.
Deactivate.- Ocurre cuando el formulario deja de ser la ventana activa.
Load.- Ocurre cuando se carga un formulario.
Unload.- Ocurre cuando un formulario está a punto de descargarse.

Métodos
Hide.- Oculta el formulario.
Refresh.- Actualiza el contenido del formulario.
SetFocus.- Le entrega el enfoque al formulario.
Show.- Hace visible el formulario.

2.1. Definición y creación de un Proyecto en VB

Tema revisado...

2. Aspectos básicos de Visual Basic

 
Tema revisado