canal visual basic .net

Recursos Visual Basic.NET, VB.NET, Manuales de programación, Tutoriales, Foros de programación, Comunidad de programadores

Usuarios activos:  180

Manual de Visual Basic: Elementos del lenguaje

INDICE MANUAL VISUAL BASIC II

3.1.- VARIABLES Y CONSTANTES: DECLARACIÓN, TIPOS, ÁMBITO Y DURACIÓN.

Las variables en Visual Basic no necesitan ser declaradas, en el momento en que son necesitadas pueden aparecer en el código. Sin embargo, puede ser útil el exigir la declaración de todas las variables que aparezcan en el código. Para ello, se utilizará la instrucción:

Option Explicit

en la sección de declaraciones del formulario. Una vez procesada esta instrucción, no se permitirán variables no declaradas. Para declarar una variable la instrucción adecuada es:

Dim Nombre_Variable [As Tipo]

donde Tipo puede ser:

TIPO

DESCRIPCIÓN

TAMAÑO OCUPADO

IDENTIFICADOR

String

Carácter

1 Byte por carácter

$

Integer

Entero

2 Bytes

%

Long

Entero largo

4 Bytes

&

Single

Real simple

4 Bytes

!

Double

Real doble

8 Bytes

#

Currency

Moneda

8 Bytes

@

Byte

Byte *

1 Byte

(ninguno)

Boolean

Booleano *

2 Bytes

(ninguno)

Date

Fecha *

8 Bytes

(ninguno)

Object

Objeto *

4 Bytes

(ninguno)

Variant

Variante

Cualquiera de los anteriores

 

* Nuevos tipos en Visual Basic 4.0

Para declarar una constante se necesita la instrucción:

Const Nombre_Constante = Expresión

Hay dos tipos de constantes:

  • Intrínsecas o definidas por el sistema, proporcionadas por Visual Basic o cualquier otra aplicación que provee una librería de objetos. Para ver una lista de estas constantes, se accederá a Ver/Examinador de Objetos. En la lista desplegable superior, se seleccionará VB-Objects and Procedures. De la lista de la izquierda se hará doble clic en cualquier opción acabada en Constants.
  • Simbólicas o definidas por el usuario. Es una buena idea el declarar las constantes simbólicas con el prefijo con, p.e. Const conPi = 3.141592

ÁMBITO DE LAS VARIABLES EN VISUAL BASIC

Se entiende por ámbito de una variable el espacio de la aplicación donde la variable es visible y por tanto se puede utilizar. Los distintos alcances que puede tener una variable declarada en Visual Basic son:

  1. Las variables declaradas con Dim o utilizadas directamente en un procedimiento, son variables locales, es decir, accesibles solamente desde el procedimiento que las declara.
  2. Si las variables se declaran en la sección de declaraciones del formulario o del módulo, son variables a nivel de formulario o de módulo. Una variable declarada a nivel de formulario es accesible desde cualquier procedimiento del formulario y lo mismo para las variables a nivel de módulo: una variable declarada a nivel de módulo es accesible desde cualquier procedimiento de ese módulo, pero no desde otros módulos. Estas variables se declaran con Dim o Private.
  3. Las variables públicas son declaradas en la sección de declaraciones de un módulo con la sentencia Public y, podrán ser accesibles desde cualquier módulo.

EJEMPLO:

Crear un formulario con dos botones de comando (cmdInicio y cmdParada), tres etiquetas (lblHInicio; lblHParada y lblTTranscurrido) y, tres cajas de texto (txtHInicio, txtHParada, txtTTranscurrido). Inicialmente, el botón cmdParada estará desactivado. Se pretende que, cuando el usuario pulse el botón cmdInicio, en la caja de texto asociada a la etiqueta lblHInicio, aparezca la hora actual y, al mismo tiempo, se active el botón cmdParada y se desactive el de cmdInicio. Al pulsar el botón cmdParada, se mostrará la hora de parada, el tiempo transcurrido, se desactivará el botón de cmdParada y, se habilitará el de cmdInicio. El código asociado será:

Private Sub cmdInicio_Click()

HInicio = Now

txtHInicio.Text = Format$(HInicio; "hh:mm:ss")

cmdInicio.Enabled = False

cmdParada.Enabled = True

End Sub

Private Sub cmdParada_Click()

HParada = Now

Tiempo = HParada - HInicio

txtHParada.Text = Format$(HParada; "hh:mm:ss")

txtTTranscurrido.Text = Format$(Tiempo; "hh:mm:ss")

cmdInicio.Enabled = True

cmdParada.Enabled = False

End Sub

En este ejemplo se deben declarar las variables HoraInicio, HoraParada y Tiempo como variables a nivel de formulario (en la sección de declaraciones del formulario) para que sean accedidas desde cualquier procedimiento asociado al formulario. Por tanto, el ámbito de una variable determina qué procedimientos podrán acceder a esa variable. Cualquier sentencia Dim declarada en cualquier procedimiento tiene preferencia con respecto a variables declaradas a nivel de módulo.

Siempre que una variable aparece por primera vez, es inicializada al valor por defecto (0 para variables numéricas y cadena vacía para tipo String) Para que una variable mantenga el valor en cada ejecución del procedimiento donde se utiliza, se debe declarar con la instrucción:

Static Nombre_Variable [As Tipo]

Se mantiene la palabra reservada Global por compatibilidad de la versión 3.0, pero es preferible utilizar la palabra reservada equivalente: Public.

EJERCICIOS:

  1. Crear un formulario con tres cajas de texto, un botón de comando y una etiqueta. La aplicación debe sumar los dos valores introducidos por el usuario y, mostrarlos en la 3ª caja de texto. La aplicación debe estar preparada para que, la caja de texto que muestre el resultado, no pueda ser accesible al pulsar la tecla TAB.
  2. Modificar el ejercicio anterior para que, el usuario pueda escoger la operación aritmética a realizar.

TIPOS DEFINIDOS POR EL USUARIO

Se pueden definir tipos por parte del usuario para crear registros (structs en C, Record en Pascal). Un registro puede definirse como una colección de datos de diferentes tipos relacionados entre sí. Para crear un registro se necesita la sentencia Type ... End Type. Esta sentencia solo puede aparecer en la sección de declaraciones de un módulo estándar y pueden ser declarados como Private o Public. P.e:

Type Ficha

Nombre As String

Dirección As String * 40

Teléfono As Long

DNI As Long

End Type

Una vez definido un tipo de datos, se pueden declarar variables del mismo tipo. P.e: Dim Alum As Ficha

Para refererirse a un determinado campo del registro, se utiliza la notación variable.campo P.e: Alumno.Nombre. Un tipo definido por el usuario no puede contener un array dinámico, pero sí estático.

EJERCICIOS:

  1. Crear un formulario que permita actuar como un editor de texto haciendo una copia de texto o moviéndolo a otra posición. La aplicación debe tener un botón que permita borrar el contenido de la caja de texto, un botón que permita cortar el texto seleccionado, un botón que permita copiar el texto seleccionado y un botón que permita pegar el texto. La aplicación debe estar preparada para que no se pueda pegar texto si antes no se ha copiado/cortado texto. Pistas: utilizar una caja de texto multilínea y, las propiedades SelStart, SelLength y, SelText para copiar o cortar. La propiedad Enabled para activar/desactivar los botones.
  2. Crear una aplicación que permita almacenar la información de 5 empleados, cada uno de ellos con la siguiente información: nombre, sueldo, fecha de ingreso.

EJEMPLO:

Crear un formulario que actúe como un reloj despertador, de forma que visualice la hora actual y, si el usuario ha activado la alarma, cuando la hora actual sea la misma que la alarma, se debe emitir un pitido. Para ello, añadiremos los siguientes controles al formulario.

CONTROL

PROPIEDAD

VALOR

Label

Caption

(ninguno)

 

Name

lblPantalla

 

BorderStyle

1-Fixed Single

Label

Caption

Alarma

Text Box

Text

(ninguno)

 

Name

txtAlarma

Option Button

Caption

Alarma On

 

Name

optAlarmaOn

Option Button

Caption

Alarma Off

 

Name

optAlarmaOff

 

Value

True

Timer

Interval

1000

 

Name

tmrReloj

Inicialmente, la alarma debe estar desactivada y no se permitirán valores distintos del carácter ‘:’ o cualquier dígito. El código asociado será:

Dim AlarmaOn As Boolean

Private Sub txtAlarma_KeyPress(KeyAscii As Integer)

Dim Key As String

‘Comprobar que se escriben dígitos o el carácter :

Key = Chr(KeyAscii)

If (Key < "0" Or Key > "9") Then

If Key <> ":" Then

Beep

KeyAscii = 0

End If

End If

End Sub

Private tmrReloj_Timer()

‘Comprobar si la alarma > hora actual

If (Time >= txtAlarma.Text And AlarmaOn) Then

Beep

End If

lblPantalla.Caption = Time

End Sub

Private optAlarmaOn_Click()

AlarmaOn = True

End Sub

Private optAlarmaOff_Click()

AlarmaOn = False

End Sub

EJERCICIO:

Modificar el ejercicio anterior para que suene la alarma 5 segundos.

NOTA:

Cada vez que el usuario presiona una tecla, se generan los eventos KeyDown, KeyUp y KeyPress. El evento KeyPress devuelve el código ASCII de la tecla presionada. Los eventos KeyDown y KeyUp se producen cuando el usuario presiona o libera una tecla y reciben dos argumentos: KeyCode que mantiene el código ANSI de la tecla presionada y, Shift que indica el estado de las teclas Shift, Alt y Ctrl.

FORMULARIOS MÚLTIPLES

Los formularios múltiples añaden flexibilidad a las aplicaciones. Para poder acceder a un control en un formulario distinto del que contiene el foco, es necesario nombrar al control por su nombre completo, es decir, utilizando la sintaxis:

Nombre_Formulario!Nombre_del_Control

El formulario inicial en cualquier proyecto, se consigue accediendo al menú Herramientas/Opciones/Ficha Proyecto y, de la lista Formulario Inicial, escogeremos el nombre del formulario con el que se quiere iniciar la aplicación. Con cualquier formulario las operaciones posibles serán:

Show (Mostrar)

Sirve para mostrar en primer plano el formulario. La sintaxis es: Nombre_Formulario.Show

Load (Cargar)

Lleva a memoria el formulario, pero no lo visualiza. La sintaxis es: Load Nombre_Formulario

Hide (Ocultar)

Retira el formulario de la pantalla pero no lo descarga de memoria. La sintaxis es: Nombre_Formulario.Hide

Unload (Descargar)

Descarga de memoria el formulario, perdiéndose toda la información de sus variables. La sintaxis es: Unload Nombre_Formulario

EJERCICIO:

Crear una aplicación que muestre un formulario inicial preguntando la contraseña. Dicha contraseña no debe visualizarse en la pantalla. Si la contraseña es correcta, se mostrará un nuevo formulario que mostrará la hora y fecha actual y, tras introducir el usuario la fecha de su nacimiento, permita obtener los años vividos por esa persona. En caso que sea el cumpleaños, se debe felicitar al usuario. El número de intentos permitidos para introducir la contraseña es de tres. En caso de superar los intentos, el programa debe dar un mensaje de error al usuario y, tirarlo de la aplicación.

3.2.- SENTENCIAS DE CONTROL: BUCLES Y BIFURCACIONES

BUCLES DETERMINADOS

For Variable = Valor_Inicial To Ultimo_Valor [Step incremento]

[Declaraciones]

[Exit For]

[Declaraciones]

Next [Variable]

BUCLES INDETERMINADOS

Do [{While | Until} Condición] Do

[Declaraciones] [Declaraciones]

[Exit Do] [Exit Do]

[Declaraciones] [Declaraciones]

Loop Loop [{While | Until} Condición]

TOMA DE DECISIONES

SELECCIÓN SIMPLE SELECCIÓN MÚLTIPLE

If Condición_1Then Select Case Condición_de_testeo

Declaraciones_1 Case valor1

[ElseIf Condición_2 Then [Declaraciones_1]

Declaraciones_2]... [Case valor2

[Else [Declaraciones_2]]...

Declaraciones_n] [Case Else

End If [Declaraciones_n]]

End Select

donde valor1,... puede tomar cualquiera de las siguientes formas:

expresión1[, expresión2]...

expresión1 To expresión2

Is operador_relacional expresión

o cualquier combinación de las anteriores separadas por comas.

EJEMPLO:

Crear una aplicación que permita obtener el código ASCII de una tecla pulsada. Se necesita un botón que permita borrar la tecla anterior. Para ello, añadiremos los siguientes controles al formulario.

CONTROL

PROPIEDAD

VALOR

Label

Caption

Pulsa una tecla

 

Name

lblPulsaTecla

Text Box

Name

txtPulsaTecla

 

Text

(ninguno)

Label

Caption

Valor ASCII

 

Name

lblValor

Label

Caption

(ninguno)

 

Name

lblResultado

 

BordeStyle

1-Fixed single

Command Button

Caption

Limpiar

 

Name

cmdLimpiar

 

Default

True

Private Sub cmdLimpiar_Click()

txtPulsaTecla.Text = ""

lblResultado.Caption = ""

txtpulsaTecla.SetFocus

End Sub

Private Sub Form_Activate()

txtpulsaTecla.SetFocus

End Sub

Private Sub txtPulsaTecla_KeyDown(KeyCode As Integer, Shift As Integer)

Const vbKeyDelete = 46

Const vbKeyInsert = 45

Const vbKeyEnd = 35

Select Case Keycode

Case vbKeyDelete

lblResultado.Caption = "Presionado Suprimir"

txtpulsaTecla = "[[Suprimir] "

Case vbKeyInsert

lblResultado.Caption = "Presionado Insertar"

txtpulsaTecla = "[Insertar] "

Case vbKeyEnd

lblResultado.Caption = "Presionado Fin"

txtpulsaTecla = "[Fin] "

Case Else

End Select

End Sub

Private Sub txtPulsaTecla_KeyPress(KeyAscii As Integer)

If txtPulsaTecla.Text <> "" Then

txtPulsaTecla.Text = ""

End If

Select Case KeyAscii

Case 8

txtPulsaTecla.Text = "[Retroceso] "

Case 9

txtpulsaTecla = "[Tab] "

Case 13

txtpulsaTecla = "[Intro] "

Case Else

End Select

lblResultado.Caption = KeyAscii

End Sub

3.3.- FUNCIONES BÁSICAS INCORPORADAS

CONVERSIÓN DE TIPO DE DATOS

CDbl(expresión) CInt(expresión)

Conversión a tipo Doble. Conversión a tipo Integer.

CLng(expresión) CDate(expresión)

Conversión a tipo Long. Conversión a tipo Date.

etc.

FUNCIONES DE CALENDARIO

DateSerial(expresión) IsDate(expresión)

Devuelve el número de serie de la fecha indicada Verifica si un valor es del tipo Fecha/Hora.

Date Time

Devuelve la fecha actual. Devuelve la hora actual.

Now Day(Núm_serie)

Devuelve la fecha y hora actuales. Devuelve un entero entre 1 y 31.

Month(Núm_serie) Year(Núm_serie)

Devuelve un entero entre 1 y 12. Devuelve un entero entre 1753 y 2078.

etc.

FUNCIONES DE CADENA

Space(Num_espacios) String(Número, expr_cadena)

Crea una cadena formada por Num_espacios. Crea una cadena de caracteres repetidos.

Mid(expr_cadena, Inicio[, Long] ) Left(expr_cadena, Número)

Permite extraer subcadenas. Extrae los Número caracteres de la izquierda.

Right(expr_cadena, Número) Instr([Inicio,] cadena_1, cadena_2)

Extrae los Número caracteres de la derecha. Indica si cadena_2 está contenida en cadena_1

LCase(expr_cadena) UCase(expr_cadena)

Convierte a minúsculas. Convierte a mayúsculas.

StrComp(cadena_1, cadena_2) Trim(expr_cadena)

Compara cadena_1 y cadena_2. Elimina los espacios del principio y final.

RTrim(expr_cadena) LTrim(expr_cadena)

Elimina los espacios del final. Elimina los espacios del principio.

Format(expresión[, formato] )

Permite dar a una cadena o a un número un formato específico.

EJEMPLO:

Vamos a construir una aplicación que, al desplazarse el usuario con las teclas de cursor, se van iluminando los pixeles por los que pasa. Se necesitará un formulario para el área de dibujo con la propiedad AutoRedraw establecida a True. Finaliza al pulsar la tecla Fin

Dim AlturaPixel As Single, AnchuraPixel As Single

Dim XPunto As Single, YPunto As Single

Private Sub Form_Load()

AutoRedraw = True

ScaleMode = 3 'Pixels

AlturaPixel = ScaleHeight

AnchuraPixel = ScaleWidth

XPunto = AnchuraPixel / 2

YPunto = AlturaPixel / 2

End Sub

Private Sub Form_Resize()

AlturaPixel = ScaleHeight

AnchuraPixel = ScaleWidth

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

Dim sino As Integer

Select Case KeyCode

Case vbKeyLeft

If XPunto <= 0 Then

XPunto = 0

Else

XPunto = XPunto - 1

End If

Case vbKeyRight

If XPunto >= AnchuraPixel Then

XPunto = AnchuraPixel

Else

XPunto = XPunto + 1

End If

Case vbKeyUp

If YPunto <= 0 Then

YPunto = 0

Else

YPunto = YPunto - 1

End If

Case vbKeyDown

If YPunto >= AlturaPixel Then

YPunto = AlturaPixel

Else

YPunto = YPunto + 1

End If

Case vbKeyEnd

sino = MsgBox("¿Estás seguro de que quieres terminar", 4)

If sino = 6 Then End 'Clic en el botón Sí

Case Else

Beep

End Select

PSet (XPunto, Ypunto) ‘Dibujar un punto

End Sub

EJERCICIOS:

Crear una aplicación que permita calcular la posición de los espacios en blanco de una cadena introducida por el usuario.

Crear una aplicación que, dada una frase, permita obtener el número de apariciones de cada vocal en la frase. El resultado debe aparecer indicado de forma clara.

Diseñar una aplicación que el usuario escoja entre introducir números o letras. Si escoge números, no se debe permitir introducir ninguna letra y, si escoge letras, no se debe permitir introducir ningún dígito.