You are on page 1of 26

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

C.F.G.S. DESARROLLO DE APLICACIONES INFORMTICAS

MDULO: Diseo y realizacin de servicios de presentacin en entornos grficos

Unidad 2

Caractersticas del lenguaje y controles ms comunes

En esta unidad veremos las caractersticas del lenguaje de programacin Visual Basic Net. Y desarrollaremos un ejercicio que nos permitir conocer tres controles ms comunes en un formulario de Windows: TextBox, Button y Label.

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

NDICE DE CONTENIDOS CARACTERSTICAS DEL LENGUAJE ...................................................................................................... 3 Declaracin de variables .......................................................................................................................... 3 Declaracin de constantes ........................................................................................................................ 5 Declaracin de arrays............................................................................................................................... 5 Redimensin de arrays .............................................................................................................................. 7 Recorrer un array...................................................................................................................................... 7 Operadores aritmticos............................................................................................................................. 8 Operadores de comparacin ..................................................................................................................... 8 Procedimientos.......................................................................................................................................... 9 Pasos de parmetros ............................................................................................................................... 10 Estructuras de control............................................................................................................................. 11 Sentencia If................................................................................................................................. 11 Sentencia Select Case................................................................................................................. 11 Sentencia DoLoop .................................................................................................................. 12 Sentencia ForNext.................................................................................................................. 14 Sentencia For EachNext ........................................................................................................ 15 CONTROLES MS COMUNES. TEXTBOX, BUTTON Y LABEL........................................................ 15

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Caractersticas del lenguaje Teniendo en cuenta la experiencia que ya tuvisteis en el primer curso en programacin, muchos de los conceptos que veamos en este apartado os resultarn familiares. Declaracin de variables Utilizamos la palabra reservada Dim seguida del nombre de la variable y a continuacin la palabra reservada As y el tipo de variable que vamos a declarar.
Dim Dim Dim Dim Valor As String ' cadena de caracteres Cuenta As Integer ' numrico entero de 32 bits con signo Cta As Single ' numrico de punto flotante de precisin simple de 32 bits FhActual As Date ' fecha y hora

Nota: la comilla simple (') indica el comienzo de un comentario en el cdigo Podemos tambin realizar declaraciones de variables en la misma sentencia Dim, aunque sean de distinto tipo.
Dim Nombre, Apellidos, Ciudad As String Dim Cta As Single, Num As Integer

Vamos a crear un nuevo proyecto para probar las declaraciones de variables que realicemos en esta unidad de trabajo. Abrimos la aplicacin Visual Basic, o si ya la tenemos abierta vamos al men a Archivo + Nuevo Proyecto. Creamos una nueva aplicacin para Windows y le asignamos el nombre Unidad2. Agregamos un botn al formulario y en el evento click de botn escribimos las siguientes declaraciones y asignaciones de variables:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Declaracin de variables Dim ImporteFac As Integer Dim Precio As Single Dim Valor As String Dim Correcto As Boolean ' valores true o false Dim fNueva As Date Dim fCompleta As Date Dim fHora, fHora1 As Date ' Asignacin de valores a las variables ImporteFac = 875 Precio = 50.75 Valor = "mesa" Correcto = True FNueva = "21/11/2007" ' dia/mes/ao FCompleta = "7/11/2007 14:22:00" fHora = "5:40:00 PM" fHora1 = "17:40:00" End Sub

Vamos a ejecutar la aplicacin en modo depuracin, pulsamos F8, y cuando aparezca el formulario, hacemos clic en el botn Button1. Se detendr la ejecucin al principio del procedimiento que resuelve el evento clic del botn, Button1.click. Antes de ejecutar ninguna lnea, vamos a visualizar las variables locales de la aplicacin en una ventana, para ello vamos al men Depurar + Ventanas + Variables locales. Nos aparece una ventana con las variables locales de la aplicacin, fijmonos en las que hemos declarado nosotros dentro del procedimiento que vamos a ejecutar (fig.1).

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Fig.1. Ventana variables locales.

Observando la ventana de variables locales antes de asignar ningn valor a las variables, podemos ver los valores iniciales para los distintos tipos de variables. Para Integer es cero; tambin es cero para el tipo Single, pero con un decimal; para String es Nothing; para el tipo Boolean es false. Y para el tipo Date le asigna el valor #12:00:00 AM#. Vayamos ejecutando lnea a lnea el cdigo, para ello pulsamos nuevamente F8. Vemos como se modifican los valores de las variables a medida que ejecutamos las lneas de cdigo. Recordar que la lnea resaltada en amarillo es la lnea que se va a ejecutar al pulsar F8, Cuando llegamos al final del procedimiento (End Sub).Tenemos las siguientes asignaciones (fig.2).

Fig.2. Ventana variables locales.

Los valores que nos llaman la atencin son los de las variables de tipo Date. Le asignamos fechas en el formato da/mes/ao (FNueva = "21/11/2007") y a efectos de almacenamiento interno la convierte en el formato mes/da/ao (#11/21/2007#). Y, tambin, cuando le asignamos una hora en formato de 24 horas, la representa en el formato 12 horas; con la sentencia (fHora1 = "17:40:00"), almacena el valor
(#5:40:00 PM#).

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

No obstante, podemos asignar valores de tipo Date en formato mes/da/ao utilizando el carcter #. Por ejemplo, escribir la sentencia siguiente y ejecutar la aplicacin.
Dim fFecha As Date = #11/21/2007#

Observamos tambin que es posible declarar una variable y en la misma lnea de cdigo asignarle un valor. Declaracin de constantes Al igual que las variables, una constante es un elemento del lenguaje que guarda un valor, pero que en este caso y como su propio nombre indica, dicho valor ser permanente a lo largo de la ejecucin del programa, no pudiendo ser modificado. Para declarar una constante, utilizamos la palabra reservada Const seguida de nombre de la constante y le asignamos el valor que va a tener.
Const Pi = 3.1416

En la declaracin de la constante se pude especificar el tipo de valor que va a guardar, atendiendo a los tipos de datos que vimos en el apartado anterior.
Const Pi2 As Single = 3.1416

En el primer caso, la constante Pi se considera del tipo Double, que representa valores numricos de punto flotante de doble precisin de 64 bits, el doble que un valor de tipo Single. (Observarlo en la ventana Variables locales al depurar la aplicacin). Declaracin de arrays Para declarar un array, o matriz, actuaremos prcticamente igual que para declarar una variable, con la diferencia de que utilizaremos los parntesis despus del nombre, para indicar que se trata de un array, y opcionalmente, dentro de los parntesis, indicaremos el nmero de elementos que inicialmente va a tener el array. Tambin es posible, asignar valores a los elementos en el mismo momento de su declaracin. Debemos tener en cuenta a la hora de establecer el nmero de elementos, que el primer ndice de un array es el cero, por lo que al ser creado, el nmero real de elementos en un array ser el especificado en la declaracin ms uno. Para probar las siguientes sentencias de declaraciones de arrays, vamos a aadir otro botn al formulario Button2, y escribimos las siguientes lneas de cdigo que declaran de arrays.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Declaracin de un array sin elementos Dim Paises() As String ' array con 4 elementos: del 0 a 3 Dim Nombres(3) As String ' asignamos un valor a las dos primeras posiciones del array Nombres(0) = "Enrique" Nombres(1) = "Marta" ' array con 3 elementos, cuyos valores asignamos en el momento de la declaracin del array Dim Colores() As String = {"Rojo", "Verde", "Azul"} End Sub

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Ejecutamos la aplicacin en modo depuracin, pulsando F8, y vamos ejecutando, lnea a lnea, hasta llegar al End Sub del procedimiento que se ejecuta al hacer clic al botn ltimo aadido, Button2.Click. En la ventana de las variables locales podemos observar los valores que tomarn los arrays declarados. (fig.3). Hacemos clic en el smbolo + que tenemos a la izquierda del nombre de los arrays Colores y Nombres.

Fig.3. Ventana Variables Locales. Declaracin de arrays.

Vemos que los arrays declarados los define en la columna Tipo con la expresin String(), esto es, que contendrn valores de tipo String y con los parntesis puesto que son arrays. El array Paises no tiene ningn nmero de elementos, su valor es Nothing. El array Nombres tiene 4 elementos, del 0 al 3, las dos primeras posiciones con los valores asignados y las dos ltimas con valor Nothing, ya que nada hemos asignado a esas posiciones. Y el array Colores tiene 3 elementos, con ndice de 0 al 2, con los valores asignados al declararlo. En las declaraciones que hemos hecho de arrays, todos sus valores son del mismo tipo de datos. Si necesitamos que un array almacene datos de tipos diferentes, debemos declarar el array como tipo Object, el tipo de dato genrico en el entorno de NET. Por ejemplo, probemos las siguientes lneas de cdigo:
Dim Valores(3) As Object Valores(0) = 1 'integer Valores(1) = "datos" 'string Valores(2) = False ' boolean Valores(3) = #11/21/2007# ' date

En la ventana de las variables locales podemos observar los valores de distinto tipo que contendr el array (fig.4).

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Fig.4. Ventana Variables Locales. Array de tipo Object.

Nota: Si observis, la asignacin de la fecha a la ltima posicin del array se tuvo que hacer en el formato mes/da/ao, empleando el smbolo #. Si se asignase con las comillas, (21/11/2007) considerara que se trataba de un valor de tipo String, no de un valor de tipo Date. Una solucin sera utilizar la funcin CDate, para convertir una expresin (String) en tipo Date:
Valores(3) = CDate("21/11/2007") ' date

En esto ejemplo hemos utilizado arrays de una nica dimensin pero, lgicamente, podemos declarar arrays de ms dimensiones.
Dim datos(2, 2) As Integer ' array de dos dimensiones

Redimensin de arrays Para modificar el tamao o nmero de elementos de un array, emplearemos la instruccin ReDim, seguido del array a modificar y el nuevo tamao. Pero esta accin provoca la prdida de la informacin que tuviese almacenado el array. Si queremos evitar esta prdida, tendremos que incluir la palabra Preserve despus de la declaracin Redim.
Dim Nombres(2) As String ' array con 3 elementos Nombres(0) = "Enrique" Nombres(1) = "Marta" Nombres(2) = "Elena" ' redimensionamos el array Nombres para que tenga dos elementos ms, ' para conservar los valores que ya tienen los tres primeros elementos ' especificamos la palabra Preserve al redimensionar ReDim Preserve Nombres(4) Nombres(3) = "Carlos" Nombres(4) = "Andrs"

Utiliza el ejercicio Unidad2 para probar estas lneas de cdigo. Primero redimensiona el array sin la palabra Preserve y observa en la ventana de variables locales como se han perdido los tres primeros valores del array. Luego comprueba como con la palabra Preserve estos valores se mantienen.

Recorrer un array Para recorrer todos los elementos de un array emplearemos la estructura de control For...Next. Vamos a borrar todos los objetos que tenemos en el ejercicio Unidad2 y dibujamos un botn y un cuadro de texto. Esto es, nos quedara en el formulario dos controles, TextBox1 y Button1. En la ventana de cdigo incluiremos las siguientes lneas en el procedimiento Button1.Click.

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' declaramos un array y le asignamos valores Dim Numeros() As Integer = {1, 2, 3, 4, 5, 6, 7} ' recorremos el array y aadimos cada elemento al cuadro de texto TextBox1 For Each i As Integer In Numeros Me.TextBox1.AppendText(i) Next End Sub

La variable i (que la declaramos de tipo Integer) recoger cada elemento del array Numeros y mediante el mtodo AppendText del cuadro de texto, se aadir al contenido de la propiedad Text del TextBox1. Al final, en la propiedad Text tendremos la secuencia de todos los elementos del array Numeros.

Operadores aritmticos Veamos un breve cuadro con los operadores aritmticos. Suma/Resta Multiplicacin Potencia Divisin real Divisin entera Resto Concatenacin +/* ^ / \ Mod &

Dim Rtdo As Integer = (-2) ^ 3 ' Rtdo = -8 Dim Rtdo As Single = 9 / 5 ' Rtdo = 1.8 Dim Rtdo1 As Single = 9 \ 5 ' Rtdo = 1.0 Divide, con divisin entera, dos nmeros y devuelve el resto de la divisin. Dim Resto As Single = 9 Mod 5 ' Rtdo = 4.0 Une dos o ms cadenas de caracteres para formar una nica cadena. Dim Nombre As String = "Marcos " & "Garca" ' Nombre = "Marcos Garca"

Operadores de comparacin < <= > >= = <> Menor que Menor o igual que Mayor que Mayor o igual que Igual a Distinto de

El resultado obtenido es un valor de tipo Boolean, esto es un valor lgico, True (verdadero) o False (falso).
Dim Rtdo As Boolean = 8 > 5 ' Rtdo = True

Para obtener ms informacin sobre los operadores del lenguaje, podis consultar la ayuda. Y sobre los operadores lgicos no hago referencia a ellos ya que son similares a los de otros lenguajes de programacin.

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Procedimientos Los procedimientos son un conjunto de sentencias de cdigo, identificadas con un nombre, que al invocar a ste se ejecutan en secuencia. Existen tres tipos: Los procedimientos Sub realizan acciones pero no devuelven un valor al punto de llamada. Los controladores de eventos son procedimientos Sub que se ejecutan en respuesta a un evento. Los procedimientos Function pueden devolver un valor al procedimiento que origina la llamada. La instruccin MessageBox.Show es un ejemplo de funcin. Los procedimientos Property devuelven y asignan valores de propiedades de clases.

Sintaxis de un procedimiento tipo Sub:


[Accesibilidad] Sub NombreProcedimiento[(ListaParmetros)] [lneas de cdigo] [Exit Sub | Return] [lneas de cdigo] End Sub

La Accesibilidad indicar la posibilidad de invocar al procedimiento desde los distintos puntos de la aplicacin. Por ejemplo, un procedimiento con accesibilidad Private en un formulario, ser accesible nicamente en ese formulario, no se podr invocar desde otro formulario de la aplicacin. Si no especificamos nada, ser Public, reconocible en toda la aplicacin. La sentencia Return y Exit Sub permiten concluir la ejecucin del procedimiento sin haber llegado a su fin. Podemos utilizarla en tantos lugares dentro de un procedimiento como sea necesario. Sintaxis de un procedimiento Function:
[Accesibilidad] Function NombreFuncin[(ListaParmetros)] As TipoDato [lneas de cdigo] [Return Valor] [NombreFuncin = Valor] [Exit Function] [lneas de cdigo] End Function

Como podemos ver, los procedimientos Function, llamados funciones, pueden retornar un valor, para ello tenemos las sentencias Return Valor o NombreFuncin = Valor. Veamos un ejemplo que podemos probar en el ejercicio Unidad2. Declaramos una funcin con el nombre CalcularSuma y dos parmetros Operando1 y Operando2 de tipo Integer, por lo tanto el valor que retorna la funcin tambin ser de tipo Integer y as se ha declarado al final de la cabecera de la funcin con la expresin As Integer.
Function CalcularSuma(ByVal operando1 As Integer, ByVal operando2 As Integer) As Integer 'Return operando1 + operando2 CalcularSuma = operando1 + operando2 End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Rtdo As Integer = CalcularSuma(4, 5) End Sub

El valor de retorno, que ser la suma de los dos operandos, se realizar mediante las expresiones:

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

CalcularSuma = operando1 + operando2 o tambin Return operando1 + operando2

Cualquiera de ellas ser vlida. Ejecutar el cdigo en modo depuracin y observar los valores de las variables en la ventana de variables locales (fig.5).

Fig.5. Funcin CalcularSuma.

Pasos de parmetros

Mecanismo de paso Por valor Palabra clave: ByVal

Explicacin El procedimiento invocado recibe una copia de los datos cuando es invocado.

Implicaciones Si el procedimiento invocado modifica la copia, el valor original de la variable permanece intacto. Cuando la ejecucin retorna al procedimiento de llamada, la variable contiene el mismo valor que tena antes de que el valor se pasara. El procedimiento invocado puede modificar la variable directamente. Cuando la ejecucin retorna al procedimiento de llamada, la variable contiene el valor modificado.

Ventaja Protege la variable de ser cambiada por el procedimiento invocado.

Por referencia Palabra clave: ByRef

El procedimiento invocado recibe una referencia a los datos originales (la direccin de los datos en memoria) cuando es invocado.

El procedimiento invocado puede utilizar el argumento para devolver un nuevo valor al cdigo de llamada.

Si no se especifica nada, el editor de cdigo aade la palabra ByVal, es decir, por defecto el paso de parmetros se realiza por valor.

10

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Estructuras de control Sentencia If

Tenemos varias sintaxis:


If Expresin Then Instruccin_Verdadero [Else Instruccin_Falso]

If Expresin Then lneas de cdigo cuando Expresin es Verdadero ...... [Else] lneas de cdigo cuando Expresin es Falso ...... End If

If ExpresinA Then lneas de cdigo cuando ExpresinA es Verdadero ....... ElseIf ExpresinB Then lneas de cdigo cuando ExpresinB es Verdadero ....... [ElseIf ExpresinN Then] lneas de cdigo cuando ExpresinN es Verdadero ....... [Else] lneas de cdigo cuando ninguna expresin devuelve Verdadero ....... End If

Sentencia Select Case

Select Case Expresin Case ListaExpresionesA lneas de cdigo si se cumple ListaExpresionesA ..... [Case ListaExpresionesB] lneas de cdigo si se cumple ListaExpresionesB ..... [Case Else] lneas de cdigo si no se cumple ninguna ListaExpresiones ..... End Select

La lista de expresiones asociada a cada Case en esta estructura estar separada por comas y podr tener alguno de los siguientes formatos: Expresin. ExpresinMenor To ExpresinMayor Is OperadorComparacin Expresin. Veamos un ejemplo:
Dim numero As Integer = 8

11

VALLINIELLO Select Case numero Case 1 To 5 Me.TextBox1.Text Case 6, 7, 8 Me.TextBox1.Text Case 9 To 10 Me.TextBox1.Text Case Else Me.TextBox1.Text End Select

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

= "Entre 1 y 5, inclusive" = "Entre 6 y 8, inclusive" = "Entre 9 y 10, inclusive" = "No est entre 1 y 10"

Se pueden utilizar varias expresiones o intervalos en cada clusula Case. Por ejemplo, la lnea siguiente es vlida:
Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber

Sentencia DoLoop

Las instrucciones DoLoop proporcionan un modo para ejecutar un bloque de cdigo mientras una condicin sea verdadera o hasta que lo sea.
Do [While | lneas de ...... [Exit Do] lneas de ...... Loop [While Until Expresin] cdigo cdigo | Until Expresin]

La condicin se puede comprobar al principio, despus del Do, o al final, despus del Loop, y con While o con Until. Tambin podemos utilizar la sentencia Exit Do para finalizar la ejecucin de un bloque DoLoop en cualquier lugar de las lneas de cdigo. Se puede emplear la sentecia Exit Do tantas veces como sea necesario. Veamos el proceso de sumar los nmeros del 1 al 5 empleando un bloque DoLoop con la condicin en distintos lugares. Con la condicin al principio y con While
' Sumar los nmeros del 1 al 5 Dim numero As Integer = 1 Dim total As Integer Do While numero <= 5 ' acumulamos en total el valor de la variable numero total += numero ' incrementamos en 1 la variable numero numero += 1 Loop ' total ser igual a 15

Con la condicin al final y con Until


' Sumar los nmeros del 1 al 5

12

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Dim numero As Integer = 1 Dim total As Integer Do ' acumulamos en total el valor de la variable numero total += numero ' incrementamos en 1 la variable numero numero += 1 Loop Until numero > 5 ' total ser igual a 15

Con la condicin entre las lneas de cdigo y con Exit Do


' Sumar los nmeros del 1 al 5 Dim numero As Integer = 1 Dim total As Integer Do ' acumulamos en total el valor de la variable numero total += numero If numero = 5 Then Exit Do ' incrementamos en 1 la variable numero numero += 1 Loop ' total ser igual a 15

Vamos a ejecutar este ltimo bloque DoLoop. Para ello escribimos todo el cdigo dentro de un procedimiento Clic de un botn. Una vez hecho, vamos a aprender a establecer un punto de interrupcin en nuestro cdigo. Al establecer puntos de interrupcin en las lneas de cdigo, cuando iniciemos la ejecucin del proyecto con F5, sta se detendr cuando encuentre un punto de interrupcin, a partir de esa lnea se podr ejecutar el programa en modo depuracin, con F8, o retomar la ejecucin normal, con F5. Vamos a establecer un punto de interrupcin al comienzo del bloque DoLoop. Situamos el cursor en la lnea donde se encuentra la sentencia Do y pulsamos la tecla F9 (o vamos a la opcin del men Depurar + Alternar puntos de interrupcin). Aparecer esa lnea resaltada en rojo (fig.6).

13

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Fig.6.Depuracin bloque DoLoop.

Si iniciamos la ejecucin con F5, nos aparecer el formulario, y al hacer clic en el botn Button1, la ejecucin del cdigo se detendr en la lnea donde tenemos el punto de interrupcin, esto es, donde comienza el bloque DoLoop. Ahora vamos ejecutando, con F8, el cdigo lnea a lnea y observamos los valores que van tomando las variables locales numero y total; as como el momento en que se cumple la condicin y se ejecuta la sentencia Exit Do. Lgicamente se pueden establecer los puntos de interrupcin que se quiera. Tambin se pueden establecer puntos de interrupcin en las lneas de cdigo haciendo clic en la columna de la izquierda que contiene los crculos rojos que identifican la existencia de un punto de interrupcin (fig.7).

Fig.7.Establecer puntos de interrupcin.

Para eliminar un punto de interrupcin hacemos clic sobre el crculo rojo o pulsamos F9 con el cursor sobre la lnea de cdigo. Sentencia ForNext

Podemos utilizar un bucle ForNext cuando conocemos el nmero de veces que es necesario que se ejecute un bloque de cdigo. Una instruccin ForNext repite un conjunto de instrucciones un nmero especfico de veces.
For Contador = Inicio To Fin [Step Incremento] lneas de cdigo ...... [Exit For] lneas de cdigo ...... Next

Contador se inicializa con el valor de Inicio y el cdigo existente entre For y Next es ejecutado hasta que el valor de Contador sea igual a Fin. Por defecto, los incrementos de Contador son en uno, pero podemos cambiar este aspecto utilizando el modificador Step, mediante el que podemos establecer el nmero en el que se van a realizar los incrementos. Step tambin nos permite realizar decremento utilizando un nmero negativo. El ejemplo anterior de obtener la suma de los nmeros del 1 al 5 sera con un bloque ForNext.
' Sumar los nmeros del 1 al 5 Dim total As Integer Dim i As Integer ' Contador For i = 1 To 5

14

VALLINIELLO total += i Next

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Tambin podemos declarar la variable que hace de contador (variable i) en la misma declaracin For.
' Sumar los nmeros del 1 al 5 For i As Integer = 1 To 5 total += i Next

Si queremos realizar una salida de la ejecucin de esta estructura antes de haber completado el nmero de iteraciones establecidas, podemos utilizar la instruccin Exit For, que provocar dicha salida de igual modo que el explicado anteriormente en la estructura Do...Loop. Sentencia For EachNext

Una instruccin For EachNext ejecuta un bloque de instrucciones para cada elemento de un array o una coleccin (ms adelante veremos este concepto).
For Each Elemento In Array/Coleccin lneas de cdigo ...... [Exit For] lneas de cdigo ...... Next

Veamos el ejemplo anterior, pero almacenando los nmeros en un array, y recorrindolo con un bloque For EachNext.
'Sumar los nmeros del 1 'almacenados en el array Dim total As Integer Dim numeros() As Integer For Each i As Integer In total += i Next al 5 numeros() = {1, 2, 3, 4, 5} numeros

Controles ms comunes. TextBox, Button y Label Vamos a desarrollar un ejercicio para comprender la utilizacin de estos controles bsicos. Creamos un nuevo proyecto y le asignamos el nombre 01.DatosAlumnos. Al formulario de inicio Form1 vamos a cambiarle el nombre para identificarlo mejor, y tambin la leyenda que aparece en el cuadro azul superior, que tambin contiene el literal Form1. Para ello vamos al Cuadro de Propiedades y en la propiedad Name le asignamos el valor frmInicio. Las tres primeras letras frm se emplean para identificarlo como un objeto de la clase Form (formulario). Y en la propiedad Text escribimos Datos Alumnos (fig.7).

15

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Fig.8. Cuadro de propiedades. Modificar propiedad Name y Text del formulario.

Como se puede ver, el nombre del formulario se actualiz en la lista desplegable de la parte superior del cuadro de herramientas, su nuevo nombre es frmInicio. Y tambin se actualiz la leyenda del formulario del cuadro azul superior, ahora aparece el literal Datos Alumnos Nota: Siempre que se vaya a modificar una propiedad hay que fijarse en la lista desplegable superior del cuadro de herramientas para cerciorarse de que se estn editando las propiedades del objeto que deseamos modificar. Esto es muchas veces causa de equivocaciones. Vamos a aadir otro formulario a nuestro proyecto. Para ello tendremos que conocer otra ventana del entorno de desarrollo del VB, el Explorador de soluciones, accedemos a l situndonos en la pestaa lateral de la parte derecha o en el icono del men sealado en la siguiente figura:

16

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Fig.9. Acceder al Explorador de soluciones.

El explorador de soluciones nos muestra los elementos que contiene nuestro proyecto: formularios, mdulos, clases, etc. (fig.10).

Fig.10. Explorador de soluciones.

Vamos a aadir los dos elementos sealados en la figura 10, el formulario frmVerDatos.vb y el mdulo datos.vb. Para aadir un nuevo formulario a nuestro proyecto vamos a la opcin del men Proyecto + Agregar Windows Forms y nos aparece una ventana donde est seleccionada la plantilla Windows Forms, le cambiamos el nombre genrico Form1.vb por frmVerDatos.vb. Ahora vamos a aadir un mdulo, que no es ms que un fichero con la extensin vb que puede contener cualquier tipo de cdigo Visual Basic. Generalmente se utilizan para declarar mtodos o variables que no estn directamente relacionadas con los formularios del proyecto, es decir, son independientes al cdigo de stos. Un formulario tambin tiene la extensin vb, puesto que contiene cdigo en visual Basic, pero, a diferencia del mdulo, tiene una vista de componentes con representacin grfica (vista diseo). Para agregar un mdulo, tenemos la opcin del men Proyecto + Agregar mdulo y le damos el nombre datos.vb. Ya tenemos completo la vista del Explorador de soluciones de la figura 10. Slo nos queda comentar la entrada My Project que, al hacer doble clic en ella, nos muestra una ventana con las propiedades del proyecto, que ya veremos algunas de ellas cuando necesitemos modificarlas.

17

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Vamos a comenzar el diseo del formulario frmInicio. Los controles que necesitamos para este formulario son TextBox, Button y Label. (fig.11).

Fig.11. Controles para el formulario frmInicio.

El formulario frmInicio tendr el siguiente aspecto en su diseo de controles (fig.12):

Fig.12. formulario frmInicio.

18

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

En el siguiente cuadro representamos los valores que recibirn las propiedades de los distintos controles dibujados en el formulario:

Tipo de Control Label Label Label Label Label Label Button Button TextBox TextBox TextBox

Propiedad: Name Label1 Label2 Label3 Label4 Label5 lblNalum btnAceptar btnVerDatos txtNombre txtApellido txtCurso

Propiedad: Text Datos Alumnos Nombre: Apellidos: Curso: N Alumnos: lblNalum Aceptar Ver Datos

Las etiquetas que no se van a utilizar en el cdigo del formulario no es necesario que cambiemos el nombre que se le asigna por defecto (label1, label2, label3.). Sin embargo la etiqueta lblNalum le asignamos otro nombre, ya que va a contener el nmero de alumnos que hemos introducido en un momento dado, por lo que durante el proceso ir variando su contenido. Como se puede observar, a los objetos los nombramos con tres letras al principio de su nombre para identificar el tipo de objeto que es. Vamos a adoptar el siguiente criterio: Control Label Button TextBox Prefijo lbl btn txt

La etiqueta Label1 que contiene el literal Datos Alumnos tiene un tamao de letra mayor que el resto de las etiquetas. Para ello modificamos la propiedad Font de dicha etiqueta (fig.13). Al seleccionar esta propiedad, nos aparece un pequeo botn a la derecha; al hacer clic en l surge un cuadro donde podremos modificar la fuente del texto de Label1.

Fig.13. Propiedad Font de Label1

Seleccionemos en dicho cuadro el estilo de fuente a negrita, y el tamao a 14. Y hagamos clic en el botn Aceptar.

19

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Ya concluido el diseo del formulario, podemos observar en la lista desplegable de la parte superior del cuadro de propiedades, todos los controles que contiene el formulario con su nombre y la clase a la que pertenecen (fig14).

Fig.14. Lista desplegable del cuadro de propiedades del formulario frmInicio

Comencemos con la codificacin del ejercicio. Vamos primero a introducir el cdigo en el mdulo datos.vb. En el explorador de soluciones hacemos doble clic en el elemento datos.vb y nos aparecer una pestaa donde introduciremos el cdigo que contendr este mdulo. Escribimos las siguientes lneas de cdigo dentro del bloque Module datos . . . End Module:
Module datos Structure Alumno Dim nombre As String Dim apellido As String Dim curso As String End Structure Friend aAlumno() As Alumno Friend nAlumno As Short End Module

Examinemos estas lneas de cdigo. Primeramente declaramos una estructura, que consiste en la agupacin de un conjunto de datos para formar un dato compuesto. Esta es una definicin sencilla de una estructura, pero para este ejercicio nos basta. A la estructura le hemos dado el nombre Alumno, ya que contendr informacin de un alumno: su nombre, apellido y el curso en el que est matriculado. Declaramos tres variables para recoger esa informacin. A continuacin declaramos el array aAlumno, que ser del tipo de la estructura que acabamos de crear (As Alumno). Por lo que cada posicin del array alumno almacenar un valor nombre, un valor apellido y un valor curso. Para acceder a estos valores tendremos que escribir:
aAlumno(i).nombre aAlumno(i).apellido aAlumno(i).curso

Este array tiene un nivel de acceso distinto del utilizado hasta ahora. La declaracin del array viene encabezada por la palabra Friend en vez de Dim. Si emplesemos esta ltima, el array slo sera accesible en el mdulo donde lo hemos declarado, esto es en datos.vb. Pero con un nivel de acceso Friend, conseguimos poder utilizar el array en el cdigo de todos los ficheros con extensin vb que

20

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

tenemos en el proyecto, esto es, podemos utilizarlo en el cdigo de los formularios del proyecto. El nivel de acceso Public tambin nos valdra. Tambin observamos que no hemos especificado ningn valor entre los parntesis al declarar el array aAlumno, esto es, que no determinamos el nmero de elementos que contendr el array. Ya que no sabemos el nmero de alumnos que vamos a almacenar en l, redimensionaremos el array a medida que se vayan introduciendo nuevos alumnos. Y por ltimo, declaramos la variable nAlumno, tambin con nivel de acceso Friend, y de tipo Short (entero de formato corto).

Ahora vamos a escribir el cdigo del formulario frmInicio. Seleccionamos el formulario en el explorador de soluciones y pulsamos F7. Ya estamos en la pestaa del cdigo del formulario. Vamos a codificar el primer procedimiento, frmInicio_Load. Para que el entorno de desarrollo de VB nos escriba el bloque de este procedimiento, seleccionamos de la lista desplegable de la parte superior izquierda de la ventana en la que nos encontramos la opcin (frmInicio eventos), y de la lista desplegable de la derecha, el mtodo Load, (fig. 15).

Fig.15. Procedimiento frmInicio_Load

Este mtodo se ejecuta antes de que se muestre el formulario por primera vez, es decir, cuando se carga el formulario en memoria. En l escribimos un comentario y una nica sentencia:
' inicializar la etiqueta lblNalum Me.lblNalum.Text = 0

Que inicializa el valor de la propiedad Text de la etiqueta lblNalum a cero. Est etiqueta nos indicar el nmero de alumnos que tendremos ya recogidos en el array, por lo que inicialmente valdr cero. Si ejecutamos el proyecto en modo depuracin (pulsando F8, y ejecutando lnea a lnea) vemos que antes de que se muestre el formulario se ejecuta este mtodo y la etiqueta contendr su nuevo valor, cero. Nota: La palabra MyBase hace referencia a la clase de donde hered la clase en la que nos encontramos (frmInicio). Todos los formularios heredan de la clase base Form, por lo tanto Mybase hace referencia esa clase. Y con la expresin MyBase.Load se est invocando al mtodo Load de la clase Form, clase base del formulario frmInicio. Sigamos con el cdigo del formulario. La lgica del proceso parece sencilla: se escribirn valores para los cuadros de texto txtNombre, txtApellidos y txtCurso, y despus se har clic en el botn Aceptar, esto conllevar el guardar los datos en el array. Su proceso ser: 1. Incrementamos la variable nAlumno, ya que recoger en todo momento el nmero de alumnos que tiene el array. Como inicialmente la variable tena el valor cero, ahora ser 1.

21

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

2. Redimensionamos el array con el valor de la variable anterior, para crear la posicin 1 del array. Recordar que lo habamos declarado sin especificar ningn nmero de elementos. Adems, lo redimensionamos con la palabra Preserve para que conserve los valores que ya tiene almacenado el array. En este primer caso nada conservar ya que es la primera posicin la que estamos guardando. 3. Guardamos los contenidos de los cuadros de texto en el array. Recordamos que el array es del tipo compuesto Alumno. 4. Actualizamos la etiqueta lblNalum. 5. Y por ltimo borramos el contenido de los cuadros de texto para dejarlas preparadas para los datos del nuevo alumno. Luego buscamos el mtodo Click del botn btnAceptar (en las listas desplegables superiores) y escribiremos el cdigo siguiente:
Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click 'Guardar datos alumno en el array ' incrementar nAlumno nAlumno += 1 'redimensionamos el array aAlumno ReDim Preserve aAlumno(nAlumno) ' guardar datos en el array aAlumno(nAlumno).nombre = Me.txtNombre.Text aAlumno(nAlumno).apellido = Me.txtApellido.Text aAlumno(nAlumno).curso = Me.txtCurso.Text ' mostrar el n de alumnos Me.lblNalum.Text = nAlumno ' borrar cajas de texto Me.txtNombre.Text = Nothing Me.txtApellido.Text = Nothing Me.txtCurso.Text = Nothing End Sub

Para ejecutar este proceso lnea a lnea (modo depuracin) vamos a aadir un punto de interrupcin en el comienzo del mtodo btnAceptar.Click, y ejecutamos el proyecto. Damos valores para un nuevo alumno y pulsamos el botn Aceptar. La ejecucin se detiene al comienzo del procedimiento. Para ver los valores que van tomando la variable nAlumno y el array aAlumno, vamos a llevarlos a una ventana de Inspeccin. La ventana Variables locales no contendr estas variables porque, recordemos, estn declaradas en el mdulo datos no en el formulario. Empecemos por la variable nAlumno, para llevarla a la ventana inspeccin, situamos el cursor en la variable y vamos al men, a la opcin Depurar + Inspeccin rpida; nos muestra la ventana de inspeccin rpida, hacemos clic en el botn Agregar inspeccin y ya tenemos la variable en la ventana inspeccin. Hacemos el mismo proceso para el array. Ahora vamos ejecutando lnea a lnea el procedimiento (F8) y vamos viendo como va cambiando el contenido de la variable y el array en la ventana de inspeccin. Cuando lleguemos al final del procedimiento, antes de ejecutar la sentencia End Sub, tendremos la variable nAlumno con valor 1, y en la posicin 1 del array los datos del alumno que hemos introducido (fig. 16). Nota: La posicin 0 del array se cre al redimensionar el array con el valor 1, pero no la vamos a utilizar en este ejercicio.

22

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Fig.16. Ventana Inspeccin

Introducimos ms alumnos y comprobamos como el proceso se ejecuta de acuerdo a la lgica del ejercicio. Ya tenemos el proceso principal del botn btnAceptar desarrollado, no obstante vamos a incorporar ms instrucciones a este proceso, por ejemplo, si queremos que el usuario introduzca todos los datos de un alumno para no guardar informacin en blanco en el array, podemos escribir las siguientes instrucciones al comienzo del procedimiento:

' comprobar que esten todos los datos If Me.txtNombre.Text = Nothing Or Me.txtApellido.Text = Nothing Or Me.txtCurso.Text = Nothing Then MessageBox.Show("Faltan datos", "Datos alumnos", MessageBoxButtons.OK, MessageBoxIcon.Information) Exit Sub End If

Cmo podis ver, comprobamos si alguno de los cuadros de texto tiene un valor vaco (Nothing), en el caso de que alguno estuviese vaco, mostramos un mensaje mediante el objeto MessageBox, y su mtodo Show, avisando de este hecho, y ejecutamos la sentencia Exit Sub, esta sentencia, como su nombre indica, provoca la conclusin de la ejecucin del procedimiento en el que estamos. Luego el cdigo del procedimiento Click del Botn btnAceptar quedara:
Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click ' comprobar que esten todos los datos If Me.txtNombre.Text = Nothing Or Me.txtApellido.Text = Nothing Or Me.txtCurso.Text = Nothing Then MessageBox.Show("Faltan datos", "Datos alumnos", MessageBoxButtons.OK, MessageBoxIcon.Information) Exit Sub End If 'Guardar datos alumno ' incrementar nAlumno

23

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas nAlumno += 1 'redimensionamos el array aAlumno ReDim Preserve aAlumno(nAlumno) ' guardar datos en el array aAlumno(nAlumno).nombre = Me.txtNombre.Text aAlumno(nAlumno).apellido = Me.txtApellido.Text aAlumno(nAlumno).curso = Me.txtCurso.Text ' mostrar el n de alumnos Me.lblNalum.Text = nAlumno

' borrar cajas de texto Me.txtNombre.Text = Nothing Me.txtApellido.Text = Nothing Me.txtCurso.Text = Nothing End Sub

Ahora veamos el cdigo que contendr el evento Click del botn btnVerDatos. Simplemente queremos que al hacer clic en este botn, nos muestre el otro formulario que tenemos en nuestro proyecto, frmVerDatos. Con la siguiente instruccin lo conseguiremos:
Private Sub btnVerDatos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerDatos.Click ' mostrar formulario frmVerDatos frmVerDatos.ShowDialog() End Sub

Pero este formulario est sin ningn objeto. Vamos a la pestaa de diseo del formulario y dibujamos slo dos objetos en l, un TextBox y un Button. Tipo de Control TextBox Button Propiedad: Name txtDatos btnCerrar Propiedad: Text Cerrar

Ahora modificaremos dos propiedades del control txtDatos. La propiedad Multiline la pondremos a valor True (por defecto est a false), con lo que conseguiremos que el cuadro pueda contener ms de una lnea de texto; ahora ya podemos modificar el tamao del control para ver las mltiples lneas de texto que contendr. Y la propiedad Readonly, tambin la cambiamos a valor True, con lo que el usuario no podr modificar el texto que mostremos en el cuadro; podra decirse que se comportara como una etiqueta. El formulario quedara:

24

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Fig.17. Formulario frmVerDatos.

Nota: para cambiar el texto que aparece en el cuadro azul superior del formulario. Modificamos el valor de la propiedad Text del formulario frmVerDatos.

Fig.18. Propiedad Text de frmVerDatos

El proceso consistir en mostrar toda la informacin que tenemos almacenada en el array aAlumno en el cuadro de texto txtDatos del formulario. Una lnea por alumno. Utilizaremos tambin el evento Load del formulario, y en l introduciremos el siguiente cdigo:
Public Class frmVerDatos Private Sub frmVerDatos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' borrar el contenido de txtDatos Me.txtDatos.Text = Nothing ' mostrar los datos del array aAlumno en txtDatos, uno alumno por lnea For i As Short = 1 To aAlumno.GetUpperBound(0) Me.txtDatos.AppendText(aAlumno(i).nombre & " - " & aAlumno(i).apellido & " - " & aAlumno(i).curso & vbNewLine) Next End Sub End Class

Veamos las novedades del cdigo anterior: La expresin aAlumno.GetUpperBound(0) nos proporciona el nmero de elementos que tiene el array aAlumno en su primera dimensin (dimensin 0), que en este caso es la nica. Esta informacin tambin nos la dara la variable nAlumno. Con la sentencia: Me.txtDatos.AppendText(aAlumno(i).nombre & " - " & aAlumno(i).apellido & " - " & aAlumno(i).curso & vbNewLine). Aadimos a txtDatos todos los datos de una posicin del array (posicin i) que corresponde a un alumno, separados por un guin y al final provocamos un salto a la siguiente lnea con vbNewLine.

Tambin podamos haber escrito la siguiente secuencia:


Dim alum As Alumno

25

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 2 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

For Each alum In aAlumno Me.txtDatos.AppendText(alum.nombre & " - " & alum.apellido & " - " alum.curso & vbNewLine) Next

&

El inconveniente es que la posicin 0 del array no la estamos utilizando y con esta secuencia si se tendra en cuenta y aparecera una lnea con dos guiones al principio. Ya por ltimo nos quedara asignarle cdigo al botn btnCerrar, simplemente vamos a cerrar el formulario actual con la sentencia Me.Close(). Nota: Me hace referencia a la propia clase en la que estamos. En nuestro caso al formulario, el mtodo Close, provoca el cierre del formulario. Lo usamos bastante al introducir el cdigo ya que al escribir Me y a continuacin aadir un punto, nos muestra un desplegable con todas las propiedades del formulario y todos los controles que hemos dibujado en el formulario, facilitndonos as la bsqueda de los mismos. Tambin MyClass tiene esta misma utilidad. El procedimiento quedara:
Private Sub btnCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCerrar.Click ' cerrar el formulario Me.Close() End Sub

Ya hemos terminado el proyecto, vamos a ejecutarlo e introducir varios alumnos y vemos que funciona tal y como habamos pensado (fig.20).

Fig.20. Proyecto en ejecucin.

26