Está en la página 1de 101

VISUAL BASIC .

NET
Es un manual bsico sobre la programacin en Visual Basic .Net
Toda la informacin de este documento est recopilada y organizada en base a otros manuales sacados de www.lawebdelprogramador.com

Pedro Cuello
12/05/2011

LECTURA Y ESCRITURA 5 OPERACIONES MATEMTICAS ...................................................................................................... 5 FUNCIONES DE CONVERSIN ........................................................................................................ 7 SMBOLOS DE COMPRARACIN .................................................................................................... 8 OPERADORES ................................................................................................................................ 8 AND............................................................................................................................................ 8 ANDALSO..................................................................................................................................... 8 OR.............................................................................................................................................. 9 XOR ............................................................................................................................................ 9 ORELSE...................................................................................................................................... 10 NOT .......................................................................................................................................... 10 IS.............................................................................................................................................. 10 TO ............................................................................................................................................ 11 FUNCIONES TIPO FECHA ........................................................................................................... 11 Funcin Now()...................................................................................................................... 11 Funcin Date() ..................................................................................................................... 11 Funcin Year(Fecha) ............................................................................................................. 11 Funcin Month(Fecha) ......................................................................................................... 11 Funcin Day(Fecha).............................................................................................................. 11 Funcin WeekDay(Fecha) ..................................................................................................... 11 Funcin DateAdd(TipoIntervalo,ValorIntervalo,Fecha).......................................................... 11 Funcin DateDiff(TipoIntervalo,FechaPrimera,FechaSegunda).............................................. 11 Funcin DatePart(TipoIntervalo,fecha) ................................................................................. 11 INSTRUCCIN CONDICIONAL....................................................................................................... 11 CONDICIONES MULTIPLES ........................................................................................................... 13 PROCESOS REPETITIVOS .............................................................................................................. 14 For / Next............................................................................................................................. 14 For Each ............................................................................................................................... 15 Funcin Reset....................................................................................................................... 15 Funcin Exit ......................................................................................................................... 15 ESTRUCTURAS REPETITIVAS ........................................................................................................ 16 WHILE / END WHILE..................................................................................................................... 16 DO / LOOP ................................................................................................................................. 16 ARRAYS ....................................................................................................................................... 17 ARRAY UNIDIMENSIONAL............................................................................................................... 17 ARRAY MULTIDIMENSIONAL ........................................................................................................... 18 2

PROCEDIMIENTOS ....................................................................................................................... 19 PARMETROS O ARGUMENTOS DE LOS PROCEDIMIENTOS ...................................................................... 20 ENUMERACIONES ....................................................................................................................... 22 PARADIGMAS.............................................................................................................................. 24 PARADIGMAS POR PROCEDIMIENTO ................................................................................................. 24 PARADIGMAS DECLARATIVOS.......................................................................................................... 24 PARADIGMA FUNCIONAL ............................................................................................................... 24 PARADIGMA ORIENTADO A OBJETOS ................................................................................................ 24 PROGRAMACIN ........................................................................................................................ 24 PROGRAMACIN CLSICA .............................................................................................................. 24 PROGRAMACIN MODULAR ........................................................................................................... 24 PROGRAMACIN ORIENTADA A OBJETOS .................................................................................. 28 INTRODUCCIN............................................................................................................................ 28 QU ES LA PROGRAMACIN ORIENTADA A OBJETOS? .............................................................. 28 LOS TRES PILARES DE LA PROGRAMACIN ORIENTADA A OBJETOS ........................................................... 28 Herencia .............................................................................................................................. 28 Encapsulacin ...................................................................................................................... 29 Polimorfismo........................................................................................................................ 29 LAS CLASES .................................................................................................................................. 29 LOS OBJETOS ............................................................................................................................... 29 Los miembros de una clase................................................................................................... 30 Crear o definir una clase....................................................................................................... 30 Definir los miembros de una clase ........................................................................................ 30 Acceder a los miembros de una clase ................................................................................... 31 LAS ESTRUCTURAS ...................................................................................................................... 35 LOS NOMBRE DE ESPACIOS ......................................................................................................... 35 QU ES UN NAMESPACE? ............................................................................................................. 35 Qu finalidad tiene el uso de los Namespace? .................................................................... 36 Anidar espacios de nombres: ................................................................................................ 36 Cmo acceder a los tipos declarados dentro de un Namespace? ......................................... 37 Ejemplos de cmo usar los Namespace ................................................................................ 37 APLICACN DE VENTANAS ......................................................................................................... 41 CREAR NUEVO PROYECTO ............................................................................................................. 41 EL IDE DE WINDOWSAPPLICATION ................................................................................................ 42 3

VENTANA DE CDIGO ................................................................................................................... 43 CAJA DE HERRAMIENTAS .............................................................................................................. 43 EXPLORADOR DE SOLUCIONES ........................................................................................................ 44 EXPLORADOR DE BASE DE DATOS ................................................................................................... 46 VENTANA DE PROPIEDADES ........................................................................................................... 47 VENTANA DE ERRORES ................................................................................................................. 47 BARRA DE HERRAMIENTAS .............................................................................................................. 1 FORMULARIOS (FORMS) ............................................................................................................... 2 INTRODUCCIN.............................................................................................................................. 2 TIPOS .......................................................................................................................................... 2 PROPIEDADES................................................................................................................................ 4 MTODOS.................................................................................................................................... 6 EVENTOS ..................................................................................................................................... 7 CONTROLES ................................................................................................................................ 10 COMMON CONTROLS.................................................................................................................... 10 COMPONENTS ............................................................................................................................ 12 CONTAINERS .............................................................................................................................. 13 DATA ........................................................................................................................................ 13 DIALOG ..................................................................................................................................... 10 MENUS & TOOLBARS .................................................................................................................. 10 PROPIEDADES: ............................................................................................................................ 11 Mtodos .............................................................................................................................. 11 EVENTOS ................................................................................................................................... 11 MSGBOX .................................................................................................................................... 1 FUNCIONES TIPO CADENA ............................................................................................................ 3 INPUTBOX ............................................................................................................................... 11 FORMAT .................................................................................................................................. 15 SELECT - CASE .......................................................................................................................... 19 UTILIZANDO FUNCIONES DE FECHA Y PUBLICAS Y TAMBIEN MODULOS, CLASES Y NAMESPACE .................................................................................................................................................... 28 FUNCIONES PBLICAS EN UN MDULO ............................................................................................ 28 CLASES Y NAMESPACE EN UN MDULO ........................................................................................... 30 FUNCION SHELL........................................................................................................................... 35

Una vez que tengas instalado el Visual Studio 2005, abrimos un proyecto nuevo de consola. S, como has ledo, empezaremos con aplicaciones desde consola. Ya pasaremos ha ventanas y dems. EMPEZAMOS!

LECTURA Y ESCRITURA
La siguiente imagen muestra una lectura y escritura. La funcin Readline es para leer lo que el usuario ha escrito por pantalla y la funcin writeline es para imprimir mensajes por pantalla. Podemos declarar variables dim, static, public, private tal y como sucedia en VB6.

OPERACIONES MATEMTICAS
Existe una clase que permite realizar operaciones matemticas como races, potencias, etc. Es la clase Math.

Sintaxis del Sqrt: Math.Sqrt(NumeroASacarRaiz) 5

Sintaxis del Pow: Math.Pow(NumeroBase,NumeroDeExponente)

Las operaciones permitidas por esta clase Math son: E PI Representa la base logartmica natural, especificada por la constante e. Representa la relacin entre la longitud de la circunferencia de un circulo. Sobrecargado. Devuelve el valor absoluto de un nmero. Devuelve el ngulo cuyo coseno es el nmero especificado. Devuelve el ngulo cuyo seno es el nmero especificado. Devuelve el ngulo cuya tangente corresponde al nmero especificados. Devuelve el ngulo cuya tangente es el cociente de dos nmero especificados Calcula el producto completo de dos nmeros de 32 bits. Devuelve el nmero entero ms pequeo mayor o igual que el nmero especificado. Devuelve el coseno del ngulo especificado. Devuelve el coseno hiperblico del ngulo especificado. Sobrecargado. Devuelve el cociente de dos nmeros y pasa tambin como parmetro de salida el resto de la divisin. Devuelve e elevado a la potencia especificada. Devuelve el nmero entero ms grande menor o igual que el nmero especificado. Devuelve el resto de la divisin de dos nmeros especificados. Sobrecargado, devuelve el logaritmo de un nmero especificado. Devuelve el logaritmo en base 10 de un nmero especificado. Sobrecargado. Devuelve el mayor de dos nmeros. Sobrecargado. Devuelve el menor de dos nmeros. Devuelve un nmero especificado elevado a la potencia especificada. Sobrecargado. Devuelve el nmero ms prximo al valor especificado. Sobrecargado. Devuelve un valor que indica el signo de un nmero. Devuelve el seno del ngulo especificado. Devuelve el seno hiperblico del ngulo especificado. Devuelve la raz cuadrada de un nmero especificado. Devuelve la tangente del ngulo especificado. Devuelve la tangente hiperblica del ngulo especificado.

Abs Acos Asin Atan Atan2 BigMul Ceiling Cos Cosh DivRem Exp Floor IEEERemainder Log Log10 Max Min Pow Round Sign Sin Sinh Sqrt Tan Tanh

FUNCIONES DE CONVERSIN
Como se habrn dado cuenta que al activar la opcin de Option Strict, este nos obliga que tenemos que utilizar funciones de conversin para cada tipo de dato, con lo que no hacamos, si no lo estaba activado, como lo fue en los 8 primeros ejercicios, las funciones ms utilizadas estarn de color verde, las funciones de conversin son las siguientes: Nombre de la funcin Tipo de datos que devuelve Valores del argumento "expresin" CBool(expresin) Boolean Cualquier valor de cadena o expresin numrica. CByte(expresion) Byte De 0 a 255; las fracciones se redondean. CChar(expresion) Char Cualquier expresin de cadena; los valores deben ser de 0 a 65535. CDate(expresion) Date Cualquier representacin vlida de una fecha o una hora. CDbl(expresion) Double Cualquier valor Double, ver la tabla anterior para los valores posibles. CDec(expresion) Decimal Cualquier valor Decimal, ver la tabla anterior para los valores posibles. CInt(expresion) Integer Cualquier valor Integer, ver la tabla anterior para los valores posibles, las fracciones se redondean. CLng(expresion) Long Cualquier valor Long, ver la tabla anterior para los valores posibles, las fracciones se redondean. CObj(expresion) Object Cualquier expresin vlida. CShort(expresion) Short Cualquier valor Short, ver la tabla anterior para los valores posibles, las fracciones se redondean. CSng(expresion) Single Cualquier valor Single, ver la tabla anterior para los valores posibles. CStr(expresion) String Depende del tipo de datos de la expresin.

CType(expresion,Tipo) Val(expresion) Fix(expresion) Int(expresion)

Nota: Todos los objetos de vb.NET tienen unos mtodos para realizar conversiones a otros tipos, al menos de nmero a cadena, ya que tienen la propiedad. ToString que devuelve una representacin en formato cadena del nmero en cuestin (igual que CStr). El indicado en el segundo Cualquier tipo de datos parmetro Double Una cadena de caracteres. Depende del tipo de datos de Cualquier tipo de datos la expresin Depende del tipo de datos de Cualquier tipo de datos la expresin

Una de las funciones ms utilizadas, para hallar restos es la funcin Mod, ya sea para diversas soluciones ya sean Matemticas, fsicas y entre otras.
Mod: Devuelve el resto de una divisin, la sintaxis es la siguiente: Dividendo Mod Divisor

SMBOLOS DE COMPRARACIN
= igual < Menor que > Mayor que <= menor o igual >= mayor o igual <> Distinto

OPERADORES
And
El operador And solo utilizamos cuando queremos que se cumpla una serie de expresiones, por ejemplo:
If a > b And a > c Then Console.WriteLine("a es mayor que b y c") End If

Como vemos en este ejemplo, hacemos dos comparaciones, el primero si a es mayor que b, y la segunda si a es mayor que c, si estas dos expresiones (comparaciones) resultan verdaderas, nos mostrar un mensaje dicindoos que es mayor que b y c.

AndAlso
El operador AndAlso comprueba tambin una seria de expresiones, pero a comparacin del And, este comprueba siempre y cuando la expresin anterior resulta ser verdadera por ejemplo:
If a > b AndAlso a > c Then

End If

Console.WriteLine("a es mayor que b y c")

Como vemos en este ejemplo, hacemos dos comparaciones, el primero si a es mayor que b, y la segunda si a es mayor que c, si la primera expresin (a > b) resulta ser verdadera har la comparacin de la segunda expresin (a > c), pero si no lo es, ya no se evaluara la expresin siguiente. Pero si las dos resultan verdaderas, nos mostrar un mensaje dicindoos que a es mayor que b y c.

Or
El operador Or solo utilizamos cuando queremos que se cumpla una expresin de toda una serie de expresiones, por ejemplo:
If Promedio < 0 Or Promedio > 20 Then Console.WriteLine("Ingrese la Nota Correcta (1 . 20)") End If

En este ejemplo, si promedio es menor a cero o promedio es mayor a 20 nos mostrar un mensaje indicndonos que la nota que se ingreso es incorrecta, solo basta que una de las dos expresiones evaluadas sea verdadera.

Xor
El operador Xor lo utilizaremos para casos especiales ya que realiza una operacin de exclusin lgica entre dos expresiones de tipo Boolean o bien una exclusin bit a bit entre dos expresiones numricas, por ejemplo:
Resultado = expresin1 Xor expresin2

Resultado: Requerido. Cualquier variable numrica o de tipo Boolean. En una comparacin de tipo Boolean, el resultado ser la exclusin lgica de dos expresiones. En operaciones bit a bit, el resultado ser un valor numrico resultante de la disyuncin bit a bit de dos expresiones numricas. Expresin1: Requerido. Cualquier expresin numrica o de tipo Boolean. Expresin2: Requerido. Cualquier expresin numrica o de tipo Boolean del mismo tipo que expression1

Si son de Tipo Bolean Si Expresin1es... True True False False Y Expresin2 es... True False True False Resultado ser. False True True False

Si son de Tipo Bit (Numricos) Si el bit en Expresin1 es. Y el bit en Expresin2 es. 0 0 0 1 1 0

Resultado ser. 0 1 1

Ejemplo: Dim A As Integer = 10 Dim B As Integer = 8 Dim C As Integer = 6 Dim Resultado As Boolean Resultado = A > B Xor B > C Returns False. Resultado = B > A Xor B > C Returns True. Resultado = B > A Xor C > B Returns False.

En este ejemplo se usa el operador Xor para realizar una exclusin lgica entre cada uno de los bits de dos expresiones numricas. El bit en el modelo resultante se establecer si antes se han establecido solamente uno de los bits correspondientes a los operndoos.
Dim A As Integer = 10 Dim B As Integer = 8 Dim C As Integer = 6 Dim Resultado As Integer Resultado = (A Xor B) Returns 2. Resultado = (A Xor C) Returns 12. Resultado = (B Xor C) Returns 14.

Esto de Xor, he tomado referencia del MSDN de Visual Basic 2005, ya que aqu se encuentra unos ejemplos ms claros, mientras tanto sigamos haciendo los dems operadores.

OrElse
El operador OrElse comprueba tambin una seria de expresiones, solo que bastara que una expresin sea verdadera para que no realice las dems evaluaciones. Por ejemplo:
If Promedio < 0 OrElse Promedio > 20 Then Console.WriteLine("Ingrese la Nota Correcta (1 . 20)") End If

En este ejemplo si la primera expresin resulta verdadera, ya no realizara la siguiente expresin, en cambio si resultara falsa, realizara la siguiente expresin.

Not
Este operador se utiliza para hacer negaciones, ms en los casos de tipo Bolean por ejemplo:
Dim Variable As Boolean = True Dim Resultado As Boolean Resultado = Not Variable Retorna False.

Primero declaramos una variable de tipo Boolean y le asignamos un valor de True, pero despus en la instruccin negamos el valor almacenado y lo cambiamos por False (Not Variable), as que la variable resultado tendr el valor de False, sencillo no?.

Is
Este operador nos permite hacer comparaciones ya sea Booleanas o de String, este nos devolver un valor Boolean de la expresin dada, por ejemplo:
Dim Variable As String = .Joel. Dim Resultado As Boolean

10

Resultado = IsNumeric(Variable) Retorna False.

Este ejemplo es parecido al anterior solo que le preguntamos si la Variable es de valor Numrico (IsNumeric(Variable)), pero como es de tipo de cadena (String) nos devolver un valor de False,

To
Este operador lo usaremos mas en las Procesos Repetitivos o de Condiciones Mltiples, sirve para determinar un rango de nmeros, por ejemplo:
For K = 1 To 10 A=A+1 Next

Este bucle correr o mejor dicho, realizara 10 veces la instruccin de A=A+1 Ya que le indicamos que la variable K va a valer del 1 al 10.

FUNCIONES TIPO FECHA


Funcin Now() Esta funcin nos devuelve la fecha y hora actual del sistema, en un formato largo. Funcin Date() Esta funcin nos devuelve la fecha actual del sistema.

Funcin Year(Fecha) Esta funcin nos devuelve el ao de una fecha especificada. Funcin Month(Fecha) Obtiene el Nmero de mes de una fecha especificada. Funcin Day(Fecha) Obtiene el nmero de da de una fecha enviada o especificada. Funcin WeekDay(Fecha) Obtiene el nmero del da de la semana, tomando el domingo como valor nmero 1. Funcin DateAdd(TipoIntervalo,ValorIntervalo,Fecha) Suma o resta a una fecha, un intervalo determinado, para determinar si se realiza una suma o resta, el TipoIntervalo puede ser das, semanas, horas, meses, aos, etc. Valor Intervalo deber de ser positivo o negativo respectivamente. Funcin DateDiff(TipoIntervalo,FechaPrimera,FechaSegunda) Calcula la diferencia existente entre dos fechas. Funcin DatePart(TipoIntervalo,fecha) Extrae la parte de una fecha indicada.

INSTRUCCIN CONDICIONAL
11

Como vimos en la primera entrega, estas instrucciones nos permiten tomar decisiones, dndonos un resultado de Verdadero o Falso, a menudo esta instruccin es la ms utilizada por todos los programadores, as que tendrs que aprendrtela de memoria, y no te preocupes que es muy fcil de usar.
Sintaxis: Primera Forma: If <expresin a evaluar> Then <Instruccin (si la expresin devuelve Verdadero)> Ejemplo: If a = b Then MessageBox(.Son Nmeros Iguales.) Si la expresin a evaluar de a = b devuelve o mejor dicho es verdadera, este nos mostrar un mensaje, con el texto de .Son Nmeros Iguales.. Segunda Forma: If <expresin a evaluar> Then <Instruccin (si la expresin evaluada devuelve Verdadero)> End If Ejemplo: If b <> 0 Then Res = a / b Console.WriteLine("El Resultado de La Divisin es: {0}", Res) End If

Esta segunda forma, lo utilizamos cuando tengamos que hacer mas de una instruccin si la expresin a evaluar resulta verdadera, en este caso si a es mayor que b, si es verdadero este har la siguiente instruccin de a dividir entre b y el resultado guardarlo en una variable llamada Res, que despus la mostraremos en pantalla.
Tercera Forma: If <expresin a evaluar> Then < Instruccin (si la expresin evaluada devuelve Verdadero)> Else < Instruccin (si la expresin evaluada devuelve Falso)> End If Ejemplo: If b <> 0 Then Res = a / b Console.WriteLine("El Resultado de La Divisin es: {0}", Res) Else Console.WriteLine("Error: Divisin Entre Cero") End If

Esta forma nos permite utilizar los dos tipos de resultados de la expresin evaluada, por ejemplo, si b es diferente a cero este dividir a, pero si es falso, nos mostrara un mensaje de Error.
Cuarta Forma:

12

If <expresin a evaluar> Then <Instruccin (si la expresin evaluada devuelve Verdadero)> Else <Instruccin (si la expresin evaluada devuelve Falso)> (todo en una misma lnea) Ejemplo: If a = b Then MessageBox(.Son Nmeros Iguales.) Else MessageBox(.No son Nmeros Iguales.) (Todo en una misma lnea)

Esta forma no tan muy usada, solo en los casos cuando hay que hacer una sola instruccin en cada tipo de respuesta de la expresin evaluada, por ejemplo, si a es igual b nos mostrar un mensaje de Nmeros Iguales, pero si es falso nos mostrara otro mensaje dicindonos que No son Nmeros iguales, y recuerden que es en una sola lnea.
Quinta Forma: If <expresin a evaluar> Then < Instruccin (si la expresin evaluada devuelve Verdadero)> ElseIf <expresin a evaluar> Then < Instruccin (si la expresin evaluada devuelve Verdadero)> Else < Instruccin (si la expresin evaluada devuelve Falso)> End If Ejemplo: If b = 0 Then Console.WriteLine("Error: Divisin Entre Cero") ElseIf a <> b Then Res = a / b Console.WriteLine("El Resultado de La Divisin es: {0}", Res) Else Console.WriteLine("El Resultado de La Divisin es: 1") End If

Bueno a mi parecer y si es que no me equivoco, esta es una de las formas ms usadas, ya que son if anidados, como lo haba en los pseudocdigos, el else es opcional, como lo ven en este ejemplo, si b es igual a cero, nos mostrara un mensaje de Error de Divisin, pero si es falso, har la siguiente evaluacin que ser si a es diferente de b har la divisin y nos mostrar el resultado de la divisin. Pero si es falso nos mostrar un mensaje, dicindonos que el resultado de la divisin es 1, sin ser necesario dividir.
Nota: Recuerda que para cada IF hay un THEN y un END IF, as como en el pseudocdigo. Bueno, despus de tanta teora, empezaremos a resolver los ejercicios de la primera entrega, si, los mismo que hicimos en Pseudocdigo,

CONDICIONES MULTIPLES
13

Este tipo de condiciones lo usamos para tener varios tipos de comparaciones (expresiones a evaluar).
Sintaxis: Select Case <expresin a evaluar> Case <lista de expresiones> Instrucciones Case <otra lista de expresiones> Instrucciones Case Else si no se cumple ninguna de las listas de expresiones End Select Ejemplo: Select Case i Case 3 : Instruccin Case 6 To 11 Instruccin Case 14, 17 Instruccin Case Is > 25 Instruccin Case Else Instruccin End Select

a realizar a realizar a realizar a realizar a realizar

En el ejemplo, hacemos varias comprobaciones, si i vale 3 haremos la instruccin que sigue despus de los dos puntos (podemos ejecutar solo una instruccin despus de los dos puntos, si en caso hubiera ms instrucciones a ejecutar, estas instrucciones las pondramos en la parte inferior del Case), en cambio si tiene un valor de 6 a 11 ejecutara la instruccin que se encuentra en su inferior, o si tiene el valor de 14 17, ejecutara la instruccin que se encuentra en su inferior, o si i es mayor que 25, realizara la instruccin que se encuentra en su inferior, y por ultimo si no cumple ninguna comparacin, existe el Case Else, que ejecutara su instruccin, siempre y cuando no se cumpla ninguna expresin en los dems Case

PROCESOS REPETITIVOS
Los procesos repetitivos o llamados bucles, se utilizan para repetir el o los cdigos, un nmero determinado de veces, para esto usaremos el For, que nos permitir repetir un nmero determinado de veces el cdigo. For / Next Con este tipo de bucle podemos repetir un cdigo un nmero determinado de veces.
Sintaxis: For <variable numrica> = <valor inicial> To <valor final> [Step <incremento>] contenido del bucle, lo que se va a repetir

14

Next

Primera Forma: Una de las formas ms utilizadas.


For i = 1 To 10 contar de 1 hasta 10 la variable i tomar los valores 1, 2, 3, etc. Next

Segunda Forma: Esta forma se utiliza para decirle como va a incrementar, ya sea como el ejemplo de 2 en 2.
For i = 1 To 100 Step 2 contar desde 1 hasta 100 (realmente 99) de 2 en 2 la variable i tomar los valores 1, 3, 5, etc. Next

Tercera Forma: Cuando queremos que un bucle sea en decreciente solo bastar darle un valor negativo, al nmero, como en el ejemplo, queremos que en vez que avance del 1 al 10 queremos que este vaya del 10 al 1.
For i = 10 To 1 Step -1 contar desde 10 hasta 1 la variable i tomar los valores 10, 9, 8, etc. Next

For Each Este bucle repetir o iterar por cada uno de los elementos contenidos en una coleccin.
Sintaxis: For Each <variable> In <coleccin del tipo de la variable> Lo que se har mientras se repita el bucle Next Ejemplo: Dim s As String For Each s In "Hola Mundo" Console.WriteLine(s) Next Console.ReadLine()

Este bucle recorre cada uno de los caracteres de una cadena, en este caso recorrer cada carcter de la cadena s (Hola Mundo)., comenzando por la H y de ah la o y as hasta la ltima o de la palabra Mundo. Funcin Reset Esta funcin nos permite reiniciar un ciclo de proceso, o ms aun podemos volver a un formato original de un control, esto ya lo veremos ms adelante cuando tocaremos las ventanas de aplicacin. Funcin Exit Esta funcin nos permite salir ya sea de un proceso o un bucle, tambin salir de toda una funcin, clase, y funcin principal Main.

15

ESTRUCTURAS REPETITIVAS
Las estructuras repetitivas o llamados tambin bucles, se utilizan para repetir el o los cdigos, hasta que la expresin evaluada de un valor de Falso.

While / End While


Se repetir mientras se cumpla la expresin lgica que se indicar despus de While
Sintaxis: While <expresin> Lo que haya que hacer mientras se cumpla la expresin End While Ejemplo: While i < 10 Console.WriteLine(i) i=i+1 End While

Este cdigo escribir el valor de i hasta que el valor de i tome el valor de 10 o ms.

Do / Loop
Este tipo de bucle es muy parecido al anterior. Si se utiliza slo con esas dos instrucciones, este tipo de bucle no acabar nunca y repetir todo lo que haya entre Do y Loop. Pero este tipo de bucle se puede usar con dos instrucciones que nos permitirn evaluar expresiones lgicas: While y Until Pero no debemos confundir este While con el While/End While que acabamos de ver anteriormente. La ventaja de usar While o Until con los bucles Do/Loop es que estas dos instrucciones podemos usarlas tanto junto a Do como junto a Loop, la diferencia est en que si los usamos con Do, la evaluacin se har antes de empezar el bucle, mientras que si se usan con Loop, la evaluacin se har despus de que el bucle se repita al menos una vez.
Sintaxis:

Primera Forma: Este bucle evala al principio, mejor dicho realizara el cdigo o las instrucciones un numero que digamos que sea n veces.
Do While <expresin> Instruccin Loop

Segunda Forma: Este bucle evala al final, mejor dicho realizara el cdigo o las instrucciones n . 1 veces.

Do Instruccin Loop While <expresin>

16

Tercera Forma: Este bucle evala al principio, a diferencia que el primero realizara el cdigo siempre y cuando la expresin sea falsa, mejor dicho realizara el cdigo o las instrucciones n veces.
Do Until <expresin> Instruccin Loop

Cuarta Forma: Este bucle evala al final, a diferencia que el segundo realizara el cdigo siempre y cuando la expresin sea falsa, mejor dicho realizara el cdigo o las instrucciones n . 1 veces
Do Instruccin Loop Until <expresin>

ARRAYS
Array Unidimensional
Un Array (arreglo) es un indicador que puede almacenar varios valores simultneamente. Cada uno de estos valores se identifica mediante un nmero al cual se llama ndice. As, para acceder al primer elemento del array habra que usar el ndice cero, para el segundo el ndice uno, para el tercero el ndice dos, y as sucesivamente. Vamos a ver cmo se declara un Array
Dim Variable(NmeroDeElementos) As Tipo de Variable

En efecto, tal como pueden apreciar, el array ser utilizable nicamente a partir de su declaracin. Por ejemplo:
Dim Numeros(3) As Integer

En este ejemplo, el nmero 3 que est dentro de los parntesis indica el nmero total de elementos + 1 de que constar el array. Puesto que todos los arrays estn basados en cero, esto es, el primer elemento del array es cero. Por lo tanto, en este caso, el ltimo elemento sera 3, ya que son cuatro y no tres los elementos que lo componen (0, 1, 2 y 3). Veamos un ejemplo algo ms completo y despus lo comentamos:
Dim Numeros(3) As Integer Dim K As Integer Numeros(0) = 1 Numeros(1) = 2 Numeros(2) = 3 Numeros(3) = 4 For K = 0 to 3 Console.WriteLine("Indice [{0}{1}{2}", K, "] = ", Numeros(K)) Next

17

Ahora veamos la salida en la consola. Indice [0] = 1 Indice [1] = 2 Indice [2] = 3 Indice [3] = 4

Bueno ahora se ve ms claro lo que hablo, como se habrn dado cuenta al declarar un array e indicar los elementos que va a contener dicho array, siempre debemos de tener en cuenta de esto: Numero de elementos . 1, por ejemplo, si queremos un array de 4 elementos tendramos que indicarle as: Array (3), porque sera el nmero de elementos . 1 en este caso 4 . 1 = 3. Aunque es un poco difcil de acostumbrarse, ya que en las versiones antiguas no eran as, se parecen un poco al C, C++.

Array Multidimensional
Los arrays multidimensionales son aquellos que constan de dos o ms dimensiones, es decir, que cada elemento del array viene definido por dos o ms ndices. Veamos un ejemplo de declaracin de un array multidimensional (en este caso, ser tridimensional, es decir, con tres dimensiones):
Dim Variable(x,x,x) As Tipo de Variable

Como vemos, hay tres letras dentro de los parntesis, separadas por comas, lo cual indica que el array es tridimensional, puesto que los tres ndices del mismo se separan uno de otro por comas. Veamos un pequeo ejemplo que lo clarifique un poco ms:
Dim Alumnos(1,3) As String

Este array es bidimensional y servira para almacenar una lista de alumnos por Nombres y Apellidos, tenemos un array bidimensional (el primer ndice del array nos almacenar los nombres y el segundo ndice nos almacenar los apellidos). Veamos un poco de cdigo y una tabla para que se hagan una idea de cmo se almacena esto:
Alumnos(0,0)="Jos"; Alumnos(0,1)="Lus"; Alumnos(0,2)="Juan"; Alumnos(0,3)="Pedro"; Alumnos(1,0)="Vargas"; Alumnos(1,1)="Moreno"; Alumnos(1,2)="Lpez"; Alumnos(1,3)="Peralta"; Esto sera como almacenar los datos en esta tabla: Alumnos Alumnos Alumnos Alumnos 0 1 2 3 Nombres (0) Jos Lus Juan Pedro Apellidos (1) Vargas Moreno Lpez Peralta

Bueno parece que est un poco claro, lo de arrays, en esta tabla he separado por indicie, mejor dicho lo que declaro en la variable lo he graficado, como?, bueno as: tenemos nuestro array llamado Alumnos(1,3), todos sabemos que va a tener dos columnas y cuatro filas, as que en la

18

columna 0 voy a almacenar los nombres y en la columna 1 sus apellidos, guindome de los ndices de cada nombre que ingrese, en otras palabras en el array Alumnos, en la columna 0 y en la fila 0 voy a almacenar el nombre de Jos, as que en la columna 1 y en la misma fila 0 voy a almacenar su apellido Varga y as sucesivamente hasta que se llene el array.
Ahora veamos unos ejercicios para que lo entiendan mejor.

PROCEDIMIENTOS
Los procedimientos son las sentencias de cdigo ejecutable de un programa. Las instrucciones de un procedimiento estn delimitadas por una instruccin de declaracin y una instruccin End. Existen tres tipos de procedimientos en Microsoft Visual Basic .NET: procedimientos Sub, procedimientos Function y procedimientos Property. Los procedimientos Sub realizan acciones pero no devuelven un valor al procedimiento que origina la 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, estructuras o mdulos. Un procedimiento puede ser invocado, o llamado, desde otro procedimiento. Cuando un procedimiento llama a otro procedimiento, se transfiere el control al segundo procedimiento. Cuando finaliza la ejecucin del cdigo del segundo procedimiento, ste devuelve el control al procedimiento que lo invoc. Debido a esta funcionalidad, los procedimientos resultan tiles para realizar tareas repetidas o compartidas. En lugar de escribir el mismo cdigo ms de una vez, podemos escribir un procedimiento e invocarlo desde varios puntos de nuestra aplicacin o desde otras aplicaciones. Utilizamos un modificador de acceso para definir la accesibilidad de los procedimientos que escribimos (es decir, el permiso para que otro cdigo invoque al procedimiento). Si no especificamos un modificador de acceso, los procedimientos son declarados public de forma predeterminada. Las opciones de accesibilidad para declarar un procedimiento dentro de un mdulo:
Public: Ninguna restriccin de acceso Friend: Accesible desde el programa que contiene la declaracin y desde cualquier otro lugar del mismo ensamblado Private: Accesible nicamente en el mdulo que contiene la declaracin Sintaxis:

19

[accesibilidad] Function NombreFuncion[(ListaDeArgumentos)] As TipoDato Instrucciones Retorna el Valor de Una Funcin End Function

Parmetros o argumentos de los procedimientos


Cuando queramos que un procedimiento realice una tarea, es posible que necesitemos indicarle alguna informacin adicional. Esa informacin se suele indicar mediante parmetros o argumentos. Los argumentos pasados a los procedimientos pueden ser pasados por valor o por referencia. Por Valor: Cuando un argumento es pasado por valor, este valor no se podr alterar, por ejemplo:
Module Ejemplo Sub Main() MostrarNumero(1) Console.ReadLine() End Sub Sub MostrarNumero(ByVal Valor As Integer) Valor = Valor + 1 Console.WriteLine("El Valor del Parametro es: {0}", Valor) End Sub End Module

Expliquemos, nosotros llamamos al procedimiento MostrarNumero, y le mandamos el parmetro de 1, este numero 1 entra al procedimiento mediante la variable Valor, que despus lo alteramos sumndole ms uno, entonces el valor de la variable Valor seria 2, supuestamente, pero a la hora de mostrarlo en la consola, nos mostrar el valor de 1, se preguntarn Por qu?, esto solo tiene un respuesta, como es pasado por Valor, este Valor no puede ser alterado, por ms que le sumemos, dividamos, restamos, etc. El valor que va a contener la variable Valor siempre va a ser 1.
Por Referencia: Cuando un argumento es pasado por referencia, este valor se podr alterar, por ejemplo: Module Ejemplo Sub Main() MostrarNumero(1) Console.ReadLine() End Sub Sub MostrarNumero(ByRef Valor As Integer) Valor = Valor + 1 Console.WriteLine("El Valor del Parametro es: {0}", Valor) End Sub End Module

Expliquemos, nosotros llamamos al procedimiento MostrarNumero, y le mandamos el parmetro de 1, este numero 1 entra al procedimiento mediante la variable Valor, que despus lo alteramos sumndole ms uno, entonces el valor de la variable Valor seria

20

2, a la hora de mostrarlo en la consola, nos mostrar el valor de 2, se preguntarn Por qu?, esto solo tiene un respuesta, como es pasado por Referencia, este Valor puede ser alterado.

21

ENUMERACIONES
Una enumeracin es un tipo especial de variable numrica en la que los valores que dicha variable puede tomar, son constantes simblicas, es decir que en lugar de usar un nmero, se usa una palabra (constante) que hace referencia a un nmero, esta constante comenzara desde al valor de 0, por ejemplo veamos un ejemplo ms antiguo que es de los colores.

Estas enumeraciones se declaran desde afuera del Main, expliquemos, tenemos una enumeracin llamada colores, que contendr las siguientes constantes: Azul, Rojo, Verde, que por default el azul contendr el valor de 0, el rojo ser 1 y el verde ser 2, si se preguntan, Podemos cambiar esos valores? La respuesta es s, por ejemplo, ponemos lo siguiente:
Enum Colores Azul = 255 Rojo Verde End Enum

En este caso le asignamos a Azul el valor de 255, entonces el Rojo valdr 256 y el Verde ser 257. La enumeracin Colores ya viene a ser un tipo de dato, as que cuando declaramos una variable, podemos asignarles de tipo Colores.

22

Las enumeraciones pueden ser de varios tipos de datos, como integer, Byte, Long, etc. Cuando declaramos una variable de tipo enumeracin, que hayamos creado, solo podremos asignarles la constante que contenga esta enumeracin, para que me entiendan vean este grfico.

Ahora veamos algunos ejercicios de enumeracin para que les quede un poco ms claro. 50. Esta aplicacin nos muestra que valor contiene cada constante de la enumeracin Colores.
Module Ejercicio50 Enum Colores Azul Rojo Verde End Enum Sub Main() Dim Color As Colores Color = Colores.Azul Console.WriteLine("El Nmero 0 Vale: {0}", Color) Color = Colores.Rojo Console.WriteLine("El Nmero 1 Vale: {0}", Color) Color = Colores.Verde

Console.WriteLine("El Nmero 2 Vale: {0}", Color)


End Sub End Module

23

PARADIGMAS
Paradigmas por Procedimiento
Son aquellas llamadas tambin paradigmas interactivos, representan al enfoque tradicional de la programacin en donde los programas se conciben como mdulos que realizan una determinada tarea o accin, para posteriormente obtener una salida o resultado.

Paradigmas Declarativos
Este paradigma hace hincapi a la pregunta Cul es el problema?, sin interesarle al programador, que procedimiento necesita para resolver el problema, pues as tenemos el GPS, sistemas simulados de propsitos generales, que permite modelar el problema, por ejemplo los problemas particulares como el problema de las colas de un banco, simular el programa de mantenimiento de una fbrica, el problema de producir N piezas en un determinado proceso productivo.

Paradigma Funcional
Plantea el proceso de creacin de software, como un sistema de cajas negras, cada uno de las cuales acepta una entrada por arriba y produce salidas por abajo, desde el punto de vista matemtico, dichas cajas son funciones por lo que ha de ser un paradigma funcional.

Paradigma Orientado a Objetos


Es un paradigma que ha adquirido popularidad en los ltimos aos que es el resultado de la evolucin de la programacin estructurada, en la cual se subdivide en mdulos y que cada uno de ellos realiza una determinada tarea, ese mismo concepto se aplica a los objetos para que cumplan una determinada accin o tarea, pues as tenemos los lenguajes de programacin C, C++, Java. Conduce a paradigma orientado a objetos, donde sin duda es una evolucin de la programacin estructurada y adems los conceptos fundamentales son: clase, herencia, polimorfismo, reutilizacin. Los lenguajes de programacin orientada a objetos son SmallTalk, Simula, C++ y Java.

PROGRAMACIN
Programacin Clsica
Surge por los aos 50 y 60, es de tipo monoltica donde si el programa era grande, era difcil de corregir, y su mantenimiento era muy costoso.

Programacin Modular
Surge a principios de los 70, es uno de los mtodos de diseo ms flexible y potentes para mejorar la productividad de un programa. Todo programa contiene un mdulo denominado programa principal, que controla todo lo que sucede, es decir transfiere el control a su mdulo, de modo que ellos pueden ejecutar funciones, las tareas de los mdulos se sigue dividiendo hasta que cada uno tenga exclusivamente una funcin especfica, a este tipo de programacin se le conoce como el mtodo .Divide y Vencers. (Top Down).

24

Ahora veamos un ejercicio utilizando una programacin modular. ESTE ES UN EJEMPLO DE PROGRAMACIN MODULAR EN CDIGO
Esta aplicacin utiliza varios procedimientos para realizar una cierta tarea, utilizando la programacin modular. Module Ejercicio53 Programa que muestra un men de opciones Sub Main() Dim opc, Numero As Integer Call Menu() Console.WriteLine() Console.Write("Elija Su Opcin ==> ") opc = CInt(Console.ReadLine) Console.WriteLine() While opc <> 4 Select Case opc Case 1 Console.Write("Ingrese un Nmero Entero: ") Numero = CInt(Console.ReadLine) Call Pares(Numero) Case 2 Console.Write("Ingrese un Nmero Entero: ") Numero = CInt(Console.ReadLine) Call EsPrimo(Numero) Case 3 Console.Write("Ingrese un Nmero Entero: ") Numero = CInt(Console.ReadLine) Call Factorial(Numero) Case Else Console.WriteLine("Opcin No Vlida") Console.Clear() Call Menu() End Select Console.WriteLine()

25

Console.Write("Elija Su Opcin ==> ") opc = CInt(Console.ReadLine) Console.WriteLine() End While Console.WriteLine("Fin del Programa") Console.ReadLine() End Sub Sub Menu() Console.WriteLine() Console.WriteLine("{0}{1}", Space(30), "MEN DE OPCIONES") Console.WriteLine() Console.WriteLine("[1] Pares") Console.WriteLine("[2] Es Primo") Console.WriteLine("[3] Factorial") Console.WriteLine("[4] Salir") Console.WriteLine() End Sub Sub Pares(ByVal Numero As Integer) Dim i As Integer = 1 Console.WriteLine() Console.WriteLine("Los Pares Menores que {0} Son: ", Numero) Console.WriteLine() While i < Numero If i Mod 2 = 0 Then Console.WriteLine("{0}", i) End If i=i+1 End While End Sub Sub EsPrimo(ByVal Numero As Integer) Dim Primo As Boolean If Numero < 6 And Numero <> 4 Then Primo = True ElseIf Numero Mod 2 = 0 Or Numero Mod 3 = 0 Or Numero Mod 5 = 0 Then Primo = False Else Primo = True End If Console.WriteLine() If Primo = True Then Console.WriteLine("El Nmero es Primo") Else Console.WriteLine("El Nmero No Es Primo") End If End Sub Sub Factorial(ByVal Numero As Integer) Dim k As Integer Dim r As Long = 1 For k = 1 To Numero r=r*k Next Console.WriteLine()

26

Console.WriteLine("El Factorial del Nmero es : {0}", r) End Sub End Module

27

PROGRAMACIN ORIENTADA A OBJETOS


Introduccin
La programacin orientada a objetos es un importante conjunto de tcnicas que pueden utilizarse para hacer el desarrollo de programas eficientes en la programacin orientada a objetos, los objetos son los elementos principales de construccin sin embargo el uso de objetos en un programa no significa que estn programando en un modo orientado a objetos, lo que cuenta es el sistema, en el cual los objetos se interconectan y se comunican entre s. La programacin orientada a objetos es una tcnica estructurada siendo los objetos los principales elementos de construccin. La programacin orientada a objetos es el producto de la evolucin de paradigma estructurada a fin de conseguir que el software sea un producto industrial, la programacin orientada a objetos es una programacin que enva mensajes a los objetos segn Grade Booch, autor del mtodo orientado a objetos, define a esta programacin como: .Un mtodo de implementacin en el que los programas se organizan como colecciones cooperativas de objetos., cada uno de las cuales representa una instancia de alguna clase y cuyas clases son todos los miembros de una jerarqua de clases unidos mediante relacin de herencia. Sea de tipo de dato abstracto (IDA). Todo .NET Framework est basado en clases (u objetos). A diferencia de las versiones anteriores de Visual Basic, la versin .NET de este lenguaje basa su funcionamiento casi exclusivamente en las clases contenidas en .NET Framework,adems casi sin ningn tipo de limitaciones.

Qu es la Programacin Orientada a Objetos?


Los tres pilares de la Programacin Orientada a Objetos
Segn se dice por ah, cualquier lenguaje basado en objetos debe cumplir estos tres requisitos: Herencia Encapsulacin Polimorfismo Herencia La herencia es la capacidad de poder derivar una clase a partir de otra, la clase inicial se usa como clase base y la clase derivada es un nuevo tipo completamente de datos que incorpora todos los datos miembros y funciones miembros de la clase original, con cualquier dato nuevo o funcin miembro nueva y unidos en clase derivada. La clase base se conoce como clase padre o superclase y la clase derivada como clase hija o subclase. Para que lo entiendas mejor, veamos un ejemplo clsico: Supongamos que tenemos una clase Gato que est derivada de la clase Animal. El Gato hereda de Animal todas las caractersticas comunes a los animales, adems de aadirle algunas caractersticas particulares a su condicin felina. Podemos decir que un Gato es un Animal, lo mismo que un Perro es un Animal, ambos estn derivados (han heredado) de la clase Animal, pero cada uno de ellos es diferente, aunque en el fondo los dos son animales. Esto es herencia: usar una clase base (Animal) y poder

28

ampliarla sin perder nada de lo heredado, pudiendo ampliar la clase de la que se ha derivado (o heredado). Encapsulacin La encapsulacin es la capacidad de contener y controlar el acceso a un grupo de elementos asociados. Las clases proporcionan una de las formas ms comunes de encapsular elementos. La encapsulacin es la capacidad de separar la implementacin de la interfaz de una clase del cdigo que hace posible esa implementacin. Esto realmente sera una especie de abstraccin, ya que no nos importa cmo est codificado el funcionamiento de una clase, lo nico que nos debe interesar es cmo funciona... Para que nos vayamos entendiendo, cuando digo: la implementacin de la interfaz de una clase, me refiero a los miembros de esa clase: mtodos, propiedades, eventos, etc. Es decir, lo que la clase es capaz de hacer. Cuando usamos las clases, stas tienen una serie de caractersticas (los datos que manipula) as como una serie de comportamientos (las acciones a realizar con esos datos). Pues la encapsulacin es esa capacidad de la clase de ocultarnos sus interioridades para que slo veamos lo que tenemos que ver, sin tener que preocuparnos de cmo est codificada para que haga lo que hace... simplemente nos debe importar que lo haga.

Polimorfismo El polimorfismo permite que diferentes objetos respondan de modo diferente al mismo mensaje, por lo cual se dice que adquiere su mxima potencia, cuando se utiliza en unin a la herencia, el polimorfismo permite que el mismo nombre de mtodo emboque una operacin a los objetos de una clase padre y una operacin diferente en los objetos de la clase derivada. El Polimorfismo nos permite usar miembros de distintas clases de forma genrica sin tener que preocuparnos si pertenece a una clase o a otra. Siguiendo con el ejemplo de los animales, si el Gato y el Perro pueden morder podramos tener un "animal" que muerda sin importarnos que sea el Gato o el Perro, simplemente podramos usar el mtodo Morder ya que ambos animales tienen esa caracterstica "animal mordedor".

LAS CLASES
Todo lo que tiene el .NET Framework, en realidad son clases. Una clase no es ni ms ni menos que cdigo. Aunque dicho de esta forma, cualquier programa sera una clase. Cuando definimos una clase, realmente estamos definiendo dos cosas diferentes: los datos que dicha clase puede manipular o contener y la forma de acceder a esos datos. Por ejemplo, si tenemos una clase de tipo Cliente, por un lado tendremos los datos de dicho cliente y por otro la forma de acceder o modificar esos datos. En el primer caso, los datos del Cliente, como por ejemplo el nombre, domicilio etc., estarn representados por una serie de campos o propiedades, mientras que la forma de modificar o acceder a esa informacin del Cliente se har por medio de mtodos. Esas propiedades o caractersticas y las acciones a realizar son las que definen a una clase.

Los Objetos
29

Por un lado tenemos una clase que es la que define un "algo" con lo que podemos trabajar. Pero para que ese "algo" no sea un "nada", tendremos que poder convertirlo en "algo tangible", es decir, tendremos que tener la posibilidad de que exista. Aqu es cuando entran en juego los objetos, ya que un objeto es una clase que tiene informacin real. Digamos que la clase es la "plantilla" a partir de la cual podemos crear un objeto en la memoria. Por ejemplo, podemos tener varios objetos del tipo Cliente, uno por cada cliente que tengamos en nuestra cartera de clientes, pero la clase slo ser una. Dicho de otra forma: podemos tener varias instancias en memoria de una clase. Una instancia es un objeto (los datos) creado a partir de una clase (la plantilla o el cdigo). Para entender mejor todo este galimatas, desglosemos las clases: Los miembros de una clase Las clases contienen datos, esos datos suelen estar contenidos en variables. A esas variables cuando pertenecen a una clase, se les llama: campos o propiedades. Por ejemplo, el nombre de un cliente sera una propiedad de la clase Cliente. Ese nombre lo almacenaremos en una variable de tipo String, de dicha variable podemos decir que es el "campo" de la clase que representa al nombre del cliente. Por otro lado, si queremos mostrar el contenido de los campos que contiene la clase Cliente, usaremos un procedimiento que nos permita mostrarlos, ese procedimiento ser un mtodo de la clase Cliente. Por tanto, los miembros de una clase son las propiedades (los datos) y los mtodos las acciones a realizar con esos datos. Como te he comentado antes, el cdigo que internamente usemos para almacenar esos datos o para, por ejemplo, mostrarlos, es algo que no debe preocuparnos mucho, simplemente sabemos que podemos almacenar esa informacin (en las propiedades de la clase) y que tenemos formas de acceder a ella, (mediante los mtodos de dicha clase), eso es "abstraccin" o encapsulacin. Crear o definir una clase Al igual que existen instrucciones para declarar o definir una variable o cualquier otro elemento de un programa de Visual Basic, existen instrucciones que nos permiten crear o definir una clase. Para crear una clase debemos usar la instruccin Class seguida del nombre que tendr dicha clase, por ejemplo:
Class Cliente

A continuacin escribiremos el cdigo que necesitemos para implementar las propiedades y mtodos de esa clase, pero para que Visual Basic sepa que ya hemos terminado de definir la clase, usaremos una instruccin de cierre:
End Class

Por tanto, todo lo que est entre Class <nombre> y End Class ser la definicin de dicha clase. Definir los miembros de una clase Para definir los miembros de una clase, escribiremos dentro del "bloque" de definicin de la clase, las declaraciones y procedimientos que creamos convenientes. Veamos un ejemplo:
Class Cliente Public Nombre As String Sub Mostrar()

Console.WriteLine("El nombre del cliente: {0}", Nombre)

30

End Sub End Class

En este caso, la lnea Public Nombre As String, estara definiendo una propiedad o "campo" pblico de la clase Cliente. Por otro lado, el procedimiento Mostrar sera un mtodo de dicha clase, en esta caso, nos permitira mostrar la informacin contenida en la clase Cliente. Esta es la forma ms simple de definir una clase. Y normalmente lo haremos siempre as, por tanto podemos comprobar que es muy fcil definir una clase, as como los miembros de dicha clase. Pero no slo de clases vive el Visual Basic... o lo que es lo mismo, para qu nos sirve una clase si no sabemos crear un objeto basado en esa clase...? As que, sepamos cmo crearlos. Crear un objeto a partir de una clase Como te he comentado antes, las clases definen las caractersticas y la forma de acceder a los datos que contendr, pero slo eso: los define. Para que podamos asignar informacin a una clase y poder usar los mtodos de la misma, tenemos que crear un objeto basado en esa clase, o lo que es lo mismo: tenemos que crear una nueva instancia en la memoria de dicha clase. Para ello, haremos lo siguiente: Definimos una variable capaz de contener un objeto del tipo de la clase, esto lo haremos como con cualquier variable:
Dim cli As Cliente

Pero, a diferencia de las variables basadas en los tipos visto hasta ahora, para poder crear un objeto basado en una clase, necesitamos algo ms de cdigo que nos permita "crear" ese objeto en la memoria, ya que con el cdigo usado en la lnea anterior, simplemente estaramos definiendo una variable que es capaz de contener un objeto de ese tipo, pero an no existe ningn objeto en la memoria, para ello tendremos que usar el siguiente cdigo:
cli = New Cliente()

Con esto le estamos diciendo al Visual Basic: crea un nuevo objeto en la memoria del tipo Cliente. Estos dos pasos los podemos simplificar de la siguiente forma:
Dim cli As New Cliente()

Acceder a los miembros de una clase Para acceder a los miembros de una clase (propiedades o mtodos) usaremos la variable que apunta al objeto creado a partir de esa clase, seguida de un punto y el miembro al que queremos acceder, por ejemplo, para asignar el nombre al objeto cli, usaremos este cdigo: cli.Nombre = "Visual Basic" Es decir, de la misma forma que haramos con cualquier otra variable, pero indicando el objeto al que pertenece dicha variable. Como podrs comprobar, esto ya lo hemos estado usando anteriormente tanto en la clase Console como en las otras clases que hemos usado en entregas anteriores, incluyendo los arrays. Y para acceder al mtodo Mostrar: cli.Mostrar()

31

Ejemplo de cmo usar la herencia Para poder usar la herencia en nuestras clases, debemos indicar al Visual Basic que esa es nuestra intencin, para ello disponemos de la instruccin Inherits, la cual se usa seguida del nombre de la clase de la que queremos heredar. Veamos un ejemplo. Empezaremos definiendo una clase "base" la cual ser la que heredaremos en otra clase. Ya sabemos cmo definir una clase, aunque para este ejemplo, usaremos la clase Cliente que vimos anteriormente, despus crearemos otra, llamada ClienteMoroso la cual heredar todas las caractersticas de la clase Cliente adems de aadirle una propiedad a esa clase derivada de Cliente. Veamos el cdigo de estas dos clases. Para ello crea un nuevo proyecto del tipo consola y escribe estas lneas al principio o al final del fichero que el IDE aade de forma predeterminada.
Class Cliente Public Nombre As String Sub Mostrar() Console.WriteLine("El nombre del cliente: {0}", Nombre) End Sub End Class Class ClienteMoroso Inherits Cliente Public Deuda As Decimal End Class

Como puedes comprobar, para que la clase ClienteMoroso herede la clase Cliente, he usado Inherits Cliente, con esta lnea, (la cual debera ser la primera lnea de cdigo despus de la declaracin de la clase), le estamos indicando al VB que nuestra intencin es poder tener todas las caractersticas que la clase Cliente tiene. Haciendo esto, aadiremos a la clase ClienteMoroso la propiedad Nombre y el mtodo Mostrar, aunque tambin tendremos la nueva propiedad que hemos aadido: Deuda. Ahora vamos a ver cmo podemos usar estas clases, para ello vamos a aadir cdigo en el procedimiento Main del mdulo del proyecto:
Module Module1 Sub Main() Dim cli As New Cliente() Dim cliM As New ClienteMoroso() cli.Nombre = "Jos" cliM.Nombre = "Luis" cliM.Deuda = 2000 Console.WriteLine("Usando Mostrar de la clase Cliente") cli.Mostrar() Console.WriteLine("Usando Mostrar de la clase ClienteMoroso") cliM.Mostrar() Console.WriteLine("La deuda del moroso es: {0}", cliM.Deuda) Console.ReadLine() End Sub

32

End Module

Lo que hemos hecho es crear un objeto basado en la clase Cliente y otro basado en ClienteMoroso. Le asignamos el nombre a ambos objetos y a la variable cliM (la del ClienteMoroso) le asignamos un valor a la propiedad Deuda. Fjate que en la clase ClienteMoroso no hemos definido ninguna propiedad llamada Nombre, pero esto es lo que nos permite hacer la herencia: heredar las propiedades y mtodos de la clase base. Por tanto podemos usar esa propiedad como si la hubisemos definido en esa clase. Lo mismo ocurre con los mtodos, el mtodo Mostrar no est definido en la clase ClienteMoroso, pero s que lo est en la clase Cliente y como resulta que ClienteMoroso hereda todos los miembros de la clase Cliente, tambin hereda ese mtodo. La salida de este programa sera la siguiente:

Usando Mostrar de la clase Cliente El nombre del cliente: Jos Usando Mostrar de la clase ClienteMoroso El nombre del cliente: Luis La deuda del moroso es: 2000

Ahora veamos cmo podramos hacer uso del polimorfismo o al menos unade las formas que nos permite el .NET Framework. Teniendo ese mismo cdigo que define las dos clases, podramos hacer lo siguiente:
Sub Main() Dim cli As Cliente Dim cliM As New ClienteMoroso() cliM.Nombre = "Luis" cliM.Deuda = 2000 cli = cliM Console.WriteLine("Usando Mostrar de la clase Cliente") cli.Mostrar() Console.WriteLine("Usando Mostrar de la clase ClienteMoroso") cliM.Mostrar() Console.WriteLine("La deuda del moroso es: {0}", cliM.Deuda) Console.ReadLine() End Sub

En este caso, la variable cli simplemente se ha declarado como del tipo Cliente, pero no se ha creado un nuevo objeto, simplemente hemos asignado a esa variable el contenido de la variable cliM. Con esto lo que hacemos es asignar a esa variable el contenido de la clase ClienteMoroso, pero como comprenders, la clase Cliente "no entiende" nada de las nuevas propiedades implementadas en la clase derivada, por tanto slo se podr acceder a la parte que es comn a esas dos clases: la parte heredada de la clase Cliente. Realmente las dos variables apuntan a un mismo objeto, por eso al usar el mtodo Mostrar se muestra lo mismo. Adems de que si hacemos cualquier cambio a la propiedad Nombre, al existir slo un objeto en la memoria, ese cambio

33

afectar a ambas variables. Para comprobarlo, aade este cdigo antes de la lnea Console.ReadLine():
Console.WriteLine() cli.Nombre = "Juan" Console.WriteLine("Despus de asignar un nuevo nombre a cli.Nombre") cli.Mostrar() cliM.Mostrar()

La salida de este nuevo cdigo, sera la siguiente:


Usando Mostrar de la clase Cliente El nombre del cliente: Pepe Usando Mostrar de la clase ClienteMoroso El nombre del cliente: Pepe La deuda del moroso es: 2000 Despus de asignar un nuevo nombre a cli.Nombre El nombre del cliente: Juan El nombre del cliente: Juan

Como puedes comprobar, al cambiar en una de las variables el contenido de la propiedad Nombre, ese cambio afecta a las dos variables, pero eso no es porque haya nada mgico ni ningn fallo, es por lo que te coment antes: slo existe un objeto en la memoria y las dos variables acceden al mismo objeto, por tanto, cualquier cambio efectuado en ellas, se reflejar en ambas variables por la sencilla razn de que slo hay un objeto en memoria. A este tipo de variables se las llama variables por referencia, ya que hacen referencia o apuntan a un objeto que est en la memoria. A las variables que antes hemos estado viendo se las llama variables por valor, ya que cada una de esas variables tiene asociado un valor que es independiente de los dems.
Como puedes comprobar, al cambiar en una de las variables el contenido de la propiedad Nombre, ese cambio afecta a las dos variables, pero eso no es porque haya nada mgico ni ningn fallo, es por lo que te coment antes: slo existe un objeto en la memoria y las dos variables acceden al mismo objeto, por tanto, cualquier cambio efectuado en ellas, se reflejar en ambas variables por la sencilla razn de que slo hay un objeto en memoria. A este tipo de variables se las llama variables por referencia, ya que hacen referencia o apuntan a un objeto que est en la memoria. A las variables que antes hemos estado viendo se las llama variables por valor, ya que cada una de esas variables tiene asociado un valor que es independiente de los dems.

34

LAS ESTRUCTURAS
Las estructuras o tipos definidos por el usuario, son un tipo especial de datos que veremos en otra ocasin con ms detalle, pero que se comportan casi como las clases, permitiendo tener mtodos, propiedades, etc., la diferencia principal entre las clases y las estructuras es que stas ltimas son tipos por valor, mientras que las clases son tipos por referencia. Las estructuras, al igual que las clases, las podemos declarar a nivel de espacios de nombres y tambin dentro de otras estructuras e incluso dentro de clases y mdulos.

LOS NOMBRE DE ESPACIOS


Qu es un Namespace?
Un Namespace es una forma de agrupar clases (tipos) que estn relacionadas de alguna forma. El uso de los espacios de nombres nos permitir tener nuestros ensamblados agrupados segn la tarea para la que los hemos programado. De esta forma, si escribimos ensamblados que accedern al disco, los podemos agrupar para tenerlos en sitio diferente a los que, por ejemplo, accedan a una base de datos. Eso mismo es lo que se hace en las clases base de .NET Framework y por esa razn existen los espacios de nombres System.IO y System.Data, por poner slo dos. Cada vez que creamos un proyecto con Visual Studio .NET de forma automtica se crea un espacio de nombres para nuestra aplicacin. Por tanto todos los tipos (clases, estructuras, enumeraciones, etc.) que definamos en dicho proyecto estarn incluidos dentro de ese espacio de nombres. Aunque el editor de Visual Studio no nos muestra que todo esto es as, ya que para crear o definir un espacio de nombres debemos usar la instruccin Namespace y marcar el final de dicha definicin usando End Namespace, por tanto es como si el IDE aadiera esas instrucciones por nosotros. Por tanto es importante saber que, aunque no lo veamos, todos nuestros proyectos estarn dentro de un espacio de nombres. Dicho Namespace se llamar de la misma forma que nuestro proyecto, salvo si tiene espacios, en ese caso se cambiarn los espacios (o caracteres no vlidos en un nombre de .NET) por un guin bajo. El Visual Studio define el espacio de nombres "predeterminado" de nuestro proyecto en las propiedades del proyecto. As que si quieres cambiar el Namespace predeterminado del proyecto, puedes hacerlo modificando dicho valor. Para poder hacer esto, muestra las propiedades del proyecto: Selecciona el proyecto en el explorador de soluciones (Solution Explorer) En el men Proyecto (Project), selecciona Propiedades (Properties) En la ficha General (que ser la que se muestre por defecto), el espacio de nombres estar en: Espacio de nombres de la raz (Root namespace) tal como podemos ver en la figura 1.

35

Figura 1: El espacio de nombres predeterminado de un proyecto de VB .NET

Qu finalidad tiene el uso de los Namespace? El escribir nuestro cdigo dentro de un bloque Namespace tiene por finalidad, el poder mantener una especie de jerarqua. Para que nos entendamos mejor, podramos comparar los espacios de nombres con los directorios de un disco. En cada directorio tendremos ficheros que de alguna forma estn relacionados, de esta forma no mezclaremos los ficheros de msica con los de imgenes ni con los proyectos de Visual Basic, por poner algunos ejemplos. Pues lo mismo ocurre con las jerarquas creadas con los Namespace, de forma que podamos tener de alguna forma separados unos tipos de datos (clases, etc.) de otros. Anidar espacios de nombres: Espacios de nombres dentro de otros espacios de nombres Siguiendo con el ejemplo de los directorios, es habitual que dentro de un directorio podamos tener otros directorios, de forma que tengamos ficheros que estando relacionados con el directorio principal no queremos que se mezclen con el resto de ficheros. Pues con los Namespace ocurre lo mismo, podemos declarar bloques Namespace dentro de otro bloque existente. Esto se consigue definiendo un bloque dentro de otro bloque. Por ejemplo:
Namespace Visual Basic Namespace Entrega5 Module Module1 Sub Main() End Sub

36

End Module End Namespace End Namespace

En este cdigo, tenemos dos espacios de nombres anidados, el espacio de nombres Entrega5 est dentro del espacio de nombres Visual Basic. Cmo acceder a los tipos declarados dentro de un Namespace? De igual forma que para acceder a los ficheros de un directorio debemos indicar el "path" en el que se encuentran, con los espacios de nombres ocurre lo mismo, existen formas abreviadas de realizar ese acceso. Por ejemplo, si queremos usar la clase StringBuilder que se encuentra declarada en el espacio de nombres System.Text, tendremos que indicar el espacio de nombres en el que se encuentra:
Dim sb As New System.Text.StringBuilder()

Es decir, debemos indicar el "path" completo de la clase, para poder acceder a ella. En teora si declaramos un mtodo dentro del mdulo Module1, (mostrado en el cdigo anterior), deberamos llamar a dicho mtodo usando el espacio de nombres completo, pero cuando estamos dentro de un espacio de nombres, no hace falta indicar el nombre completo, ocurre lo mismo que cuando estamos dentro de en un directorio, no tenemos que indicar el path completo para acceder a un fichero de ese mismo directorio, pero si queremos tambin podemos hacerlo, tal como se muestra en el siguiente cdigo:
Namespace Visual Basic Namespace Entrega5 Module Module1 Sub Main() VisualBasic.Entrega5.Module1.Ejemplo() End Sub Public Sub Ejemplo() Console.WriteLine("Saludos desde el Sub Ejemplo") End Sub End Module End Namespace End Namespace

Por tanto, para acceder a los miembros declarados dentro de un espacio de nombres, debemos usar la sintaxis: Espacio_de_nombres Punto Nombre_de_la_clase Punto Nombre_Del_Mtodo Si dicha clase est dentro de un espacio de nombres anidado, tambin debemos indicar dicho espacio de nombres. Ya que incluso para acceder a las propias clases de .NET usamos esta forma sintaxis, tal como se mostr antes para declarar la variable del tipo StringBuilder. En dicha declaracin vimos que haba dos espacios de nombres: System y dentro de ste est el espacio de nombres Text, el cual contiene la definicin de la clase StringBuilder. Es decir, siempre debemos indicar los espacios de nombres en los que se encuentran las clases, salvo que la clase (o tipo) est definido en el mismo espacio de nombres desde el que se va a usar. Aunque existen ciertas formas de hacer que esto no siempre tenga que ser as, ya que el cdigo se puede convertir en algo ms engorroso de leer si siempre tenemos que indicar los espacios de nombres que contienen las clases. Ejemplos de cmo usar los Namespace

37

En el ejemplo que vamos a usar, es de la pagina web de www.elguille.info, ya que lo ms interesante y mas entendible para ustedes, vamos a definir dos espacios de nombres y en cada uno de ellos declararemos algunas una clase, con idea de que veamos cmo usarlos desde cada uno de esos espacios de nombres. El cdigo sera el siguiente: Namespace Entrega16 Module Module1 Sub Main() declarar una clase del espacio de nombres ClaseUno Dim c1 As New ClasesUno.PruebaA("Pepe", "Ruiz") declarar una clase del espacio de nombres ClaseDos Dim c2 As New ClasesDos.PruebaB("Maria", "Snchez") Console.WriteLine("c1 = {0}", c1) Console.WriteLine("c2 = {0}", c2) Console.ReadLine() End Sub End Module End Namespace Namespace ClasesUno Public Class PruebaA Private _nombre As String Private _apellidos As String Public Sub New() End Sub Public Sub New(ByVal nombre As String, ByVal apellidos As String) Me.Nombre = nombre Me.Apellidos = apellidos End Sub Public Property Nombre() As String Get Return _nombre End Get Set(ByVal value As String) _nombre = value End Set End Property Public Property Apellidos() As String Get Return _apellidos End Get Set(ByVal value As String) _apellidos = value End Set End Property Public Overrides Function ToString() As String Return Apellidos & ", " & Nombre End Function End Class End Namespace

38

Namespace ClasesDos Public Class PruebaB Inherits ClasesUno.PruebaA Public Sub New() End Sub Public Sub New(ByVal nombre As String, ByVal apellidos As String) Me.Nombre = nombre Me.Apellidos = apellidos End Sub End Class End Namespace

Es este cdigo tenemos tres espacios de nombres: Entrega16 que es donde est declarado el mdulo que se usar para iniciar la aplicacin.

ClasesUno en el que se define la clase PruebaA ClasesDos en el que se define la clase PruebaB, la cual simplemente hereda (o se basa en) la clase definida en ClasesUno.

Para poder acceder a las clases desde Main, tenemos que indicar en qu espacio de nombres est cada una de las clases, esto es as porque el mdulo que contiene el mtodo Main est declarado dentro de un espacio de nombres diferente. Lo mismo ocurre con la instruccin Inherits ClasesUno.PruebaA de la clase PruebaB, ya que cada una de las clases est dentro de un espacio de nombres distinto y si no indicamos expresamente ese espacio de nombres, el compilador no sabr donde localizar la clase PruebaA. Por supuesto, si hacemos una importacin del espacio de nombres ClasesUno, podramos acceder a la clase ClaseA sin necesidad de indicar el espacio de nombres que la contiene.
Algunas cosas que debes saber sobre los Namespace "automticos" y los definidos por ti

Para ir finalizando esta entrega quiero decirte que si quitas el espacio de nombres predeterminado que utiliza el Visual Studio y aades al cdigo tus propios espacios de nombres, debo decirte que hay dos cosas que debes tener en cuenta: La primera es que seguramente al ejecutar la aplicacin, el VS no encuentre la clase que usar como punto de inicio, debido a que ahora est en otro espacio de nombres distinto, por tanto tendrs que mostrar las propiedades del proyecto (ver figura 1) e indicar en Objeto inicial el mdulo o clase que se usar o bien, en el caso de las aplicaciones de consola, indicar Sub Main. La segunda, y ms importante, es que ya no existir un espacio de nombres que "contenga" tus clases (o tipos), por tanto, si en un fichero indicas tu propio espacio de nombres, en el resto de ficheros tambin debes indicar ese mismo espacio de nombres, al menos si tu intencin es que estn todas las declaraciones dentro del mismo "directorio". Todo esto viene al caso porque en un mismo proyecto podemos definir varios espacios de nombres y si no somos precisos con la

39

ubicacin de cada tipo que tenemos en el proyecto, puede que el compilador se queje y nos diga que no encuentra tal o cual clase (o tipo). Tambin debes saber que si nuestro proyecto usa libreras creadas por nosotros, pero que simplemente las tenemos referenciadas, (es decir, podemos usar otras DLLs creadas por nosotros y ya compiladas), esos otros ensamblados (assemblies) pueden tener tambin un espacio de nombres que se llame igual que el que tenemos en nuestro proyecto, en ese caso no ser necesario indicar el espacio de nombres de la otra librera, ya que podemos tener un mismo espacio de nombres "repartido" por varios ensamblados. Esto es muy til si queremos definir una serie de clases, enumeraciones, etc., en un proyecto, crear un ensamblado DLL a partir de ese proyecto y posteriormente usarlo en otro proyecto diferente, pero sin cambiar el espacio de nombres en el que tenemos definidos todos los tipos. Con la ventaja adicional de que esa DLL la podemos usar en proyectos de otros lenguajes de .NET, por tanto podemos crear con VB una librera de clases y usarla desde C#.

40

APLICACN DE VENTANAS
El IDE de Visual Basic 2005, ya lo conocen, por lo tanto ya no les voy a ensear, les enseare las nuevas ventanas con que se tienen que familiarizar de hoy en adelante.

Crear Nuevo Proyecto


Como ustedes ya saben hay dos formas de crear un nuevo proyecto, lo nico que veremos, lo que tenemos que escoger, al crear un proyecto esta vez seleccionaremos WindowsApplication!, le pondremos un nombre y luego daremos clic en aceptar.

Como recordatorio, tengan en cuenta que nuestro proyecto siempre se llamara el nombre y el nmero de nuestro ejercicio, por ejemplo, si vamos a hacer el ejercicio 61, nuestro proyecto se llamara Ejercicio61.

41

El IDE de WindowsApplication
A comparacin de las consolas de aplicacin tenemos un nuevo IDE, en este IDE cada vez que creamos un nuevo Item, se abrir una nueva ventana, esto ya lo veremos en la aplicacin que realizaremos ms adelante.

Ventana de Diseo

Al crear una nueva solucin de WindowsApplication, siempre nos aparecer la siguiente ventana.

Como se darn cuenta el archivo siempre tendr un nombre de Form1, que es el primer formulario del proyecto. Qu es un Formulario? Es la ventana principal, porque sirve de fondo para los controles que se dibujan en una aplicacin, como cajas de textos, etiquetas, botones, etc. se podra decir que es un contenedor de controles y objetos.

42

Ventana de Cdigo
Esta ventana contendr todo el cdigo que realizara los diferentes eventos, procedimientos, instrucciones del formulario.

Mayormente para activar esta ventana y aadir cualquier cdigo, siempre se tendr que hacer doble clic en el control deseado.

Caja de Herramientas
Contiene los controles que se dibujan en el formulario, en tiempo de diseo y no en tiempo de ejecucin.

Estos controles estn divididos por clases, los controles ms usados son los de CommonControls, mas adelante ya veremos con ms detalle cada control.

43

Explorador de Soluciones
En esta ventana se encuentra el formulario, tambin vas a poder encontrar todos los Item que agregas de aqu en adelante, ya sean formularios, mdulos, clases, etc.

Botn

Funcin Este botn nos permitir visualizar las propiedades de la solucin, proyecto, formulario, etc., todos lo Item que se encuentran en esta ventana. Nos permitir actualizar los tems de la solucin Al dar clic en este botn nos mostrara todos los tems de la solucin, ya sean Referencias, XML, formulario, etc. Nos mostrar el cdigo del Item seleccionado, puede ser formulario, mdulo, clase, etc. Este botn nos permitir visualizar la ventana de diseo del formulario o de cualquier Item seleccionado.

44

Para agregar un nuevo Item nos ubicaremos en el nombre de la solucin y luego daremos clic derecho y seleccionaremos Add y despus New Item.

Despus de dar clic en New Item nos aparecer la siguiente ventana en donde seleccionaremos el Item que queramos aadir, como ustedes lo ven en la figura de abajo, una vez seleccionado el Item daremos clic en add (Aadir).

45

Explorador de Base de Datos


En esta ventana veremos todas las bases de datos creadas y cada una con su conexin a ella respectivamente.

Ms adelante ya veremos con detalle esta ventana.

Base de Datos

Desde esta ventana podremos crear una base de datos nueva.

46

Ventana de Propiedades
Esta ventana nos mostrara todas las propiedades del Item seleccionado, puede ser de un formulario, mdulo, control, etc.

Ventana de Errores
Esta ventana nos mostrara todos los errores que ocurran en tiempo de ejecucin del programa.

47

Barra de Herramientas

Esta barra contendr diversos botones que suelen facilitar al programador en el uso del programa, al principio ya vimos que botones usbamos en las consolas de aplicaciones.

Botn

Funcin Este botn ejecutara el proyecto, tambin se puede ejecutar el proyecto presionando la tecla F5 Este botn mostrar la ventana de Lista de Errores Este botn nos mostrara una ventana en donde podremos hallar ya sean los mtodos, eventos de un control seleccionado, tambin podremos ver esa ventana presionando la tecla F2. Este botn realiza una pausa a la ejecucin del proyecto. Al dar clic en este botn, podremos visualizar la ventana de propiedades del tem seleccionado. Cuando queramos convertir varias lneas en comentario, primero seleccionaremos el cdigo y luego daremos clic en este botn. Y cuando queramos ya no tener como comentario un cdigo, solo tendremos que dar clic en este botn. Nos mostrara la ventana de Explorador de Soluciones Detendr la aplicacin Nos mostrara la Caja de Herramientas

Formularios (Forms)
Introduccin
Es una ventana muy importante porque aqu se dibujan o pegan todos los controles que necesitamos utilizar en nuestro programa o aplicacin. Se pueden utilizar tantos formularios como se necesiten, y dependiendo de la utilidad que se les d, estos sern de diferentes tipos. As, se puede crear un formulario que contenga un grfico, para visualizar informacin o para ingresar datos.

Para dejar un poco ms en claro, un formulario es una ventana tpica de Windows. Estos estn contenidos en forma automtica en el escritorio de Windows o en su defecto dentro de otros formularios a los que llamaremos formularios MDI (Mltiple Document Interface Interfaz de Mltiples Documentos).

Toda ventana es a su vez una interfaz grfica de usuario la que permite interactuar a un usuario no muy experimentado de una manera muy simple con ella. Cada una de estas interfaces puede tener una gran funcionalidad inherente la que se concentra en la misma ventana o en determinados controles que estn inmersos en ella.

Como todo objeto, un formulario posee propiedades y mtodos, as como a su vez soporta eventos que veremos a continuacin.

Tipos
Hay cuatro tipos de formularios, que son los ms usados, como son: El formulario MDI, que es un contenedor de otros formularios, por ejemplo tenemos las ventanas de Word que es un formulario MDI, ya que contiene o puede contener diversas ventanas de documentos abiertos. Los formularios Child, que son aquellos formularios hijos, en otras palabras son todos aquellos formularios que van a ser contenidos en el formulario MDI. El formulario normal, que el que ms vamos a usar, y el ms comn.

El formulario Parents, que es aquel formulario que va a contener todos los controles de otro formulario, por ejemplo, si tenemos un formulario llamado frmPadre, que contiene un men y un botn grabar y creamos un nuevo formulario de tipo parents llamado frmHijo y le especificamos en su propiedad de parents el formulario frmPadre, automticamente el formulario frmHijo aparecer con el men y el botn grabar, bueno, eso ya lo veremos ms adelante para que les quede ms claro, as que no se preocupen.

Propiedades
Propiedad Descripcin Permite identificar el formulario, su prefijo de cualquier formulario es frm Si est establecido, el botn se activa cuando el usuario presiona la tecla [Enter] ([INTRO]) Descripcin que se proporciona a clientes con accesibilidad. Nombre que se proporciona a los clientes con accesibilidad. Funcin que se proporciona a clientes con accesibilidad. Determina si el control recibe notificaciones de arrastrar y colocar. Determina cuando el formulario o el control, cuando la escala de la resolucin de la pantalla o de la fuente de letra a cambiado. Determina si aparecen automticamente las barras de desplazamiento cuando los controles estn situados fuera del rea de clientes del formulario. Establece el margen alrededor del control durante el AutoScroll. Tamao lgico mnimo para la zona de desplazamiento automtico. Establece si el formulario se adecua al tamao especificado de los controles. Especifica el modo del tamao del formulario Color de fondo a utilizar para mostrar texto o grficos en el control. Imagen de fondo utilizada para el formulario. Especifica cmo se presentara la imagen de fondo del formulario, puede ser en mosaico, estirado, centrada. Si est establecido, el botn se activa cuando el usuario presiona la tecla ESC Indica si este control causa y genera eventos de validacin. Indica el men contextual que se muestra cuando el usuario hace clic derecho. Determina si el formulario tiene un cuadro de men control el que se encuentra en la esquina superior derecha de la ventana. Indica el tipo de cursor que aparece al pasar el Mouse por el control Indica si el control est habilitado Indica la fuente utilizada para mostrar texto en el control. Indica el color de primer plano utilizado para mostrar texto o grficos en el control.

(Name) AccepButton AccesibleDescription AccesibleName AccesibleRole AllowDrop AutoScaleMode

AutoScroll AutoScrollMargin AutoScrollMinSize AutoSize AutoSizeMode BackColor BackGroundImage BackGroundImageLayout CancelButton CausesValidation ContextMenuStrip ControlBox Cursor Enabled Font ForeColor

FormBorderStyle HelpButton

Icon

ImeMode IsMDIContainer KeyPreview Language Localizable Location Locked MainMenuStrip MaximizeBox MaximunSize MinimizeBox MinimunSiza Opacity Padding RightToLeft ShowIcon ShowInTaskBar Size SizeGripStyle StarPosition Tag Text

Controla la apariencia del borde del formulario. Esto tambin influye en cmo se muestra la barra de titulo y que botones pueden aparecer en ella. Determina si un formulario tiene botn de ayuda en la barra de titulo. Indica el icono para un formulario. Esto se muestra en el cuadro de men del formulario del sistema y cuando el formulario se minimiza, Width: Ancho, Height: Altura. Determina el estado IME (Editor de Mtodos de Entrada) del objeto cuando se selecciona. Determina si el formulario es un contenedor MDI. Determina si los eventos de teclado para los controles del formulario se registran junto con el formulario. Indica el idioma traducido actualmente. Determina si se va a generar el cdigo localizable para este objeto. Posicin de la esquina superior izquierda del control, respecto al contenedor. Determina si se puede mover o cambiar de tamao el control. Indica el men principal del formulario. Debe establecerse en un componente de tipo MainMenuStrip. formulario contendr el botn de Determina si el maximizar. Indica el tamao mximo de la ventana al maximizar. Determina si el formulario contendr el botn de minimizar. Indica el tamao mnimo de la ventana al minimizar. Determina la opacidad o transparencia del formulario; 0% es transparente, 100% es opaco (visible) Indica el espacio entre los controles que va a contener el formulario. Indica si el control debe dibujarse de derecha a izquierda para idiomas que se escriben en esa direccin. Determina si se muestra el icono del formulario en la barra de titulo. Determina si el formulario aparece en la barra de tareas de Windows. Determina el tamao del formulario o control en pxeles. Determina cuando se muestra SizeGrip en un formulario. Determina la posicin del formulario cuando aparece por primera. Datos definidos por el usuario asociado con el control. Muestra el texto contenido en el formulario en la barra de titulo.

TopMost TransparencyKey UseWaitCursor WindowsState

Determina si el formulario esta sobre todos los dems formularios que no son de nivel superior, incluso cuando esta desactivado. Indica el color que parece transparente cuando se aplica al formulario. Indica si se muestra un cursor de espera. Determina el estado visual inicial del formulario, puede ser minimizado, maximizado o normal.

Mtodos
Vamos a tocar los mtodos mas utilizados, ya que existen un sin fin de mtodos.

Mtodo Activate Close CreateControl CreateGraphics Dispose FindForm Finalize Focus GetType Hide Invalidate LayoutMdi Refresh RemoveOwnedForm ResetText Select Show ShowDialog Update Validate

Descripcin Activa el formulario y le otorga el foco Cierra el formulario Obliga a que se cree el control, incluidos el identificador y los controles secundarios. Crea el objeto Graphics para el control Sobrecargado. Libera los recursos utilizados por componentes. Recupera el formulario en el que se encuentra el control. Libera todos los recursos del formulario y del sistema. Establece el foco de entrada al control. Obtiene el objeto Type de la instancia actual. Oculta el formulario o control al usuario. Sobrecargado, Invalida una regin especfica del control y hace que se envi un mensaje de dibujo al control. Organiza los formularios MDI secundarios del formulario MDI principal. Obliga al control invalidar su rea cliente y acto seguido obliga a que vuelva a dibujarse el control y sus controles secundarios. Quita un formulario con propietario de este formulario. Restablece el valor predeterminado de la propiedad Text. Sobrecargado, activa un control. Muestra el control o formulario al usuario. Sobrecargado. Muestra el formulario como un cuadro de dialogo modal. Hace que el control vuelva a dibujar las regiones no validas en su rea de cliente. Valida el ltimo control no validado y sus predecesores, pero sin incluir el control actual.

Eventos
Vamos a tocar los eventos ms utilizados, ya que existen una cierta cantidad considerables de eventos.

Evento

Descripcin Se produce cuando el formulario se activa por cdigo de programa o por parte del usuario. Se produce cuando el valor de la propiedad BackGroundImage cambia. Se produce cuando el usuario hace clic en el control. Agrega un controlador de eventos para escuchar al evento Disponed en el componente. Se produce cuando se hace doble clic en el control. Se produce cuando cambia el valor de la propiedad enabled. Se produce cuando se entra en el control. Tiene lugar cuando el formulario est cerrado. Tiene lugar cuando se cierra el formulario. Se produce cuando el control recibe el foco. Se produce cuando es necesario volver a dibujar un control. Se produce cuando se presiona una tecla mientras el control tiene el foco. Se produce cuando se presiona una tecla mientras el control tiene el foco. Se produce cuando se suelta una tecla mientras el control tiene el foco. Se produce cuando el foco de entrada deja el control Se produce cuando el foco de entrada deja el control. Se produce antes de que se muestre un formulario por primera vez. Se produce cuando el control pierde el foco. Se produce cuando el men de un formulario pierde el foco. Se produce cuando el men de un formulario recibe el foco. Se produce cuando el puntero del Mouse esta sobre el control y se presiona un botn del Mouse.

Activated BackGroundImageChanged Click Disponed DoubleClick EnabledChanged Enter FormClosed FormClosing GotFocus Invalidated KeyDown KeyPress KeyUp Layout Leave Load LostFocus MenuComplete MenuStart MouseDown

MouseEnter

Se produce cuando el puntero del Mouse entra en el control.

MouseHover MouseLeave MouseMove MouseUp MouseWheel Move VisibleChanged

Se produce cuando el puntero del Mouse se sita encima del control. Se produce cuando el puntero del Mouse deja el control. Se produce cuando el puntero del Mouse se mueve sobre el control. Se produce cuando el puntero del Mouse esta encima del control y se suelta el botn del Mouse. Se produce cuando la rueda del Mouse se mueve mientras el control tiene el foco. Se produce cuando se mueve el control. Se produce cuando cambia el valor de la propiedad visible.

Controles
Con el .NET Framework 2.0 tenemos una diversidad de control y objetos que podemos usar en nuestras aplicaciones, ahora veremos algunos controles que mas vamos a usar divididos en categoras.

Common Controls
Como se van a dar cuenta, cada control tiene su icono, nombre, prefijo y su descripcin.

Icono

Nombre

Prefijo

Descripcin Se utiliza para iniciar, detener o interrumpir un proceso. Muestra una casilla de verificacin y una etiqueta para texto. Se utiliza n general para establecer opciones. Muestra una lista desplazable de elementos, cada uno acompaado por una casilla de verificacin. Muestra una lista desplegable de elementos. Muestra un calendario grfico desplegable, que permite que los usuarios seleccionen una fecha o una hora. Muestra texto que los usuarios no pueden modificar directamente. Muestra texto en forma de vnculo de estilo Web y desencadena un evento cuando el usuario hace clic en el texto. Muestra una lista de textos, tambin llamados elementos. Muestra los elementos ya sean texto solo o con grficos (iconos). Captura texto escrito por el usuario, ya sea teniendo un formato de entrada. Muestra un calendario grfico que permite que los usuarios seleccionen un intervalo de fechas. Muestra un icono, en el rea de notificacin de estado de la barra de tareas, que representa una aplicacin que se ejecuta en segundo plano.

Button CheckBox

btn chk

CheckedListBox ComboBox DateTimePicker Label LinkLabel ListBox ListView MaskedTextBox MonthCalender

clb cbo dtp lbl llbl lst lstv msk mnc

NotifyIcon

nti

10

NumericUpDown

nud

Muestra una lista de nmero a travs de la cual los usuarios se pueden desplazar mediante botones hacia arriba y hacia abajo.

11

PictureBox ProgressBar RadioButton RichTextBox

pic pgb rdb rtb

TextBox

txt

ToolTip

ttp

TreeView

trv

WebBrowser

wbr

Muestra archivos de imgenes, tales como mapas bits e iconos, gifs, etc. Muestra una barra de progreso, mientras realiza una instruccin. Muestra un botn que puede activarse o desactivarse. Habilita la presentacin del texto con formato de texto sencillo o de texto enriquecido (RTF). Muestra texto escrito en tiempo de diseo que puede ser editado por los usuarios en tiempo de ejecucin. Este control activa la propiedad ToolTip en los dems controles, su funcin es brindar una pequea informacin al pasar el Mouse por el control que queramos. Muestra una coleccin jerrquica de objetos de nodo que puede constar de texto con casilla de verificacin o iconos opcionales. Permite crear un explorador de Internet con fcil navegacin, tambin se puede abrir mltiples archivos.

Nota: Los prefijos son una referencia, se utiliza para saber de qu control se habla en tiempo de diseo, no es obligatorio usarlo, pero es recomendable que se familiaricen, ya que la mayora de programadores lo usan.

Components
Solo les muestro dos controles, que son los ms usados.

Icono

Nombre

Prefijo

Descripcin Es un contenedor de imgenes, para que despus se use con otros controles. Sirve para realizar un conteo de tiempo, en tiempo de ejecucin.

ImageList Timer

img tmr

12

Containers
Esta categora se encuentran todos aquellos controles que sirven para contener otros controles.

Icono

Nombre

Prefijo

Descripcin Es un contenedor de controles que no permite la modificacin de la posicin del control. Agrupa un conjunto de controles (tales como botones de opcin) en un marco con etiqueta. Agrupa un conjunto de controles en un marco sin etiqueta que permite el desplazamiento. Es un contenedor de controles con dos paneles, en donde se puede insertar cualquier tipo de control. Proporciona una pgina con fichas para organizar y tener acceso a controles agrupados de forma eficiente. Es un organizador de controles, ya que podemos aadir filas o columnas para control que queramos.

FlowLayoutPanel

flp

GroupBox

gpb

Panel

pnl

SplitContainer

spc

TabControl

tbc

TableLayoutPanel

tlp

Data
Como se van a dar cuenta, cada control tiene su icono, nombre, prefijo y su descripcin. Icono Nombre Prefijo Descripcin Este control nos permite la navegacin de datos, conectada a una base de datos. Este control nos permite la conexin y la navegacin de datos, de una base de datos. Nos permite visualizar los datos de una tabla o de una base de datos. Nos permite la creacin y la conexin de una base de datos.

BindingNavigator

bgn

BindingSource DataGripView DataSet

bgs dgv dts

13

Dialog
Como se van a dar cuenta, cada control tiene su icono, nombre, prefijo y su descripcin.

Icono

Nombre

Prefijo

Descripcin Muestra el cuadro de dilogo de seleccin de colore, que permite que los usuarios seleccionen el color de un elemento de la interfaz. Muestra un cuadro de dilogo que permite buscar o una carpeta de destino. Muestra un cuadro de dilogo que permite que los usuarios establezcan una fuente y sus atributos. Muestra un cuadro de dialogo que permite que los usuarios se desplacen hasta un archivo y lo seleccionen. Muestra un cuadro de dialogo que permite que los usuarios guarden un archivo.

ColorDialog

cdg

FolderBrowserDialog

fbd

FontDialog

fdg

OpenFileDialog

ofd

SaveFileDialog

sfd

Menus & ToolBars


Como se van a dar cuenta, cada control tiene su icono, nombre, prefijo y su descripcin.

Icono

Nombre

Prefijo

Descripcin Implementa un men que aparece cuando el usuario hace clic en un objeto con el botn secundario del Mouse. Proporciona una interfaz en tiempo de diseo para la creacin de menos. Muestra informacin acerca del estado actual de la aplicacin mediante una ventana con marco, habitualmente en parte inferior de un formulario. Contiene una coleccin de botones, combos, etiquetas, etc. Muestra una interfaz de botones con men.

ContextMenuStrip

cms

MenuStrip

mnu

StatusStrip

sts

ToolStrip ToolStripContainer

tls tsc

10

Propiedades:
Ahora veremos algunas propiedad ms comunes que tienen los controles, solo tocaremos lo que no hemos mencionado, ya que casi todos los controles y formularios tienen las mismas propiedades.

Propiedad

Descripcin Obtiene o establece la clave de acceso (la letra subrayada) que permite desplazarse rpidamente al control de servidor Web. Establece la alineacin del control con respecto a un objeto, cuando se maximiza o minimiza. Obtiene la coleccin de atributos arbitrarios (solo para procesar) que no corresponden a propiedades del control. Obtiene o establece el color de borde del control Web. Obtiene o establece el estilo del borde del control. Obtiene o establece el ancho del borde del control. Determina el comportamiento del control, cuando es pasado el Mouse o cuando hacen clic en el control. Estable la imagen que contendr el control. Establece la alineacin de la imagen. Establece la alineacin del texto del control. Se activa cuando el objeto TooTip est en el diseo del formulario, normalmente contiene una pequea informacin del control.

AccessKey Anchor Attributes BorderColor BorderStyle BorderWidth FlatStyle Image ImageAlign TextAlign ToolTip

Mtodos
Los mtodos son casi los mismos que tiene el formulario, as que conforme vamos avanzando veremos uno que otro mtodo propio de cada control.

Eventos
Los eventos tambin son muy parecidos a los eventos del formulario, solo tocaremos algunos eventos propios de cada control, conforme avancemos.

Ahora veremos unos cuantos ejemplos usando primero un Label, TextBox, Button.

11

MSGBOX
El MSGBOX es una ventana que nos muestra un mensaje en el centro de la pantalla. Su sintaxis es la siguiente: MsgBox(Mensaje, Tipo de Mensaje, Titulo)

Por ejemplo: MsgBox("desea Salir de la Aplicacin?", MsgBoxStyle.YesNo, "Sistema") El mensaje que nos mostrara ser el siguiente:

Tipo de Mensaje

Icono No No No No No

Botones (Botn Cerrar) Abortar, Reintentar, Ignorar (Desactivado) Aceptar (Activado) Aceptar (Activado) Aceptar (Activado) Aceptar (Activado) Aceptar (Activado) Aceptar (Activado) Aceptar (Activado) Aceptar, Ayuda (Activado) Aceptar (Activado) Aceptar (Activado y al lado Izquierdo) Aceptar (Activado) Aceptar, Cancelar (Activado) Aceptar (Activado) Aceptar (Activado) Reintentar, Cancelar (Activado) Aceptar (Activado) Icono en el Titulo Si, No (Desactivado) Si, No, Cancelar (Activado)

No No No No No No No No No No

Variable tipo MsgBoxResult

La variable tipo MsgBoxResult, almacena los resultados que se obtenga mediante un Message Box, que despus no sirva compararla y ejecutar instrucciones, por ejemplo:

Dim Resp As MsgBoxResult Resp = MsgBox("desea Salir?", MsgBoxStyle.YesNo, "Sistema") If Resp = MsgBoxResult.Yes Then Me.Close() End If

Explication: Primero declaramos una variable Resp de tipo MsgBoxResult, esta variable almacena el valor devuelto del mensaje, si el usuario responde SI, este valor que es verdadero (True) va a ser comparado con la siguiente instruccin IF que compara la variable Resp, que sera ms o menos as: Si la variables Resp tienes almacenado el valor SI, cerrara la ventana, sino, no har ninguna instruccin.

FUNCIONES TIPO CADENA


Una cadena es un dato de tipo String (Carcter); es decir se refiere a letras o letras y nmeros, ahora veremos las funciones de cadenas ms utilizadas y posteriormente realizaremos una aplicacin para que les quede ms claro, sobre las funciones de cadena.

Right: Obtiene de una cadena, una cantidad de caracteres empezando por la derecha: Sintaxis; Microsoft.VisualBasic.Right(Cadena,N) Left: Obtiene de una cadena, una cantidad de caracteres empezando por la izquierda: Sintaxis; Microsoft.VisualBasic.Left(Cadena,N) Mid: Obtiene de una cadena, una cantidad de caracteres a partir de una posicin determinada: Sintaxis; Microsoft.VisualBasic.Mid(Cadena,N) Len: Obtiene la longitud de una cadena, es decir la cantidad de caracteres que contiene incluyendo los espacios en blanco: Sintaxis; Len(Cadena) Trim: Quita los espacios en blanco al final de una cadena: Sintaxis; Trim(Cadena) RTrim: Quita los espacios en blanco al final de una cadena: Sintaxis; RTrim(Cadena) LTrim: Quita los espacios en blanco al inicio de una cadena: Sintaxis; LTrim(Cadena) UCase: Convierte una cadena en maysculas: Sintaxis; UCase(Cadena) LCase: Convierte una cadena en minsculas: Sintaxis; LCase(Cadena) StrConv: Convierte una cadena en 3 formas diferentes, en maysculas = 1, minsculas = 2, la primera letra de cada palabra en maysculas = 3 : Sintaxis; StrConv(Cadena,Valor) InStr: Obtiene un nmero que indica la posicin de una subcadena dentro de una cadena: Sintaxis; InStr(Cadena,SubCadena)

IF - THEN - ELSE
Como ya hemos visto antes esta instruccin condicional, en las consolas de aplicacin, ahora veremos en las aplicaciones de ventanas, que por cierto no cambian nada, ahora veremos unos cuantos ejercicios usando el IF y el MessageBox.

71. Ahora desarrollaremos nuevamente el ejercicio anterior (62).

txtNombre

txtDireccion

txtTelefono txtCE

txtObservaciones

btnNuevo

btnFinalizar

Esta aplicacin deber tener las siguientes caractersticas:

Al ejecutar la aplicacin el botn Nuevo Alumno debe estar desactivado. Solo se debe activar cuando comience a ingresar el nombre del alumno. Cuando el usuario ingrese un campo y pulse Enter, el cursor debe pasar automticamente al siguiente campo. Al hacer clic en el botn finalizar se debe mostrar un mensaje de advertencia. Las instrucciones de este botn se deben ejecutar cuando el usuario pulse la tecla Esc.

txtNombre (Evento KeyPress) If Asc(e.KeyChar) = 13 Then Me.txtDireccion.Focus() End If

txtDireccion (Evento KeyPress) If Asc(e.KeyChar) = 13 Then Me.txtTelefono.Focus() End If

txtTelefono (Evento KeyPress) If Asc(e.KeyChar) = 13 Then Me.txtCE.Focus() End If

txtCE (Evento KeyPress) If Asc(e.KeyChar) = 13 Then Me.txtObservaciones.Focus() End If

frmEjercicio71 (Evento FormClosing) Dim Resp As MsgBoxResult Resp = MsgBox("desea Salir de la Aplicacin?", MsgBoxStyle.YesNo, "Sistema") If Resp = MsgBoxResult.No Then e.Cancel = True End If

frmEjercicio71 (Evento Load) Me.btnNuevo.Enabled = False

btnFinalizar (Evento Click) Me.Close()

btnNuevo (Evento Click) Me.txtCE.Text = "" Me.txtDireccion.Text = "" Me.txtNombre.Text = "" Me.txtObservaciones.Text = "" Me.txtTelefono.Text = "" Me.txtNombre.Focus()

txtNombre (Evento TextChanged) If Trim(Me.txtNombre.Text) = "" Then Me.btnNuevo.Enabled = False Else Me.btnNuevo.Enabled = True End If

Para que se active o realice las instrucciones que se encuentren en el botn Finalizar, con solo presionar Esc, tendrn que especificar CancelButton en la propiedad del formulario, indicando el botn btnFinalizar.

Explicacin

Seguro se estarn haciendo algunas preguntas como lo son: e.KeyChar, e.Cancel, Asc, ahora les explico: e.KeyChar: Esta instruccin nos devuelve el carcter que ha sido digitado en ese momento, por ejemplo si digitamos la letra a, esta instruccin nos devuelve el valor de a pero como carcter. Asc: Esta funcin convierte cualquier carcter enviado en un cdigo ASCII , siguiendo el ejemplo anterior, ya que e.KeyChar tiene el carcter de a, si esto lo enviamos a la funcin Asc, quedara mas o menos as: Asc(e.KeyChar), esta instruccin nos devolvera el valor de 97, porq?, bueno el valor de a en cdigo ASCII es 97, as de simple. e.Cancel: Esta instruccin nos permite cancelar cualquier evento que se est realizando, por ejemplo si estamos cerrando el formulario, podemos indicarle que lo cancele, envindole o indicndole un valor verdadero, para la cancelacin del evento.

72. La siguiente aplicacin nos ingresar los apellidos y nombres, fecha de ingreso, turno y promedio de un alumno. Este programa debe contar con las siguientes caractersticas: El primer carcter de cada nombre o apellido debe convertirse en maysculas y el reto en minsculas. Se debe de verificar que la fecha ingresada sea correcta En el turno solo se debe aceptar las letras M, T y N. El promedio debe ser un nmero entre 0 y 20. Los botones Nuevo y Salir deben permanecer desactivados hasta que se ingresen todos los datos correctos.

txtApeNom

txtFecNac txtTurno txtPromedio

btnNuevo

btnSalir

Funcin Mayscula Esta funcin indica si la letra ingresada esta en mayscula. Function Mayuscula(ByVal v As Integer) As Boolean If v >= 65 And v <= 90 Then Mayuscula = True Else Mayuscula = False End If End Function

Funcin Minscula Esta funcin indica si la letra ingresada esta en minscula. Function Minuscula(ByVal v As Integer) As Boolean If v >= 97 And v <= 122 Then Minuscula = True Else Minuscula = False End If End Function

Funcin Nmero Esta funcin indica si el carcter ingresado es un nmero. Function Numero(ByVal v As Integer) As Boolean If v < 48 Or v > 57 Then Numero = False Else Numero = True End If End Function

Funcin Especial Indica si a ingresado una vocal con tilde, la letra o o pulso ENTER, la barra espaciadora o de retroceso (Backs pace). Function Especial(ByVal v As Integer) As Boolean If v = 13 Or v = 32 Or v = 8 Or v = 225 Or v = 233 Or v = 237 Or v = 243 Or v = 250 Or v = 241 Or v = 209 Then Especial = True Else Especial = False End If End Function

Funcin Ingresados Esta funcin verifican si todos los datos han sido ingresados correctamente. Sub Ingresados() If Trim(Me.txtApeNom.Text) <> "" And IsDate(Me.txtFecNac.Text) And Trim(Me.txtTurno.Text) <> "" And Trim(Me.txtPromedio.Text) <> "" Then Me.btnNuevo.Enabled = True Me.btnSalir.Enabled = True Else Me.btnNuevo.Enabled = False Me.btnSalir.Enabled = False End If End Sub

Funcin Limpiar Esta funcin limpia los controles TextBox. Sub Limpiar() Me.txtApeNom.Text = "" Me.txtFecNac.Text = "" Me.txtPromedio.Text = "" Me.txtTurno.Text = "" Me.btnNuevo.Enabled = False Me.btnSalir.Enabled = False Me.txtApeNom.Focus() End Sub

txtApeNom (Evento KeyPress) Static anteriorespacio As Boolean If Asc(e.KeyChar) = 13 Then Me.txtFecNac.Focus() End If If Asc(e.KeyChar) = 32 Then anteriorespacio = True Else If Mayuscula(Asc(e.KeyChar)) Or Minuscula(Asc(e.KeyChar)) Or Especial(Asc(e.KeyChar)) Then If Trim(Me.txtApeNom.Text) = "" Or anteriorespacio Then REM Convierte a Mayuscula e.KeyChar = UCase(e.KeyChar) Else REM Convierte a Minuscula e.KeyChar = LCase(e.KeyChar) End If anteriorespacio = False Else MsgBox("Debe de Ingresar slo Letras", MsgBoxStyle.Information, "Cuidado") e.KeyChar = ChrW(0) Me.btnNuevo.Enabled = False Me.btnSalir.Enabled = False End If End If

txtFecNac (Evento KeyPress) If Asc(e.KeyChar) = 13 Then Me.txtTurno.Focus() End If

txtFecNac (Evento LostFocus) If IsDate(Me.txtFecNac.Text) Then Ingresados() Else MsgBox("Debe de Ingresar una Fecha Correcta", MsgBoxStyle.Information, "Cuidado") Me.txtFecNac.SelectionStart = 0 Me.txtFecNac.SelectionLength = Len(Me.txtFecNac.Text) Me.txtFecNac.Text = Me.txtFecNac.Text Me.txtFecNac.Focus() End If

frmEjercicio72 (Evento FormClosing) Dim Resp As MsgBoxResult Resp = MsgBox("Esta Seguro de Salir", MsgBoxStyle.YesNo, "Cuidado") If Resp = MsgBoxResult.No Then REM Si respondio que NO e.Cancel = True End If

frmEjercicio72 (Evento Load) Limpiar()

txtTurno (Evento KeyPress) Dim Letra As String If Asc(e.KeyChar) = 13 Then Me.txtPromedio.Focus() Else Letra = UCase(e.KeyChar) If Letra = "M" Or Letra = "T" Or Letra = "N" Or Asc(e.KeyChar) = 8 Then REM Convierte la Letra a Mayusculas e.KeyChar = UCase(e.KeyChar) Else MsgBox("Debe Ingresar slo las Letras M,T o N", MsgBoxStyle.Information, "Error") REM Ignora el Carcter Ingresado e.KeyChar = ChrW(0) Me.btnNuevo.Enabled = False Me.btnSalir.Enabled = False End If End If

txtPromedio (Evento KeyPress) If Numero(Asc(e.KeyChar)) Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 13 Then Ingresados() Else MsgBox("Debe Ingresar Slo Nmeros", MsgBoxStyle.Information, "Cuidado") e.KeyChar = ChrW(0) Me.btnNuevo.Enabled = False Me.btnSalir.Enabled = False End If

txtPromedio (Evento TextChanged) If Val(Me.txtPromedio.Text) < 0 Or Val(Me.txtPromedio.Text) > 20 Then MsgBox("El Valor Debe Estar Entre 0 y 20", MsgBoxStyle.Information, "Error") Me.txtPromedio.SelectionStart = 0 Me.txtPromedio.SelectionLength = Len(Me.txtPromedio.Text) Me.txtPromedio.Text = Me.txtPromedio.SelectedText Me.txtPromedio.Focus() Me.btnNuevo.Enabled = False Me.btnSalir.Enabled = False Else Ingresados() End If

txtApeNom, txtTurno (Evento TextChanged) Ingresados()

btnNuevo (Evento Click) Limpiar()

btnSalir (Evento Click) Me.Close()

En este ejercicio no casi nada que explicar en el cdigo, ya que es casi lo mismo que hemos usado en el ejercicio anterior, solo me queda dejarle una pequea tabla de cdigo ASCII que hemos usado. De A a la Z = del 65 al 90 De a a la z = del 97 al 122 = 255, = 233, = 237, = 243, = 250, = 241, = 209 De 0 al 9 = del 48 al 57 ENTER = 13 BACKSPACE = 8 ESC = 27 Barra Espaciadora = 32

INPUTBOX

El INPUTBOX es una ventana que permite que el usuario pueda ingresar un dato. Su sintaxis es la siguiente:

InputBox(Mensaje, Titulo, Valor Pred., Columna, Fila)

Mensaje Es el mensaje que se desea mostrar cuando se pida el dato a ingresar. Titulo Es el ttulo de la ventana. Valor Predeterminado Es el valor que se muestra en forma automtica para ser ingresado. Columna Es un valor que indica la posicin horizontal del formulario, donde se desea que se muestre la ventana. Fila Es un valor que indica la posicin vertical del formulario, donde se desea que se muestre la ventana.

Ejemplo:

Dim resp As String resp = InputBox("Ingrese el Nombre de la Persona", "Nuevo Registro", "Joel Martin Chuco Marrufo")

En este ejemplo hemos declarado una variable resp de tipo cadena, para poder almacenar el nombre que el usuario ingrese, tambin se puede obtener otro tipo de dato, ya sea nmero, fecha.

73. Este ejercicio cuenta el nmero de depsitos y retiros realizados por un cliente, adems almacena el total de los montos tanto de retiros como de depsitos efectuados incluyendo el saldo actual.

txtCliente

btnOk

txtMonto btnDeposito btnRetiro

lblCantDep

lblTotalDep lblTotalRet

btnNuevo

lblCantRet

btnSalir

lblSaldo

Variables a nivel del formulario Dim cd, cr As Integer Dim td, tr, saldo As Single

Funcin Limpia Sub Limpia() cd = 0 cr = 0 td = 0 tr = 0 saldo = 0 Me.txtCliente.Text = "" Me.txtMonto.Text = "" Me.lblCantDep.Text = "" Me.lblCantRet.Text = "" Me.lblSaldo.Text = "" Me.lblTotalDep.Text = "" Me.lblTotalRet.Text = "" Me.btnOk.Visible = True Me.btnDeposito.Enabled = False Me.btnRetiro.Enabled = False Me.txtCliente.ReadOnly = False Me.txtMonto.ReadOnly = True Me.txtCliente.Focus() End Sub

frmEjercicio73 (Evento FormClosing) Dim Resp As MsgBoxResult Resp = MsgBox("Desea Salir de la Aplicacin", MsgBoxStyle.YesNo, "Banco El Amigo") If Resp = MsgBoxResult.No Then e.Cancel = True End If

frmEjercicio73 (Evento Load) Call Limpia()

btnOk (Evento Click) Me.txtCliente.ReadOnly = True Me.txtMonto.ReadOnly = False Me.btnOk.Visible = False Me.btnDeposito.Enabled = True Me.btnRetiro.Enabled = True REM Utilizamos un InputBox para ingresar el saldo inicial saldo = Val(InputBox("Monto de Apertura " + Chr(13) + Chr(13) + "La Cuenta se Apertura con cualquier monto ", "Nueva Cuenta", 350)) Me.lblSaldo.Text = CStr(saldo) td = saldo cd = 1 Me.lblCantDep.Text = CStr(cd) Me.lblTotalDep.Text = CStr(td) Me.txtMonto.Focus()

btnDeposito (Evento Click) Dim deposito As Single deposito = CSng(Me.txtMonto.Text) td = td + deposito cd = cd + 1 Me.lblCantDep.Text = CStr(cd) Me.lblTotalDep.Text = CStr(td) saldo = CSng(Me.lblSaldo.Text) Me.lblSaldo.Text = CStr(saldo + deposito) Me.txtMonto.SelectionStart = 0 Me.txtMonto.SelectionLength = Len(Me.txtMonto.Text) Me.txtMonto.Focus()

btnRetiro (Evento Click) Dim retiro As Single retiro = CSng(Me.txtMonto.Text) saldo = CSng(Me.lblSaldo.Text) If saldo < retiro Then MsgBox("La cantidad que desea retirar excede su saldo actual", MsgBoxStyle.Critical, "Disculpe") Me.txtMonto.Text = "" Me.txtMonto.Focus() Else tr = tr - retiro cr = cr + 1 Me.lblCantRet.Text = CStr(cr) Me.lblTotalRet.Text = CStr(tr) Me.lblSaldo.Text = CStr(saldo - retiro) End If Me.txtMonto.SelectionStart = 0 Me.txtMonto.SelectionLength = Len(Me.txtMonto.Text) Me.txtMonto.Focus()

btnNuevo (Evento Click) Call Limpia()

btnSalir (Evento Click) Me.Close()

FORMAT
Esta funcin format nos permite darle un formato a un dato, ya sea una fecha, nmero, hora, etc. Sus formatos ms utilizados son:

Formato devuelto 152,125.32 04 - May - 2006 04/05/06 Jueves, May 04 2006 02:49:35 pm 14:49:35

Formato ###,##0.00 dd MMM - yyyy dd/mm/yy dddd, MMM d yyyy hh:mm:ss tt HH:mm:ss

Su sintaxis sera la siguiente: Format(Variable,Formato) Ejemplo: Dim Numero As Double Numero = 100000/3 Me.Label1.Text = Format(Numero, "###,##0.00") Y lo que nos mostrara el Label en la pantalla seria lo siguiente

33,333.33

74. Esta aplicacin nos permite ingresar el nombre del producto, precio anterior y precio actual, luego nos permite calcular el alza en soles y el alza en porcentajes. El alza en porcentaje es igual al alza en soles por 100 entre precio anterior.

txtProducto txtPrecAn txtPrecAct lblAlzaS lblAlzaP

btnNuevo

btnCalcular

btnSalir

Funcin Limpia Sub Limpia() Me.txtPrecAct.Text = "" Me.txtPrecAnt.Text = "" Me.txtProducto.Text = "" Me.lblAlzaP.Text = "" Me.lblAlzaS.Text = "" Me.txtProducto.Focus() End Sub

frmEjercicio74 (Evento FormClosing) Dim Resp As MsgBoxResult Resp = MsgBox("Desea Salir de la Aplicacin", MsgBoxStyle.YesNo, "Cuidado") If Resp = MsgBoxResult.No Then e.Cancel = True End If

frmEjercicio74 (Evento Load) Call Limpia()

btnCalcular (Evento Click) Me.lblAlzaS.Text = CStr(Val(Me.txtPrecAct.Text) - Val(Me.txtPrecAnt.Text)) Me.lblAlzaS.Text = Format(Val(Me.lblAlzaS.Text), "###,##0.00") Me.lblAlzaP.Text = CStr(Val(Me.lblAlzaS.Text) * 100 / Val(Me.txtPrecAnt.Text)) Me.lblAlzaP.Text = Format(Val(Me.lblAlzaP.Text), "###,##0.00") Me.lblAlzaP.Text = Me.lblAlzaP.Text + " %"

btnNuevo (Evento Click) Call Limpia() btnSalir (Evento Click) Me.Close()

75. Esta aplicacin nos permite ingresar el nombre del profesor, el nmero de horas normales que ha trabajado y el nmero de horas extras, luego se debe calcular el total que se le debe pagar por el nmero de horas normales, el total por horas extras y el total a pagar. Si trabajo ms de 48 horas su pago por hora es de S/. 8.00 soles y S/. 7.00 en caso contrario. Por hora extra S/. 9.50.

txtNomProf

txtHT txtHE lblPH lblTHN btnCalcular

btnNuevo btnSalir

lblTHE lblTP

Funcin Limpia Sub Limpia() Me.txtHE.Text = "" Me.txtHT.Text = "" Me.txtNomProf.Text = "" Me.lblPH.Text = "" Me.lblTHE.Text = "" Me.lblTHN.Text = "" Me.lblTP.Text = "" Me.txtNomProf.Focus() End Sub

frmEjercicio75 (Evento Load) Call Limpia()

btnCalcular (Evento Click) Dim PHN As Single PHN = IIf(Val(Me.txtHT.Text) > 48, 8.0, 7.0) Me.lblPH.Text = Format(PHN, "##0.00") Me.lblTHE.Text = Format(Val(Me.txtHE.Text) * 9.5, "###,##0.00") Me.lblTHN.Text = Format(Val(Me.txtHT.Text) * PHN, "###,##0.00") Me.lblTP.Text = Format(Val(Me.lblTHE.Text) + Val(Me.lblTHN.Text), "###,##0.00")

btnNuevo (Evento Click) Call Limpia()

btnSalir (Evento Click) Me.Close()

SELECT - CASE
Como ya hemos visto antes esta instruccin de seleccin, en las consolas de aplicacin, ahora veremos en las aplicaciones de ventanas, que por cierto no cambian casi nada, y utilizaremos las diversas sintaxis que existen, junto con funciones, clases etc.

76. En esta aplicacin se debe de ingresar el nombre del un producto, su precio unitario y la cantidad comprada de dicho producto, luego se debe calcular y visualizar el sub Total, el descuento en porcentaje, el descuento en soles y el total a pagar. El descuento en porcentaje se depende del sub total, de acuerdo a la siguiente tabla.

SUBTOTAl 100 101 De 101.1 a 200 De 200.1 a 500 A partir de 500

DESCUENTO % 2 % 4 % 6% 10 %

txtProducto txtPrecUnit txtCantComp lblSubTotal lblDescP lblDescS btnCalcular

btnNuevo btnSalir

lblTotal

Funcin Limpia Sub Limpia() Me.txtCantComp.Text = "" Me.txtPrecUnit.Text = "" Me.txtProducto.Text = "" Me.lblDescP.Text = "" Me.lblDescS.Text = "" Me.lblSubTotal.Text = "" Me.lblTotal.Text = "" Me.txtProducto.Focus() End Sub

frmEjercicio76 (Evento Load) Call Limpia()

btnCalcular (Evento Click) Dim Desc As Integer Me.lblSubTotal.Text = CStr(Val(Me.txtPrecUnit.Text) * Val(Me.txtCantComp.Text)) Select Case Val(Me.lblSubTotal.Text) Case 100, 101 : Desc = 2 Case 101.1 To 200 : Desc = 4 Case 200.1 To 500 : Desc = 6 Case Is > 500 : Desc = 10 Case Else : Desc = 0 End Select Me.lblDescP.Text = CStr(Desc) Me.lblDescS.Text = Format(Val(Me.lblSubTotal.Text) * Desc / 100, "###,##0.00") Me.lblTotal.Text = Format(Val(Me.lblSubTotal.Text) - Val(Me.lblDescS.Text), "###,##0.00") Me.lblSubTotal.Text = Format(Val(Me.lblSubTotal.Text), "###,##0.00")

btnNuevo (Evento Click) Call Limpia()

btnSalir (Evento Click) Me.Close()

77. En este programa se debe de ingresar el nombre del alumno, su nota nmero 1 y su nota nmero 2, al hacer clic en el botn obtener promedio se debe de visualizar: el promedio del alumno, una observacin que indica si el alumno esta aprobado o desaprobado, la cantidad de puntos que le faltan para aprobar, si esta desaprobado o los puntos para llegar a veinte en caso que este aprobado. Tambin se debe visualizar la nota cualitativa del alumno de acuerdo al promedio. Se debe de controlar que solo se ingresen notas entre 0 y 20.

SUBTOTAl Entre Entre Entre Entre Entre 0y5 5.1 y 10.4 10.5 y 14.4 14.5 y 17.4 17.5 y 20

DESCUENTO % Psimo Malo Regular Bueno Excelente

txtAlumno txtCurso txtN1 txtN2 lblPromedio btnOtro btnObtener btnSalir

lblObservacion lblPuntos

lblCualidad

Funcin Limpiar Esta funcin limpia los controles TextBox. Sub Limpiar() Me.txtAlumno.Text = "" Me.txtCurso.Text = "" Me.txtN1.Text = "" Me.txtN2.Text = "" Me.lblCualidad.Text = "" Me.lblObservacin.Text = "" Me.lblPromedio.Text = "" Me.lblPuntos.Text = "" Me.txtAlumno.Focus() End Sub

frmEjercicio77 (Evento Load) Limpiar()

txtN1 (Evento GotFocus) Me.txtN1.SelectionStart = 0 Me.txtN1.SelectionLength = Len(Me.txtN1.Text)

txtN2 (Evento GotFocus) Me.txtN2.SelectionStart = 0 Me.txtN2.SelectionLength = Len(Me.txtN2.Text)

txtN1 (Evento LostFocus) If Not IsNumeric(Me.txtN1.Text) Or Val(Me.txtN1.Text) < 0 Or Val(Me.txtN1.Text) > 20 Then MsgBox("Solo Debe Ingresar Notas Entre 0 y 20", MsgBoxStyle.Information, "Cuidado") Me.txtN1.Focus() End If

txtN2 (Evento LostFocus) If Not IsNumeric(Me.txtN2.Text) Or Val(Me.txtN2.Text) < 0 Or Val(Me.txtN2.Text) > 20 Then MsgBox("Solo Debe Ingresar Notas Entre 0 y 20", MsgBoxStyle.Information, "Cuidado") Me.txtN2.Focus() End If

btnObtener (Evento Click) Me.lblPromedio.Text = CStr((Val(Me.txtN1.Text) + Val(Me.txtN2.Text)) / 2) If Val(Me.lblPromedio.Text) >= 10.5 Then Me.lblObservacin.Text = "Aprobado(a)" Me.lblPuntos.Text = "Le faltan " + CStr(20 - Val(Me.lblPromedio.Text)) + " puntos para tener 20" Else Me.lblObservacin.Text = "Desaprobado(a)" Me.lblPuntos.Text = "Le faltan " + CStr(11 - Val(Me.lblPromedio.Text)) + " puntos para aprobar" End If Select Case Val(Me.lblPromedio.Text) Case 0 To 5 : Me.lblCualidad.Text = "Pismo" Case 5.1 To 10.4 : Me.lblCualidad.Text = "Malo" Case 10.5 To 14.4 : Me.lblCualidad.Text = "Regular" Case 14.5 To 17.4 : Me.lblCualidad.Text = "Bueno" Case 17.5 To 20 : Me.lblCualidad.Text = "Excelente" End Select

btnOtro (Evento Click) Limpiar()

btnSalir (Evento Click) Me.Close()

78. En esta aplicacin se debe de ingresar el nombre y el ao de nacimiento de una persona y se tiene que visualizar: su edad, una observacin que indica si es mayor o menor de edad, Si es menor de edad se debe mostrar cuantos aos le faltan para ser mayor de edad y si es mayor de edad se debe mostrar hace cuantos aos es mayor de edad. Tambin se debe mostrar la etapa de la persona teniendo en cuenta lo siguiente.

Edad 0 y 12 13 y 17 18 y 30 31 y 70 70 a mas

Etapa Nio Adolescente Joven Adulto Anciano

txtNombre txtAoNac lblEdad lblObservacion btnResultados

btnNuevo

btnSalir

lblAos

lblEtapa

Funcin Limpia Sub Limpia() Me.txtAoNac.Text = "" Me.txtNombre.Text = "" Me.lblAos.Text = "" Me.lblEdad.Text = "" Me.lblEtapa.Text = "" Me.lblObservacion.Text = "" Me.txtNombre.Focus() End Sub

frmEjercicio78 (Evento Load) Call Limpia()

btnNuevo (Evento Click) Call Limpia()

btnResultados (Evento Click) If Not IsNumeric(Me.txtAoNac.Text) Then MsgBox("Ingrese un ao correcto", MsgBoxStyle.Information, "Error") Me.txtAoNac.SelectionStart = 0 Me.txtAoNac.SelectionLength = Len(Me.txtAoNac.Text) Me.txtAoNac.Focus() Exit Sub End If Me.lblEdad.Text = CStr(Val(Year(Now())) - Val(Me.txtAoNac.Text)) If Val(Me.lblEdad.Text) < 18 Then Me.lblObservacion.Text = "Es Menor de Edad" Me.lblAos.Text = "Le Falta " + CStr(18 - Val(Me.lblEdad.Text)) + " aos para ser mayor de edad" Else Me.lblObservacion.Text = "Es Mayor de Edad" Me.lblAos.Text = "Es mayor de edad " + CStr(Val(Me.lblEdad.Text) - 18) + " aos" End If Select Case Val(Me.lblEdad.Text) Case 0 To 12 : Me.lblEtapa.Text = "Nio" Case 13 To 17 : Me.lblEtapa.Text = "Adolescente" Case 18 To 30 : Me.lblEtapa.Text = "Joven" Case 31 To 70 : Me.lblEtapa.Text = "Adulto" Case Is > 70 : Me.lblEtapa.Text = "Anciano" End Select

btnSalir (Evento Click) Me.Close()

79. Esta aplicacin es un ejemplo del uso de las funciones de cadena que ya hemos visto el concepto.

txtFrase

lblLongitud lblPrimero lblUltimo lblSegSex lblPosA

btnMuestra

btnNuevo

btnSalir

lblMinusculas lblMayusculas lblSoloPrim

Funcin Limpia Sub Limpia() Me.txtFrase.Text = "" Me.lblLongitud.Text = "" Me.lblMayusculas.Text = "" Me.lblMinusculas.Text = "" Me.lblPosA.Text = "" Me.lblPrimero.Text = "" Me.lblSegSex.Text = "" Me.lblSoloPrim.Text = "" Me.lblUltimo.Text = "" Me.txtFrase.Focus() End Sub

frmEjercicio79 (Evento Load) Call Limpia()

btnNuevo (Evento Click) Call Limpia()

btnMuestra (Evento Click) Me.lblLongitud.Text = Len(Trim(Me.txtFrase.Text)) Me.lblPrimero.Text = Microsoft.VisualBasic.Left(Trim(Me.txtFrase.Text), 1) Me.lblUltimo.Text = Microsoft.VisualBasic.Right(Trim(Me.txtFrase.Text), 1) Me.lblSegSex.Text = Microsoft.VisualBasic.Mid(Trim(Me.txtFrase.Text), 2, 5) Me.lblPosA.Text = InStr(Me.txtFrase.Text, "a") Me.lblMinusculas.Text = LCase(Me.txtFrase.Text) Me.lblMayusculas.Text = UCase(Me.txtFrase.Text) Me.lblSoloPrim.Text = StrConv(Me.txtFrase.Text, 3)

btnSalir (Evento Click) Me.Close()

UTILIZANDO FUNCIONES DE FECHA Y PUBLICAS Y TAMBIEN MODULOS, CLASES Y NAMESPACE


Funciones Pblicas en un Mdulo
80. En esta aplicacin se debe de ingresar el nombre y la fecha de nacimiento de una persona y se debe de visualizar por separado: el da, mes, ao, nmero del da de la semana, la fecha en letras y la fecha y hora actual. Utilizando dos funciones pblicas codificadas en un modulo.

txtNombre txtFecNac lblDia lblMes btnSalir lblAo lblDiaSem

btnOk

lblFecIng

lblFecAct

Primero agregaremos un modulo llamado mdFecha y codificaremos lo siguiente:

Module mdFecha Public Function Dia(ByVal ndia As Integer) As String Dia = Choose(ndia, "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado") End Function Public Function Mes(ByVal nmes As Integer) As String Select Case nmes Case 1 : Mes = "Enero" Case 2 : Mes = "Febrero" Case 3 : Mes = "Marzo" Case 4 : Mes = "Abril" Case 5 : Mes = "Mayo" Case 6 : Mes = "Junio" Case 7 : Mes = "Julio" Case 8 : Mes = "Agosto" Case 9 : Mes = "Setiembre" Case 10 : Mes = "Octubre" Case 11 : Mes = "Noviembre" Case 12 : Mes = "Diciembre" End Select End Function End Module

La funcin da nos hallara el da de la semana segn el nmero de da enviado a esta funcin, igualmente la funcin mes.

btnOk (Evento Click) If Not IsDate(Me.txtFecNac.Text) Then MsgBox("Ingrese una Fecha Correcta", MsgBoxStyle.Information, "Error") Me.txtFecNac.SelectionStart = 0 Me.txtFecNac.SelectionLength = Len(Me.txtFecNac.Text) Me.txtFecNac.Focus() Exit Sub End If Me.lblAo.Text = Year(CDate(Me.txtFecNac.Text)) Me.lblDia.Text = Microsoft.VisualBasic.Day(CDate(Me.txtFecNac.Text)) Me.lblDiaSem.Text = Microsoft.VisualBasic.Weekday(CDate(Me.txtFecNac.Text)) Me.lblMes.Text = Microsoft.VisualBasic.Month(CDate(Me.txtFecNac.Text)) Me.lblFecIng.Text = Dia(Val(Me.lblDiaSem.Text)) + ", " + Me.lblDia.Text + " de " + Mes(Val(Me.lblMes.Text)) + " de " + Me.lblAo.Text

btnSalir (Evento Click) Me.Close()

frmEjercicio80 (Evento Load) Me.lblFecAct.Text = "Hoy es " + CStr(Now)

Clases y NameSpace en un Mdulo


81. En esta aplicacin se debe de ingresar la fecha de nacimiento de una persona y se debe de visualizar por separado: la estacin de la fecha en que naci, su signo zodiacal la semana del ao en que naci, los meses transcurridos desde el ao que naci y la fecha actual despus de tres semanas. Para esto crearemos un NameSpace que contendr la clase y las funciones para hallar la estacin y el signo zodiacal.

txtNombre txtFecNac lblDia lblMes btnSalir lblAo lblDiaSem

btnOk

lblFecIng

lblFecAct

Primero agregaremos un modulo llamado Informacin y codificaremos lo siguiente: Primero borramos todo el cdigo que aparece y cambiamos por lo siguiente:

Namespace Informacion Public Class FecNac Public Function Estacion(ByVal dia As Integer, ByVal mes As Integer) As String If (dia >= 23 And mes = 12) Or mes = 1 Or mes = 2 Or (dia <= 22 And mes = 3) Then Estacion = "Verano" If (dia >= 23 And mes = 3) Or mes = 4 Or mes = 5 Or (dia <= 22 And mes = 6) Then Estacion = "Otoo" If (dia >= 23 And mes = 6) Or mes = 7 Or mes = 8 Or (dia <= 22 And mes = 9) Then Estacion = "Invierno" If (dia >= 23 And mes = 9) Or mes = 10 Or mes = 11 Or (dia <= 22 And mes = 12) Then Estacion = "Primavera" End Function Public Function SignoZodiacal(ByVal dia As Integer, ByVal mes As Integer) As String Select Case mes Case 1 If dia < 21 Then SignoZodiacal = "Capricornio" Else SignoZodiacal = "Acuario" End If Case 2 If dia < 20 Then SignoZodiacal = "Acuario" Else SignoZodiacal = "Piscis" End If Case 3 If dia < 21 Then SignoZodiacal = "Piscis" Else SignoZodiacal = "Aries" End If Case 4 If dia < 21 Then SignoZodiacal = "Aries" Else SignoZodiacal = "Tauro" End If Case 5 If dia < 21 Then SignoZodiacal = "Tauro" Else SignoZodiacal = "Geminis" End If Case 6

If dia < 22 Then SignoZodiacal Else SignoZodiacal End If Case 7 If dia < 23 Then SignoZodiacal Else SignoZodiacal End If Case 8 If dia < 23 Then SignoZodiacal Else SignoZodiacal End If Case 9 If dia < 23 Then SignoZodiacal Else SignoZodiacal End If Case 10 If dia < 23 Then SignoZodiacal Else SignoZodiacal End If Case 11 If dia < 22 Then SignoZodiacal Else SignoZodiacal End If Case 12 If dia < 22 Then SignoZodiacal Else SignoZodiacal End If End Select End Function End Class End Namespace

= "Geminis" = "Cancer"

= "Cancer" = "Leo"

= "Leo" = "Virgo"

= "Virgo" = "Libra"

= "Libra" = "Escorpio"

= "Escorpio" = "Sagitario"

= "Sagitario" = "Capricornio"

La funcin Estacion nos hallara la estacin del ao en que naci, igualmente la funcin SignoZodiacal que nos hallara el signo zodiacal correspondiente.

Al principio de la ventana de codificacin del formulario, escribiremos el siguiente cdigo que nos permite importar el espacio de nombre que hemos creado. Para que lo importamos?, lo importamos para poder utilizar sus clases, funciones que hemos creado. Imports Ejercicio81.Informacion

Funcin Limpia Sub Limpia() Me.txtFecNac.Text = "" Me.lblEstacion.Text = "" Me.lblFecAct.Text = "" Me.lblMesesTrans.Text = "" Me.lblNumSem.Text = "" Me.lblSigno.Text = "" Me.txtFecNac.Focus() End Sub

frmEjercicio81 (Evento Load) Call Limpia() Me.Text = "La Fecha Actual es: " + CStr(Format(Now, "dd / MMMM / yyyy"))

btnOk (Evento Click) Dim ndia, nmes As Integer Dim Estacion, Signo As New Informacion.FecNac If Not IsDate(Me.txtFecNac.Text) Then MsgBox("Ingrese una Fecha Correcta", MsgBoxStyle.Information, "Error") Exit Sub End If ndia = Microsoft.VisualBasic.Day(CDate(Me.txtFecNac.Text)) nmes = Microsoft.VisualBasic.Month(CDate(Me.txtFecNac.Text)) Me.lblEstacion.Text = Estacion.Estacion(ndia, nmes) Me.lblSigno.Text = Signo.SignoZodiacal(ndia, nmes) Me.lblNumSem.Text = Microsoft.VisualBasic.DatePart(DateInterval.WeekOfYear, CDate(Me.txtFecNac.Text)) Me.lblMesesTrans.Text = Microsoft.VisualBasic.DateDiff(DateInterval.Month, CDate(Me.txtFecNac.Text), Now) Me.lblFecAct.Text = Microsoft.VisualBasic.DateAdd(DateInterval.WeekOfYear, 3, Now)

btnSalir (Evento Click) Me.Close()

82. Esta aplicacin nos muestra un ejemplo de la utilidad de las funciones de tipo numricas.

txtNumero

lblEntero lblDecimal lblValAbs lblRaiz lblSigno lblValOct lblValHex btnMuestra

btnNuevo btnSalir

Funcin Limpia Sub Limpia() Me.txtNumero.Text = "" Me.lblDecimal.Text = "" Me.lblEntero.Text = "" Me.lblRaiz.Text = "" Me.lblSigno.Text = "" Me.lblValAbs.Text = "" Me.lblValHex.Text = "" Me.lblValOct.Text = "" Me.txtNumero.Focus() End Sub

frmEjercicio82 (Evento Load) Call Limpia()

btnOk (Evento Click) If Not IsNumeric(Me.txtNumero.Text) Then MsgBox("Ingrese un Nmero", MsgBoxStyle.Information, "Error") Me.txtNumero.Text = "" Me.txtNumero.Focus() Exit Sub End If Me.lblEntero.Text = CStr(CInt(Val(Me.txtNumero.Text))) Me.lblDecimal.Text = CStr(Val(Me.txtNumero.Text) - Val(Me.lblEntero.Text)) Me.lblValAbs.Text = CStr(Math.Abs(Val(Me.txtNumero.Text))) If Val(Me.txtNumero.Text) > 0 Then Me.lblRaiz.Text = CStr(Math.Sqrt(Val(Me.txtNumero.Text))) Else Me.lblRaiz.Text = "No Existe" End If Me.lblSigno.Text = CStr(Math.Sign(Val(Me.txtNumero.Text))) Me.lblValOct.Text = CStr(Microsoft.VisualBasic.Oct(Val(Me.txtNumero.Text))) Me.lblValHex.Text = CStr(Microsoft.VisualBasic.Hex(Val(Me.txtNumero.Text)))

btnSalir (Evento Click) Me.Close()

btnNuevo (Evento Click) Call Limpia()

FUNCION SHELL

La funcin Shell se utiliza para ejecutar programas (archivos ejecutables como *.exe, *.com etc.) desde el visual Basic. Su sintaxis es la siguiente: Shell("Ruta y Nombre del programa", Estilo de Presentacin)

83. Esta aplicacin nos permitir ejecutar algunos programas desde el visual Basic.

btnCalc

btnWord

btnExcel

btnExplorador

btnDOS

btnFinalizar

btnCacl (Evento Click) Shell("C:\Windows\System32\calc.exe", AppWinStyle.NormalFocus)

btnWord (Evento Click) Shell("C:\Archivos de programa\Microsoft Office\OFFICE11\winword.exe", AppWinStyle.MaximizedFocus)

btnExcel (Evento Click) Shell("C:\Archivos de programa\Microsoft Office\OFFICE11\excel.exe", AppWinStyle.MaximizedFocus)

btnExplorador (Evento Click) Shell("C:\WINDOWS\explorer.exe", AppWinStyle.MaximizedFocus)

btnDOS (Evento Click) Shell("C:\WINDOWS\system32\cmd.exe", AppWinStyle.NormalFocus)

btnFinalizar (Evento Click) If MsgBox("Deseas salir de la aplicacin?", MsgBoxStyle.YesNo, "Uso de Shell") = MsgBoxResult.Yes Then Me.Close()