Sei sulla pagina 1di 197

Crando A plicaciones para Windows

VISUAL
STUDIO.NET
Manual del
Participante

1 de 197
Contenido del Curso

Modulo 1 4
Visual Studio .NET 4

Introducción a Visual Studio .NET 4

Definiendo Visual Studio .NET 4

Herramienta Rápida de Desarrollo (RAD) 5

Lenguajes .NET 6

Neutralidad de Lenguajes .NET 6

Lenguajes en .NET 7

Entorno Integrado de Desarrollo (IDE) 8

Descripción del IDE Compartido 8

Administración de Ventanas 12

Diseñadores 12

Herramientas de Datos 13
Modulo 2 15
Visual Basic .NET 15

Introducción 15

Características del Lenguaje 16

Tipos de Datos 16

Variables 17

Arrays 18

Procedimientos 20

Manejo de Threads 21

Implementación de Threads 21

Estado de un Thread 22

2 de 197
Depuración 23

Barras de Depuración 23

Ventanas de Depuración 26

Control de Excepciones 30

Tipos de Errores 30

Formas de Controlar Excepciones 31

Opciones de Control de Excepciones 33

Laboratorio 3: 34

Ejercicio 1: Reconociendo VB .NET y Trabajando con el Lenguaje 34

Ejercicio 2: Implementando Multi Thread y Control de Excepciones 38


Módulo 3 41
Creando Aplicaciones para Windows 41

Usando Windows Forms 41

Introducción 41

Objeto Formulario 42

Uso del ToolBox 46

Usando Controles para Windows Forms 47

Controles Label, TextBox y Button 47

Controles GroupBox, RadioButton y CheckBox 51

Controles ListBox, CheckedListBox y ComboBox 55

Interfaces 60

Introducción 60

Creando Aplicaciones MDI 60

Controles TreeView y ListView 61

Añadiendo Menús, Diálogos y Barras 65

3 de 197
Menús 65

Diálogos 66

Barras 70

Laboratorio 3: 72

Ejercicio 1: Usando Controles para Windows 72

Ejercicio 2: Creando aplicaciones MDI con Menús, Diálogos y Barras 79


Módulo 4 87
Creando Componentes .NET 87

Elementos de una Clase (Miembros) 88

Clase 89

Constantes, Campos y Enumeraciones 91

Propiedades 94

Métodos 96

Eventos 98

Constructores y Destructores 100

Creando una Librería de Clases 102

Eligiendo el Tipo de Aplicación 102

Añadiendo una Clase 103

Creando Propiedades, Métodos, Eventos 105

Probando y Usando la Librería de Clases 106

Herencia de Clases 109

Introducción a la Herencia de Clases 109

Implementando Herencia en una Clase 110

Sentencias para trabajar con Herencia 112

Polimorfismo 114

4 de 197
Laboratorio 4: 115

Ejercicio 1: Creando y Usando una Librería de Clases 115

Ejercicio 2: Trabajando con Herencia de Clases 119

5 de 197
Modulo 1
Visual Studio .NET
Introducción a Visual Studio .NET

Definiendo Visual Studio .NET

Vis ual Studio .NET es la Herramienta Rápida de Des arrollo (RAD) de Micros oft para la
s iguiente generación de Internet que s on los Servicios Web XML. Es ta herramienta
permite la creación de aplicaciones us ando el Marco .NET, es decir us ando el CLR, la
Librería de Clas es , ADO .NET, ASP .NET, etc.

Es un s oftware que brinda las herramientas neces arias para crear, dis tribuir,
adminis trar y dar mantenimiento a aplicaciones Web dis tribuidas que us an S ervicios
Web XML, todo es to con una gran facilidad, rapidez y bajo cos to.

Se puede crear aplicaciones Web directamente us ando el Framework .NET y algún


programa editor, por ejemplo el Bloc de Notas , pero el tiempo que llevaría el des arrollo
no jus tificaría el ahorro de cos tos , en cambio, s i s e utiliza una herramienta como
Vis ual Studio .NET el tiempo de des arrollo s e reduciría enormemente.

Vis ual Studio .NET permite también la integración y el us o cruzado de lenguajes de


programación: Vis ual Bas ic .NET, Vis ual C# .NET, Vis ual C++ .NET y JScript .NET

A diferencia de la vers ión anterior no exis te Vis ual Interdev, ni Vis ual J++, además
Vis ual Foxpro .NET no comparte las caracterís ticas unificadas del Marco .NET

Figura 1.1: Estructura del Marco .NET y Visual Studio

6 de 197
Herramienta Rápida de Desarrollo (RAD)

La principal ventaja de Vis ual Studio .NET es realizar la creación de aplicaciones de


forma fácil y rápida, tan s olo con arras trar y s oltar objetos s e pueden crear des de
aplicaciones Windows has ta Servicios Web XML.

Entre algunas de las ventajas del s oporte RAD de Vis ual Studio tenemos :

Creación de Páginas Web mediante Formularios Web

Vis ual Studio .NET incluye un dis eñador de páginas Web HTML y ASP .NET bas ado en
formularios Web, el dis eñador permite arras trar controles , clas es de datos , y otros
objetos y configurar s us propiedades como s i fues e un formulario de una aplicación
para Windows .

Creación de Servicios Web XML

Para crear Servicios Web XML, Vis ual S tudio .NET incluye una plantilla con Servicios
Web de ejemplo, los cuales puedes modificar y pers onalizar a tu medida, eligiendo
el lenguaje que des eas , que puede s er Vis ual Bas ic .NET, Vis ual C# .NET o Vis ual
C++ .NET

7 de 197
Acceso a Servicios Web XML

Una vez creado los Servicios Web XML deben us ars e en otras aplicaciones del
negocio, para ello Vis ual Studio .NET cuenta con el Explorador de Servidores
(Server Explorer) que permite ver los Servicios Web publicados y us arlos con s olo
un arras tre. También podemos us ar un Servicio Web haciendo referencia des de un
proyecto mediante la opción “Add Web Referente” del menú “Project”.

Creación de Componentes .NET

Crear componentes o controles de us uario es tan s imple como crear un formulario,


ya que us ando la herencia s e puede pas ar todas las caracterís ticas de un objeto a
otro, es to es ta pres ente en todos los objetos creados en Vis ual Studio .NET, s ean
vis uales o no.

Creación de archivos XML

Con el dis eñador de XML, crear un archivo XML es mas fácil que nunca, ya que s e
mues tra de colores el código y s e auto completan los Tags que uno va es cribiendo.
Es te maneja 3 vis tas : XML, es quemas y datos .

Exis ten mas caracterís ticas RAD en Vis ual Studio .NET, las cuales trataremos mas
adelante.

Lenguajes .NET

Neutralidad de Lenguajes .NET

El Marco .NET es neutral con res pecto al lenguaje y admite prácticamente cualquiera de
ellos . Es to trae cons igo los s iguientes beneficios para el des arrollador:

8 de 197
Código reusable y compartido

Antes no exis tía una integración total del equipo de des arrollo cuando cada grupo
us aba herramientas diferentes como Vis ual Bas ic 6, Vis ual C++ 6 o Vis ual J++ 6,
en cambio ahora, el código es crito en cualquier lenguaje puede s er us ado des de
otro, ya que todas s on clas es .NET.

Acceso a APIs igual para todos los lenguajes

Actualmente, todos los lenguajes del Marco .NET comparten las mis mas clas es o
APIS del s is tema, antes cada lenguaje accedía a las APIs de s u manera, de ellos
C++ era el mas fuerte, hoy en día con .NET no exis ten diferencias entre potencia
del lenguaje.

Herencia cruzada entre lenguajes

Se puede crear una clas e en un lenguaje y heredars e des de otra clas e es crita en
diferente lenguaje .NET, lo que permite la reutilización total del código por parte de
diferentes des arrolladores .

Manejo de errores cruzado entre lenguajes

Se puede controlar errores des de una clas e por mas que el error ocurra en un
objeto creado en otro lenguaje dis tinto al de la clas e que controla el error, también
s e puede realizar el s eguimiento de una aplicación aunque incluya llamadas a otros
lenguajes , etc.

Figura 1.2: Relación cruzada entre Lenguajes .NET

Lenguajes en .NET

9 de 197
En Vis ual Studio .NET vienen los s iguientes Lenguajes de Programación:

Vis ual Bas ic .NET

Vis ual C# .NET

Vis ual C++ .NET

Vis ual Foxpro .NET (No adminis trado por el Marco .NET)

Vis ual JScript .NET

Además de es tos lenguajes , el Marco .NET s oporta otros lenguajes , entre los cuales
des tacan:

COBOL: http://www.adtools.com/info/whitepaper/net.html/

Pas cal: http://www2.fit.qut.edu.au/CompSci/PLAS//ComponentPascal/

SmalTalk: http://www.qks.com/

Eiffel: http://dotnet.eiffel.com/

ML: http://research.microsoft.com/Projects/SML.NET/index.htm

APL: http://www.dyadic.com/

Oberon: http://www.oberon.ethz.ch/lightning/

Scheme: http://rover.cs.nwu.edu/~scheme/

Mercury: http://www.cs.mu.oz.au/research/mercury/

Python: http://aspn.activestate.com/ASPN/NET/index

Has kell: http://haskell.cs.yale.edu/ghc/

Mondrian: http://www.mondrian-script.org

Se ha dado el nombre de algunos lenguajes junto con s us res pectivas páginas Web
donde s e puede encontrar información s obre es tos e inclus ive bajars e el compilador

10 de 197
del lenguaje compatible con .NET.

Figura 1.3: Listado de Lenguajes .NET

Entorno Integrado de Desarrollo (IDE)

Descripción del IDE Compartido

Vis ual Studio .NET tiene un Entorno Integrado de Des arrollo único o compartido para
crear aplicaciones us ando cualquiera de los Lenguajes de Programación, que pueden
s er Vis ual Bas ic, Vis ual C++ o C#.

En es ta nueva vers ión de Vis ual Studio, Vis ual Foxpro mantiene s u propio IDE (s imilar
al de la Vers ión 6), además Vis ual Interdev ya no es parte de Vis ual Studio, ya que las
herramientas de des arrollo para Web es tán dis ponibles a través de los Web Forms
dis ponibles des de el IDE común.

Al iniciar Vis ual Studio .NET aparece (por defecto) la Página de Inicio, tal como s e
mues tra en la Figura 1.4

Figura 1.4: Ventana de Inicio del Visual Studio .NET

11 de 197
Des de es ta página de inicio podemos elegir la opción “Get Started” para crear un
nuevo proyecto o abrir uno exis tente o reportar un error del IDE de Vis ual S tudio, s i
elegimos “New Project” s e pres entará la Ventana que s e mues tra en la Figura 2.5

12 de 197
Figura 1.5: Ventana de Crear un Nuevo Proyecto

Es ta ventana es tá dividida 2 s ecciones : en el lado izquierdo s e encuentran los tipos de


proyectos que s e pueden realizar (Vis ual Bas ic, Vis ual C#, Vis ual C++, etc) y en el lado
derecho s e encuentran las plantillas o tipos de aplicaciones , que varían de acuerdo al
tipo de proyecto.

Si s e elige Vis ual Bas ic o Vis ual C#, las plantillas s e pueden dividir en tres : para
Windows , para Web (Aplicaciones , Servicios , Librería de Clas es , Librería de Controles ,
Proyecto Vacío) y de Cons ola.

En el cas o de elegir como tipo de proyecto “Vis ual Bas ic” y como plantilla “Windows
Application” hay que s eleccionar la ubicación del nuevo proyecto y es cribir el nombre
de es te, el cual creará una carpeta con el mis mo nombre en el lugar s eleccionado. A
continuación la figura 1.6 mues tra el IDE compartido de Vis ual Studio .NET en el cas o
de elegir una Aplicación para Windows .

13 de 197
Figura 1.6: IDE Compartido de Visual Studio .NET

Entre las partes del nuevo IDE de Vis ual Studio


.NET tenemos :

1. Menu Bar

2. ToolBars

3. Server Explorer Window (Ctrl + Alt + S)

4. ToolBox (Ctrl + Alt + X)

5. Output Window (Ctrl + Alt + O)

6. Status Bar

7. Windows Form Des igner

8. Solution Explorer Window (Ctrl + R)

14 de 197
9. Properties Window (F4)

10. Search Window (Ctrl + Alt + F3)

11. Dynamic Help Window (Ctrl + F1)

Exis ten nuevas ventanas en Vis ual Studio .NET entre las cuales tenemos :

Clas s View (Ctrl + S hift + C)

Res ource View (Ctrl + Shift + E)

Macro Explorer (Alt + F8)

Document Outline (Ctrl Alt + T)

Tas k Lis t (Ctrl + Alt + K)

Command Window (Ctrl + Alt + A)

Find Symbol Res ults (Ctrl +Alt + Y)

Nota: Para mos trar u ocultar cualquier ventana del IDE elegir el menú “View”

Administración de Ventanas

El manejo de ventanas en Vis ual Studio .NET es más s imple y rápido pudiendo acceder
a cualquier elemento de manera fácil, debido a las nuevas caracterís ticas de
Adminis tración de ventanas , tales como:

Auto Ocultar: Es ta caracterís tica es nueva en Vis ual Studio .NET y permite
ocultar una ventana permitiendo liberar es pacio en el IDE, para mos trar
nuevamente la ventana s olo hay que ubicar el mous e cerca del nombre de la
ventana que aparece en una ficha.

Ventanas Acoplables: Al igual que Vis ual Bas ic 6, es ta nueva vers ión permite
acoplar ventanas las cuales es tarán fijas en el IDE. Podemos elegir s i una
ventana s e va a “Auto Ocultar” o s i s e va a “Acoplar”. Al acoplar la ventana
tendremos la pos ibilidad de ver s iempre s u contenido.

15 de 197
Fichas de Documentos: En la vers ión anterior de Vis ual Studio el trabajo con
varios documentos era tedios o por que para acceder a un documento abierto (por
ejemplo un módulo de formulario) había que hacerlo mediante el menú “Window”
o dando clic en el botón “View Code” o doble clic s obre el nombre del objeto.
Ahora el acces o es muy rápido a través de las fichas que hay en la parte s uperior
del Editor.

Navegación a través del IDE: Podemos navegar a través de los documentos


vis itados us ando la barra Web, pudiendo ir hacia “Atrás ”, “Adelante”, “Detener”,
“Actualizar”, “Ir al inicio” como s i s e tratas e de un Brows er y s i navegáramos a
través de páginas Web, lo que facilita la bús queda de una pagina ya abierta.

Ventana de Ayuda Rápida: Una de las caracterís ticas mas importantes de


Vis ual Studio .NET es la “ayuda inteligente” o “ayuda rápida” que permite mos trar
en una ventana todos los tópicos relacionados a donde s e encuentre el curs or (s i
es ta en el editor) o al objeto s eleccionado (s i es tamos en el dis eñador de
formulario), por ejemplo, s i es tamos en el editor es cribiendo una función
aparecerán los tópicos relacionados a és ta, s i nos encontramos s eleccionando un
control, aparecerán los temas referentes a és te.

Todas es tas nuevas caracterís ticas hacen que el trabajo del des arrollador s ea más
productivo, centrándos e en la lógica de la aplicación y no en el mantenimiento de és ta
ya que es más fácil al utilizar las nuevas caracterís ticas de Adminis tración de
Ventanas , anteriormente comentadas .

Diseñadores

Para realizar la cons trucción de aplicaciones o creación de componentes o s ervicios


dis ponemos de Dis eñadores que facilitan la labor de cons trucción de interfaces ,
creación de s entencias , etc.

La mayoría de dis eñadores s e habilitan al elegir una plantilla de Vis ual Studio .NET y
cas i todos generan código al dis eñar controles s obre el contenedor res pectivo;
caracterís tica totalmente dis tinta a la forma de trabajo en Vis ual Bas ic 6, que ocultaba
el código generado por el dis eñador.

16 de 197
Entre los dis eñadores que trae Vis ual S tudio .NET tenemos :

Windows Form Designer: Se mues tra al elegir cualquiera de dos plantillas :


“Windows Application” o “Windows Control Library”, habilitando en el Toolbox los
controles para Windows que s erán us ados para cons truir la interfas e de la
aplicación arras trando dichos controles hacia el formulario o control de us uario.

Web Form Designer: Se mues tra al elegir la plantilla “Web Application”


habilitando en el Toolbox los controles para Web y los controles HTML que s erán
us ados para cons truir la página Web que correrá en el s ervidor IIS (archivo as px)
arras trando dichos controles hacia el formulario Web.

Component Designer: Es te dis eñador s e mues tra al elegir una de dos


plantillas : “Clas s Library” o “Windows Service” y también trabaja con los
controles para windows , creando una interfas e reus able des de otra aplicación.

Web Service Designer: Sirve para dis eñar s ervicios Web y es mos trado al elegir
una plantilla “Web Service”, también trabaja con los controles para Windows ,
componentes , etc.

Exis ten más dis eñadores , pero que lo trataremos en la categoría de herramientas de
datos , debido al tipo de trabajo que realizan con datos , el cual s e trata como tema
s iguiente.

Herramientas de Datos

Si s e quiere realizar un trabajo rápido con datos , tal como modificar la es tructura de la
Bas e de Datos , crear tablas , cons ultas , procedimientos almacenados , etc., exis ten
herramientas que permiten realizar es ta labor reduciendo enormemente el proces o de
des arrollo en el cas o de hacers e por otros medios .

Entre las principales herramientas que trabajan con datos tenemos :

17 de 197
Server Explorer: Sin duda es una de las principales herramientas de Vis ual
Studio .NET y no s olo para acceder a datos s ino para mos trar y adminis trar los
diferentes s ervidores o recurs os del s is tema, tales como Bas e de Datos ,
Servicios Web, Aplicaciones COM+, etc. Con s olo arras trar el objeto és te puede
s er us ado en una aplicación. También s e tratará con mayor detalle en el módulo
de acces o a datos .

DataAdapter Wizard: Es un As is tente que permite crear un DataAdapter que es


un Comando (Select, Ins ert, Update, Delete) con el cual s e podrá generar un
conjunto de regis tros o Datas et. La mis ma función puede s er cubierta por el
Server Explorer con s olo arras trar los campos hacia el formulario.

Query Designer: Es un Dis eñador que permite crear Cons ultas SQL de manera
s encilla arras trando tablas o cons ultas s obre és te y eligiendo los campos que s e
verán en la cons ulta de datos , también s e puede realizar filtros o es pecificar
criterios de s elección. Además no s olo s e pueden cons truir cons ultas Select s ino
también s e pueden crear cons ultas Ins ert, Update o Delete, etc.

DataBase Project: Es un tipo de plantilla que s irve para trabajar con una Bas e
de Datos , para lo cual debe exis tir una conexión a un origen de datos , es te tipo
de proyecto da la pos ibilidad de crear y modificar s cripts de creación de tablas ,
cons ultas , vis tas , des encadenantes , procedimientos almacenados , etc.

Editor de Script: Uno de las principales herramientas para trabajar con bas e de
datos remotas como SQL Server, Oracle, etc, es utilizar el editor de Scripts que
permite crear tablas , cons ultas , vis tas , etc. Mos trando con colores las s entencias
o palabras res ervadas del lenguaje Trans act-SQL.

Depurador de Procedimientos Almacenados: Vis ual Studio .NET incorpora un


Depurador de Store Procedure que puede realizar s eguimientos pas o a pas o por
línea de código, por s entencia o por ins trucción, además crea puntos de
interrupción, permitiendo un mayor control y s eguimiento del código en cas o de
errores .

Todas es tas herramientas mencionadas , s on nuevas en Vis ual Studio .NET, ha


excepción del Query Builder que es el mis mo de la vers ión anterior de Vis ual Studio.

Como s e habrá dado cuenta muchas herramientas de acces o a datos de Vis ual Bas ic 6

18 de 197
han s ido eliminadas , tales como: Data Environment, Data View, Data Report, y otras
más , pero en s u reemplazo exis ten las que ya hemos mencionado.

19 de 197
Modulo 2
Visual Basic .NET
Introducción

En los módulos anteriores hemos tratado el Marco .NET y Vis ual Studio .NET, ahora
trataremos Vis ual Bas ic .NET, pero hay que remarcar que las caracterís ticas del
lenguaje dependen del Marco .NET y las herramientas s on compartidas por el IDE de
Vis ual Studio .NET

Vis ual Bas ic .NET es la vers ión 7 de és ta popular herramienta, és ta última vers ión
tiene cambios radicales , tanto en s u concepción (.NET), en el lenguaje, las
herramientas us adas , etc. Entre las nuevas caracterís ticas de Vis ual Bas ic .NET
tenemos :

Dos tipos de des arrollos bien diferenciados :

Aplicaciones para Windows

Aplicaciones para Internet

Acces o a Datos us ando ADO .NET, el cual permite trabajar con DataS ets
des conectados

Nuevo Depurador que permite realizar s eguimiento de código es crito en


diferentes lenguajes .NET

Creación y us o de XML para intercambio de datos entre aplicaciones

Lenguaje Orientado a Objetos , con s oporte de Herencia múltiple, y Polimorfis mo a

20 de 197
través de la s obrecarga de propiedades , métodos y funciones con el mis mo
nombre

Control de errores o excepciones en forma es tructurada (Try..Catch..Finally)

Soporte de multithread para que la aplicación pueda ejecutar múltiples tareas en


forma independiente.

Us o de NameSpaces para referirs e a una clas e que s e va a us ar en la aplicación.


Los As s emblies reemplazan a la Librería de Tipos , en un As s emblie pueden exis tir
uno o más NameSpaces

Rees tructuración en los Tipos de Datos ; exis ten nuevos tipos de datos y s e han
modificado y eliminado ciertos tipos de datos .

Cambio en el Lenguaje: nuevas forma de declarar variables , convers ión explícita


de tipos de datos (no exis te convers ión forzos a), no exis ten procedimientos s ino
funciones , etc.

Características del Lenguaje

Tipos de Datos

Tipo Estructura Tipo Tamaño Rango de Valores

V. Basic .NET Runtime Almac.


Boolean Sys tem.Boolean 4 bytes True o Fals e
Byte Sys tem.Byte 1 byte 0 to 255 (s in s igno)
Char Sys tem.Char 2 bytes 0 to 65535 (s in s igno)
Date Sys tem.DateTime 8 bytes Enero 1, 1 CE has ta Diciembre 31, 9999
Decimal Sys tem.Decimal 12 bytes +/-79,228,162,514,264,337,593,543,950,335
s in punto decimal;
+/-7.9228162514264337593543950335 con
28 pos iciones a la derecha del decimal;
número mas corto (no 0) es
+/-0.0000000000000000000000000001

21 de 197
Double Sys tem.Double 8 bytes -1.79769313486231E308 has ta
(doble- -4.94065645841247E-324 para valores
precis ión negativos ; 4.94065645841247E-324 has ta
punto- 1.79769313486232E308 para valores
flotante) pos itivos
Integer Sys tem.Int32 4 bytes -2,147,483,648 to 2,147,483,647
Long Sys tem.Int64 8 bytes -9,223,372,036,854,775,808 has ta
(Entero 9,223,372,036,854,775,807
largo)
Object Sys tem.Object 4 bytes Cualquier tipo de dato
(clas s )
Short Sys tem.Int16 2 bytes -32,768 to 32,767
Single Sys tem.Single 4 bytes -3.402823E38 has ta -1.401298E-45 para
(s imple valores negativos ; 1.401298E-45 has ta
precis ión 3.402823E38 para valores pos itivos
punto-
flotante)
String Sys tem.String 10 bytes 0 has ta aproximadamente 2 billones de
(tamaño- (clas s ) + (2 * caracteres Unicode
variable) tamaño
cadena)
Us er-Defined (heredado des de Suma de Cada miembro de la es tructura tiene un
Type Sys tem.ValueType) tamaños rango determinado, es decir pueden tener
(es tructura) de s us s us propios tipos de datos dis tintos unos
miembros de otros

Notas: Se ha eliminado el tipo de dato Variant y es reemplazado por Object, también el


dato Currency ahora es Decimal y el Type ahora es S tructure. Además no exis ten
String de tamaño fijo, s ino que todos s on dinámicos .

Variables

Una variable es un dato temporal en memoria que tiene un nombre, un tipo de dato, un
tiempo de vida y un alcance, los cuales lo dan la forma como s e declare és ta.

Una variable debe cumplir con las s iguientes reglas :

Debe iniciar con un carácter alfabético.

Debería contener s olo caracteres alfabéticos , dígitos y carácter de s ubrayado.

El nombre no debe exceder a 255 caracteres , etc.

22 de 197
Declaración de Variables

A diferencia de Vis ual Bas ic 6, en VB .NET s e pueden declarar varias variables en una
s ola ins trucción y además s e puede as ignar directamente s us valores . Otra
obs ervación es que es neces ario definir el tipo de declaración y el tipo de dato (antes
s i no s e hacia s e as umía un tipo de declaración y un tipo de dato variant, que ahora no
exis te).

Sintaxis: <Tipo de Declaración> <Variable(s )> As <Tipo de Dato>[=<Valor>]

Exis ten varios tipos de declaración que detallamos a continuación en la s iguiente tabla:

Declaración Lugar de Alcance o Ámbito


Declaración

Public Módulo o Global, en todo el proyecto.


Clas e
Protected Clas e En la clas e declarada o en una derivada.
Friend Clas e En el As s emblie.
Private Módulo Solo en el módulo.
Dim Procedimiento Solo en el Procedimiento.
Static Procedimiento Solo en el Procedimiento.

Alcance de Variables

Para las variables declaradas a nivel de procedimiento (Dim y Static) exis te un nuevo
alcance que es a nivel de es tructura o bloque, que puede s er For – Next, If – End If, Do
– Loop, etc. Las variables definidas dentro de un bloque s olo valdrán en es te bloque.

Opciones de Trabajo con Variables

Por defecto en VB NET es neces ario declarar las variables us adas (Option Explicit) y
también es neces ario que s e as igne el mis mo tipo de dato a la variable (Option
Strict), s i des eamos Declaración implícita (por defecto Object) y Convers ión Forzos a de

23 de 197
tipos (ForeCas t), aunque no es lo recomendable por performance, podemos
cons eguirlo de dos formas : mediante “Propiedades ” del proyecto, opción “Build” y
elegir “Off” en las lis tas de “Option Explicit” y Option Strict” o mediante declaración al
inicio de todo el código:

Option Explicit Off

Option Strict Off

Arrays

Un array o arreglo es un conjunto de variables que tienen el mis mo nombre pero


diferente índice que permite s implificar el us o de és tas y aumentar la velocidad de
acces o a los datos que almacena el array.

El array puede tener uno o más dimens iones (has ta 60) y cada dimens ión tiene un
límite inferior que s iempre es 0 y un límite s uperior que es equivalente al tamaño de la
dimens ión del array menos 1. Es ta caracterís tica es dis tinta que en la vers ión anterior,
en donde el límite inferior del array podía empezar en cualquier número.

La clas e bas e .NET de donde s e heredan los array es “Array” y pertenece al s iguiente
NameSpace: System.Array.

Declaración de Arrays

A diferencia de Vis ual Bas ic 6, en VB .NET s e pueden declarar arrays definiendo el


número de dimens iones pero s in indicar el tamaño. Cabe res altar que s olo s e puede
declarar e inicializar un array que no tiene tamaño definido.

Otra diferencia es que no exis te la s entencia Option Bas e que haga que el límite
inferior del array empiece en 0 o en 1, és te s iempre empezará en 0 e irá has ta n-1.

Sintaxis:

<Tipo de Declaración> <Array>([Tamaño]) As <Tipo de Dato>[=<Valores >]

24 de 197
Ejemplos:

Dim Alumnos (30),Curs os (10) As String

Dim Edades () As Byte={18,20,25,27}

Dim Sueldos ( , ) As Decimal

Redimensionando Arrays

Una vez definido la dimens ión de un array, és te puede modificars e us ando la s entencia
ReDim, s iempre y cuando el array haya s ido declarado como dinámico (con Dim).

Sintaxis:

ReDim [Pres erve] <Array>([Tamaño]) As <Tipo de Dato>[=<Valores >]

Ejemplo:

Dim I, Arreglo() As Integer

Redim Arreglo(5)

For I = 0 To Ubound(Arreglo)

Arreglo(I) = I

Next I

25 de 197
Procedimientos

Un Procedimiento es un bloque de código o conjunto de ins trucciones que es definido


en la aplicación y que puede s er us ado varias veces mediante una llamada.

Dos caracterís ticas nuevas de los procedimientos , incorporadas en es ta vers ión s on:

Recursividad: Es la capacidad del procedimiento para llamars e as í mis mo.

Sobrecarga: Cons is te en que varios procedimientos pueden tener el mis mo


nombre.

En Vis ual Bas ic tenemos varios Tipos de Procedimientos :

Subrutinas: Ejecutan una acción s in retornar un valor.

Funciones: Ejecutan una acción retornando un valor.

De Eventos: Se des encadenan con la interacción del us uario o ante algún


evento.

De Propiedades: Devuelven y as ignan valores a propiedades de un objeto.

Declaración de un Procedimiento

Subrutina:

[Public ¦ Private ¦ Friend] Sub <Nombre>([Optional] [ByVal ¦ ByRef] <Par> As <Tipo>)

<Sentencia>

[Exit Sub]

End Sub

Función:

26 de 197
[Public ¦ Private ¦ Friend] Function <Nombre>(<Parámetros >) As <Tipo>

<Sentencia>

[Exit Function]

[<Nombre>=<Valor> ¦ Return(Valor)]

End Function

Notas:

El tipo de argumento por defecto es ByVal (en la vers ión anterior era ByRef)

Si s e us a Optional debe inicializars e con un valor (antes no era obligatorio)

Se puede us ar Return para regres ar a la llamada del procedimiento.

Llamada a un Procedimiento

Antes exis tía una forma de llamar a una s ubrutina y dos formas de llamar funciones (o
como s ubrutina o como función, és ta última mediante paréntes is ). En cambio ahora,
exis te una s ola forma de llamar procedimientos , s ea s ubrutinas o funciones , que es
es cribiendo el nombre s eguido de paréntes is y entre és tos los parámetros (s i los hay).

Sintaxis:

[Variable=]<Nombre de la Sub o Function>([Parámetro(s )])

27 de 197
Manejo de Threads

Threads

Un thread es la unidad bás ica para que el Sis tema Operativo pueda ejecutar un
proces o. Una aplicación (AppDomain) s iempre inicia un s olo thread, pero es te a s u vez
puede iniciar otros thread. Al proces o de ejecutar varios Thread le llamaremos
Threading.

La ventaja principal de los Threads es tener varias actividades ocurriendo en forma


s imultánea, lo cual es una gran pos ibilidad para que los des arrolladores puedan
trabajar con varios proces os s in perjudicar otras tareas . Por ejemplo, el us uario puede
interactuar con la aplicación mientras s e va ejecutando una cons ulta de miles de
regis tros .

Se recomienda el us o de Threads en las s iguientes s ituaciones :

Para comunicaciones s obre una red, s ervidor Web o Servidor de Bas e de Datos .

Al ejecutar operaciones que demoren bas tante tiempo.

Para mantener s iempre dis ponible la comunicación entre el us uario y la interface,


mientras s e van ejecutando tareas en s egundo plano, etc.

El us o de Threads intens ivamente dis minuye los recurs os del s is tema operativo, por
tanto s olo s e recomienda us ar en los cas os ya des critos , s ino la performance de la
aplicación dis minuirá.

Implementación de Threads

Para implementar Threads s e us a el NameSpace: “System.Threading.Thread” y


luego s e hace us o de los métodos que s e definen a continuación:

28 de 197
Start: Inicia un thread, el cual es un proces o de llamada as íncrona. Para s aber el
es tado del Thread hay que us ar las propiedades ThreadState y Is Alive.

Abort: Cancela un thread iniciado, s i des eamos s aber el es tado nuevamente


podemos us ar las propiedades ThreadS tate y Is Alive.

Sleep: Ocas iona una paus a en milis egundos del bloque de ins trucciones .

Suspend: También ocas iona una paus a en el bloque de ins trucciones .

Resume: Reinicia una paus a originada con el método Sus pend.

Interrupt: Interrumpe una paus a originando una exepción.

Join: Es pera por un thread.

Estado de un Thread

Un thread puede tener diferentes es tados en un mis mo tiempo, para s aber s u es tado
s e encuentra la propiedad ThreadState que devuelve un valor que indica el es tado
actual del thread.

Acción Estado de
Transición
Otro thread llama a Thread.Start Unchanged
El thread inicia s u ejecución Running
El thread llama a Thread.Sleep WaitSleepJoin
El thread llama a Monitor. Es pera en otro objeto WaitSleepJoin
El thread llama a Thread.Join en otro thread WaitSleepJoin
Otro thread lalma a Thread.Sus pend Sus pendReques ted
El thread res ponde a un requerimiento de Sus pended
Thread.Sus pend

29 de 197
Otro thread llama a Thread.Res ume Running
Otro thread llama a Thread.Interrupt Running
Otro thread llama a Thread.Abort AbortReques ted
El thread res ponde a Thread.Abort Aborted

Figura 2.1: Diagrama de Estado de un Thread

Depuración

La Depuración es el proces o de realizar un s eguimiento a una aplicación para analizar


variables , expres iones , objetos , etc. y probar s us valores en diferentes es cenarios ,
as í como probar el des empeño de la aplicación.

En Vis ual Studio .NET, exis te un mis mo depurador para Vis ual Bas ic .NET y C# (código
adminis trado), el cual tiene las s iguientes mejoras :

30 de 197
Depurar a través de Diferentes Lenguajes: Se puede depurar aplicaciones
es critas en diferentes lenguajes que s on parte de una mis ma s olución, por
ejemplo una aplicación cliente para la interface de us uario es crita en Vis ual Bas ic
o C# y una aplicación s ervidor es crita en Vis ual C++.

Adjuntar Programas en Ejecución: Es pos ible adjuntar un programa que s e


es tá ejecutando al depurador, y depurar el programa como s i es tuviera en el IDE
de Vis ual Studio. Es to s e realiza a través de la Ventana de Proces os , que mues tra
todos los proces os que es tán ejecutándos e mientras s e corre una aplicación.

Depuración Remota: Se puede añadir y depurar un proces o que es tá


ejecutándos e en una computadora remota, por ejemplo podemos depurar una
aplicación cliente Windows que llama a un Web Service que es tá corriendo en otra
máquina, pudiendo depurar a es te Web Service como s i es tuviera en la máquina
donde es tá corriendo la aplicación cliente.

Depuración de Aplicaciones Multi Thread: Una nueva caracterís tica de Vis ual
Bas ic es el s oporte de aplicaciones multi thread, para lo cual s e dis pone de la
Ventana de Threads en donde s e mues tra los threads que s e encuentran en
ejecución.

Depuración de Aplicaciones Web: Es ta caracterís tica ha s ido mejorada,


permitiendo adjuntar una página AS P .NET al proces o que s e encuentra en
ejecución, que puede s er una aplicación Web y realizar el proces o de depuración
de la página como s i es tuviera en la computadora local, etc.

Para realizar la Depuración s e dis pone de dos tipos de herramientas , que s on:

Barras de Depuración: Contienen los comandos para realizar la depuración,


como el s eguimiento pas o a pas o, fijar puntos de interrupción, mos trar las
ventanas de depuración, etc.

Ventanas de Depuración: Son ventanas donde s e mues tra el es tado en que s e


encuentran las variables , expres iones , procedimientos , objetos , etc. Algunas
permiten el anális is o ins pección y otras la vis ualización o modificación del es tado
de objetos .

31 de 197
Barras de Depuración

Exis ten dos barras de depuración que a continuación s e des criben:

Barra de Depuración: Es la principal barra que contiene todos los comandos de


depuración (34 en total), des de ejecutar una aplicación has ta fijar des ens amblar.

Figura 2.2: Barra de Depuración

Inicia la ejecución de la aplicación.

Ejecuta la aplicación s in entrar en depuración.

Interrumpe la ejecución e ingres a al modo paus a.

Finaliza la ejecución de la aplicación.

Quita todas las aplicaciones anexadas .

Reinicia nuevamente la ejecución de la aplicación.

32 de 197
Aplica los cambios realizados al código s i es que es tamos en modo paus a.

Mues tra la s iguiente s entencia a depurars e.

Ejecuta pas o a pas o incluyendo procedimientos .

Ejecuta pas o a pas o s in incluir procedimientos .

Retrocede al pas o anterior en un s eguimiento pas o a pas o.

Indica el tipo de depuración pas o a pas o; puede s er por línea (por


defecto), por s entencia o por ins trucción.

Pas a a la s iguiente s entencia a depurars e.

Ejecuta la s entencia o línea es pecificada por el Curs or del mous e en una


ventana.

Ins erta un punto de interrupción donde s e detendrá la ejecución.

Habilita o des habilita un punto de interrupción previamente ins ertado.

Borra o elimina todos los puntos de interrupción fijados .

Vis ualiza la ventana de Breakpoints .

33 de 197
Pres enta la ventana de Excepciones para controlar errores .

Mues tra la ventana de documentos ejecutándos e.

Vis ualiza la ventana Autos .

Pres enta la ventana Local.

Mues tra la Ventana This que contiene la clas e actual.

Activa la ventana Watch conteniendo las expres iones de anális is .

Vis ualiza la ventana Immediate.

Pres enta la ventana Call Stack o de llamada a la pila.

Mues tra la ventana de Threads .

Activa la ventana de Módulos .

Vis ualiza la ventana de Proces os en ejecución.

Pres enta la ventana QuickWatch o de Anális is Rápido.

34 de 197
Mues tra la ventana de contenido de Memoria.

Mues tra la ventana del Des ens amblador de código.

Vis ualiza la ventana de Regis tros del proces ador.

Pres enta la ventana del des ens amblador para fijar curs or.

35 de 197
Barra de Ubicación de Depuración: Es una nueva barra que mues tra
información de la aplicación que s e es tá depurando, tal como el nombre del
programa, el thread y el procedimiento que s e encuentra en ejecución (en la pila).

Figura 2.3: Barra de Ubicación de Depuración

Mues tra el Programa que s e es tá depurando.

Vis ualiza el Thread que s e es tá depurando.

Mues tra el Procedimiento que s e


encuentra en ejecución.

Ventanas de Depuración

En es ta nueva vers ión de Vis ual Bas ic exis ten alrededor de 17 ventanas de depuración,
entre las cuales veremos algunas :

Ventana Breakpoints: Pres enta información de los puntos de interrupción


ins ertados tal como la ubicación, condición, numero de veces que ingres a, datos
y nombre del programa que es tá en ejecución.

36 de 197
Figura 2.4: Ventana Breakpoints

Ventana Autos: Mues tra información de las variables us adas en la s entencia


actual y en las s entencias anteriores ; la s entencia actual es aquélla en donde s e
encuentra la depuración. Es ta ventana no puede reconocer arrays ni es tructuras .

37 de 197
Figura 2.5: Ventana Autos

Ventana Locals: Ins pecciona variables , parámetros y objetos relacionados con


el procedimiento actual o que s e encuentra en depuración. También permite la
modificación de valores dando un doble clic s obre es tos .

Figura 2.6: Ventana Locals

Ventana This: Ins pecciona el objeto (módulo) que s e encuentra en depuración,


mos trando s u contenido. También permite la modificación de valores dando un
doble clic s obre es tos .

Figura 2.7: Ventana This

38 de 197
Ventana Watch: Ins pecciona una variable o expres ión previamente definida.
También permite añadir una expres ión de anális is , modificar s us valores y
eliminarla.

39 de 197
Figura 2.8: Ventana Watch

Ventana Immediate: Se us a para preguntar y/o modificar valores de variables


que s e encuentran en ejecución o públicas , también ejecuta ins trucciones o
comandos .

Figura 2.9: Ventana Immediate

Ventana Call Stack: Vis ualiza los procedimientos que s e encuentran en


ejecución en la memoria dinámica o pila, s i es una aplicación .NET también s eñala
el lenguaje.

Figura 2.10: Ventana Call Stack

40 de 197
Ventana Threads: Mues tra todos los threads que s e encuentran actualmente en
ejecución mientras s e es tá depurando la aplicación, pres entando información de
s u código, nombre, ubicación, prioridad y s i s e encuentra s us pendido o no.

41 de 197
Figura 2.11: Ventana Threads

Ventana Modules: Pres enta información s obre los módulos cargados en


memoria (la Aplicación y s us DLLs ) mos trando s u nombre, dirección, ruta,
vers ión, programa, etc.

Figura 2.12: Ventana Modules

Ventana Processes: Vis ualiza los proces os que s e encuentran en ejecución en


el s is tema, también permite anexar y des anexar proces os externos para
depurarlos , etc.

Figura 2.13: Ventana Processes

42 de 197
Control de Excepciones

Durante el des arrollo y ejecución de toda aplicación pueden pres entars e diferentes
tipos de errores , los cuales impiden el normal funcionamiento de la aplicación. A es tos
errores s e les llama Excepciones .

Tipos de Errores

Los errores o excepciones s e pueden clas ificar en 3 tipos :

Errores de Sintaxis: Suceden al es cribir código en la aplicación; como por


ejemplo una ins trucción mal es crita, omis ión de un parámetro obligatorio en una
función, etc.

Vis ual Bas ic notifica de cualquier error de s intaxis mos trando una marca de
s ubrayado azul (por defecto) con un comentario indicando la caus a del error.

Una ayuda para corregir errores de s intaxis , es us ar la s entencia Option Explicit

43 de 197
que fuerce a declarar variables y evitar expres iones inválidas .

Errores Lógicos: Ocurren una vez us ada la aplicación y cons is te en res ultados
ines perados o no des eados ; por ejemplo una función que debe devolver el s ueldo
neto es tá devolviendo un valor de cero o negativo, o una s ubrutina que debe
eliminar un archivo temporal no lo es tá borrando.

Para corregir es te tipo de errores s e hace us o de las herramientas de depuración,


como por ejemplo un s eguimiento pas o a pas o, o ins peccionar el valor de una
variable o expres ión.

También podemos dis minuir errores o excepciones de tipos de datos no des eados
us ando la s entencia Option Strict que evita la convers ión forzos a y verifica que el
tipo de dato as ignado s ea del mis mo tipo que la variable o función, o que un
parámetro pas ado s ea del mis mo tipo, etc.

Errores en Tiempo de Ejecución: Es te tipo de errores s uceden en plena


ejecución de la aplicación, des pués de haber s ido compilado el código. No s on
errores de mala es critura ni de lógica, s ino mas bien de alguna excepción del
s is tema, como por ejemplo tratar de leer un archivo que no exis te o que es tá
abierto, realizar una divis ión entre cero, etc.

Para controlar los errores en tiempo de ejecución dis ponemos de los


Manipuladores o Controladores de Error, que evitan la caída del programa y
permiten que s iga funcionando. A continuación veremos las formas de implementar
el control de es te tipo de errores .

44 de 197
Formas de Controlar Excepciones

Exis ten dos formas de controlar errores o excepciones en Vis ual Bas ic .NET:

Control No Estructurado: Se implementa us ando la s entencia On Error GoTo.

Es la forma como s e controla errores en las vers iones anteriores a Vis ual Bas ic
.NET y cons is te en el us o de etiquetas , es decir recurrir a la programación
etiquetada, cuando ocurre algún error toma el control el código que s e encuentra a
continuación de la etiqueta.

Exis ten varias s intaxis o formas de us ar la s entencia On Error, tal como s e define:

1. On Error Resume Next: Indica que s i ocurre un error en tiempo de ejecución el


flujo continúe en la s iguiente línea des pués de la que originó el error.

2. On Error GoTo 0: Des habilita cualquier Controlador de error, previamente


declarado en el procedimiento actual, configurando es te a Nothing.

3. On Error GoTo –1: Des habilita cualquier error o excepción que ocurra en
cualquier línea del procedimiento actual, configurando es te a Nothing.

4. On Error GoTo Etiqueta: Si un error en tiempo de ejecución ocurre envía el


control a la ins trucción que es tá debajo de la etiqueta definida. Es la mejor forma
no es tructurada de controlar errores , ya que s e puede pers onalizar mens ajes .

La forma de implementar es ta s entencia en un procedimiento es :

Inicio Procedimiento()

On Error GoTo <Etiqueta>

<Ins trucciones >

45 de 197
Exit Sub

<Etiqueta>:

<Ins trucciones >

[Res ume ¦ Res ume Next ¦ Res ume Etiqueta]

Fin Procedimiento

Para s alir de la etiqueta, generalmente s e us a la ins trucción Res ume, de 3


formas :

Resume: Vuelve a la ins trucción que produjo el error.

Resume Next: Regres a el flujo a la s iguiente ins trucción des pués de la que
produjo el error.

Resume Etiqueta: Bifurca el control a una etiqueta definida por el us uario.

Al us ar la s entencia On Error GoTo s i un error en tiempo de ejecución ocurre el


control es tomado por el código de la Etiqueta y la información del error ocurrido
es almacenada en el Objeto Err, tal como el número del error, s u des cripción y
el origen.

46 de 197
Control Estructurado: Es la forma mas recomendable de controlar errores y es
una nueva caracterís tica de Vis ual Bas ic .NET; s e implementa us ando la
es tructura Try..Catch..Finally.

La forma de implementar es ta s entencia en un procedimiento es :

Inicio Procedimiento()

Try

<Ins trucciones Try>

[Exit Try]

[Catch 1 [<Excepción> [As <Tipo Dato>]] [When <Expres ión>]]

<Ins trucciones Catch 1>

[Exit Try]

[Catch 2 [<Excepción> [As <Tipo Dato>]] [When <Expres ión>]]

<Ins trucciones Catch 2>

[Exit Try]

[Catch n [<Excepción> [As <Tipo Dato>]] [When <Expres ión>]]

<Ins trucciones Catch n>

[Exit Try]

Finally

<Ins trucciones Finally>

End Try

Fin Procedimiento

Cuando us amos la s entencia Catch s e hace referencia a una variable <Excepción>

47 de 197
que es del Tipo de Dato Exception (nombre de la clas e) o una clas e derivada de
és ta, la cual contiene información s obre el error ocurrido, tales como s u número,
des cripción, origen, etc.

En la s entencia Catch también podemos analizar el error us ando la palabra When


s eguida de una expres ión, lo que permite filtrar el error de acuerdo a un criterio,
que generalmente es el número del error.

Para s alir de la es tructura Try..Catch..Finally s e hace us o de la s entencia Exit Try


que ejecuta la s iguiente línea a la s entencia End Try.

En la es tructura Try..Catch..Finally s e ejecuta las ins trucciones que hubieran debajo


del Try, s i un error en tiempo de ejecución ocurre, el flujo es pas ado a la s entencia
Catch que contenga el control de dicho error, s i dicho error no es es pecificado por
el Catch s e mos trará un mens aje de error normal. Finalmente s e ejecuta las
ins trucciones del Finally.

48 de 197
Opciones de Control de Excepciones

Para controlar excepciones no s olo bas ta us ar una forma de control, s ea no


es tructurada o es tructurada, s ino también es neces ario configurar las opciones de
control de excepciones para lo cual del menú “Debug” s e elige “Windows ” y luego
“Exceptions ” ó también s e puede elegir directamente el botón “Exceptions ” de la Barra
de Depuración.

Aparecerá la ventana de control de excepciones que s e mues tra a continuación:

Figura 2.14: Ventana Exceptions

Exis ten 2 momentos en que s e pueden controlar las excepciones que s on:

When the exception is thrown: Es cuando la excepción ocurre y s e acons eja


configurarlo en “Continue”.

If the exception is not handled: Ocurre cuando la excepción no es controlada,


es decir cuando no exis te controlador de error, es acons ejable que es té en
“Break into the debugger”.

49 de 197
Ambos momentos tienen 3 opciones o formas de control, que s on:

Break into the debugger: Para y mues tra el depurador con la línea donde
ocurrió el error en tiempo de ejecución.

Continue: Continua la ejecución del programa. S i no exis te controlador Finaliza la


ejecución del programa.

Use parent setting: Indica que s e va a us ar la configuración de la opción de


nivel s uperior o padre.

50 de 197
Laboratorio 3:

El pres ente laboratorio tiene como objetivo conocer el Entorno de Vis ual Studio .NET y
us ar algunas caracterís ticas nuevas del Lenguaje Vis ual Bas ic .NET, as í como
implementar Multi Threads y Controlar Excepciones .

Es te primer laboratorio es tá dividido en 2 ejercicios que tienen una duración


aproximada de 35 minutos.

Ejercicio 1: Reconociendo VB .NET y Trabajando con el Lenguaje

Duración: 20 minutos

Cargue Vis ual Studio .NET, aparecerá la pagina de inicio, en ella elegir la opción
“Get Started” y luego elegir “Create New Project”, obs erve los diferentes tipos de
proyectos y s us res pectivas plantillas .

Elegir un tipo de proyecto “Vis ual Bas ic” y una plantilla de “Aplicación Windows ”,
s eleccionar como ubicación la carpeta “C:\VBNET\Labs ” y como nombre ingres e
“Lab03_1”.

Obs erve el IDE de Vis ual Studio .NET cuando s e trata de una aplicación para
Windows . ¿Qué ventanas s on nuevas en es ta vers ión?. Luego, pruebe la
caracterís tica de “Auto Ocultar” de las ventanas y la ayuda dinámica.

Vamos a empezar a crear una aplicación en la que en un formulario s e ingres en


los datos de unos alumnos , tal como s u nombre, notas de s us exámenes parcial
y final y s e calculará el promedio y condición. Además , en otro formulario s e
mos trará un informe del total de alumnos ingres ados , aprobados , des aprobados
y el promedio total

Primero en la ventana del “Solution Explorer” s eleccionar el nombre del


formulario y en la ventana de propiedades es cribir en la propiedad “FileName” el

51 de 197
nombre “frmDatos .vb”.

Realizar el dis eño del formulario s imilar al de la figura 1.18, ingres ando como
prefijo de la propiedad “Name” de las etiquetas las iniciales “lbl”, para los textos
“txt” y para los botones “btn”, s eguido del nombre que generalmente es s imilar
al contenido de la propiedad “Text”.

Des pués de realizar el dis eño y configurar las res pectivas propiedades de los
objetos , vis ualice el código del formulario. Obs erve las nuevas caracterís ticas del
Lenguaje y notes la diferencias entre es ta vers ión y la anterior.

52 de 197
Figura 2.15: Diseño del formulario frmDatos

Para realizar los cálculos de la aplicación vamos a crear variables y funciones


públicas en un módulo es tándar, para lo cual del menú “Project” elegimos la
opción “Add Module” y luego es cribimos en el nombre “Modulo.vb”

Es cribir el s iguiente código en el módulo:

Module Modulo

Public NTotal, NAprobados , NDes aprobados As Byte

Public Suma, PromTot As Single

Public Function Calcular_Promedio(ByVal Par As Byte, _

ByVal Fin As Byte) As Single

Return ((Convert.ToSingle(Par + 2 * Fin)) / 3)

End Function

Public Function Calcular_Condicion(ByVal Pro As Single) _

As String

53 de 197
NTotal = +1

Suma = +Pro

If Pro > 10.5 Then

NAprobados = +1

Return ("Aprobado")

Els e

NDes aprobados = +1

Return ("Des aprobado")

End If

End Function

End Module

Regres ar al formulario y proceder a es cribir código en los eventos de los


botones , tal como s e mues tra a continuación:

Protected Sub btnCalcular_Click(ByVal s ender As Object, …)

Dim Par, Fin As Byte

Dim Pro As Single

Par = Convert.ToByte(txtParcial.Text)

Fin = Convert.ToByte(txtFinal.Text)

Pro = Calcular_Promedio(Par, Fin)

txtPromedio.Text = Format(Pro, "#.00")

txtCondicion.Text = Calcular_Condicion(Pro)

End Sub

Protected Sub btnNuevo_Click(ByVal s ender As Object, …)

Dim X As Control

54 de 197
For Each X In Me.Controls

If TypeOf X Is TextBox Then X.Text = ""

Next

txtNombre.Focus ()

End Sub

Protected Sub btnInforme_Click(ByVal s ender As Object, …)

Dim X As New frmInforme()

X.ShowDialog()

End Sub

Protected Sub btnSalir_Click(ByVal s ender As Object, …)

Me.Clos e

End Sub

Para mos trar el informe de s ituación de alumnos ir al menú “Project” y elegir la


opción “Add Windows Form” y en el nombre es cribir “frmInforme.vb”. Luego
realizar el dis eño del formulario, tal como s e mues tra en la figura de abajo.

Figura 2.16: Diseño del formulario frmInforme

55 de 197
Ingres ar al código del formulario “frmInforme” y proceder a es cribir código en el
evento “Load” para que s e mues tre las es tadís ticas de los alumnos :

Public Sub frmInforme_Load(ByVal s ender As Object, …)

txtTotal.Text = NTotal.ToString

txtAprobados .Text = NAprobados .ToString

txtDes aprobados .Text = NDes aprobados .ToString

txtPromedioTotal.Text = Format((Suma / NTotal), "#.00")

End Sub

Luego programar en los botones de “Aceptar” y “Cancelar” el regres o y la


finalización de la aplicación res pectivamente, s imilar al código mos trado abajo:

Protected Sub btnAceptar_Click(ByVal s ender As Object, …)

Me.Clos e()

End Sub

Protected Sub btnCancelar_Click(ByVal s ender As Object, …)

End

End Sub

Grabar y ejecutar la aplicación; para probar ingres ar como mínimo los datos de
dos alumnos , mos trar el informe y finalizar.

Diríjas e al “Explorador de Windows ” y analice el contenido de la carpeta


“Lab01_1”, obs erve que exis ten varios tipos de extens iones , sln para la s olución,
vbproj para la aplicación y vb para los formularios y el módulo.

Finalmente, ingres e a la carpeta “bin” de “Lab01_1” y obs erve dos archivos : uno
ejecutable (extens ión exe) y otro archivo intermedio (extens ión pdb), ¿Cuál de

56 de 197
es tos es conocido como As s emblie?.

Ejercicio 2: Implementando Multi Thread y Control de Excepciones

Duración: 15 minutos

Ingres e a Vis ual Studio .NET y del menú “File” elegir “New” y luego “Project” o
s implemente puls ar [Ctrl] + [N], luego elegir un tipo de proyecto “Vis ual Bas ic” y
una plantilla de “Aplicación Windows ”, s eleccionar como ubicación la carpeta
“C:\VBNET\Labs ” y como nombre ingres ar “Lab03_2”.

Se va a crear una aplicación en la que s e implemente múltiples threads para


iniciar la lectura de un archivo de texto extens o y poder cancelar es te proces o s i
es neces ario, además para evitar los errores en tiempo de ejecución haremos
us o del control es tructurado de excepciones vis to en es te módulo.

Primero en la ventana del “Solution Explorer” s eleccionar el nombre del


formulario y en la ventana de propiedades es cribir en la propiedad “FileName” el
nombre “frmArchivo.vb”.

Realizar el dis eño del formulario s imilar al pres entado aquí abajo:

Figura 2.17: Diseño del formulario frmArchivo

57 de 197
Declarar una variable llamada Hilo de tipo thread y definir una s ubrutina que lea el
archivo de texto cuya ruta y nombre es tá es pecificado en el cuadro de texto, es ta
rutina us a Try..Catch..Finally para controlar errores en tiempo de ejecución.

Dim Hilo As Sys tem.Threading.Thread

Sub LeerArchivo()

Dim Flujo As Sys tem.IO.StreamReader

Dim Linea As String = " "

Try

Flujo = Sys tem.IO.File.OpenText(txtNombre.Text)

Do Until Is Nothing(Linea)

Linea = Flujo.ReadLine

txtArchivo.Text = txtArchivo.Text + Linea + Chr(13)

+ Chr(10)

Loop

Catch X As IO.IOException

Ms gBox(X.Mes s age, Ms gBoxStyle.Information, "No s e pudo")

58 de 197
txtNombre.Clear()

Exit Sub

End Try

Flujo.Clos e()

btnSus pender.Enabled = Fals e

btnContinuar.Enabled = Fals e

btnCancelar.Enabled = Fals e

End Sub

Es cribir código en el evento “TextChanged” de “txtNombre” y en los eventos


“Click” de los “Botones ”.

Private Sub txtNombre_TextChanged(ByVal s ender As …) Handles …

btnLeer.Enabled = txtNombre.Text <> ""

End Sub

Private Sub btnLeer_Click(ByVal s ender As …) Handles …

Hilo = New Sys tem.Threading.Thread(Addres s Of LeerArchivo)

Hilo.Start()

btnSus pender.Enabled = True

btnCancelar.Enabled = True

End Sub

Private Sub btnCancelar_Click(ByVal s ender As …) Handles …

Hilo.Abort()

btnLeer.Enabled = Fals e

btnSus pender.Enabled = Fals e

btnCancelar.Enabled = Fals e

59 de 197
End Sub

Private Sub btnNuevo_Click(ByVal s ender As …) Handles …

txtNombre.Clear()

txtArchivo.Clear()

txtNombre.Focus ()

End Sub

Private Sub btnSus pender_Click(ByVal s ender As …) Handles …

Hilo.Sus pend()

btnLeer.Enabled = Fals e

btnContinuar.Enabled = True

btnCancelar.Enabled = Fals e

End Sub

Private Sub btnContinuar_Click(ByVal s ender As …) Handles …

Hilo.Res ume()

End Sub

Private Sub btnSalir_Click(ByVal s ender As …) Handles ...

Me.Clos e()

End Sub

Finalmente, grabar y ejecutar la aplicación.

60 de 197
Módulo 3
Creando Aplicaciones para
Windows
Usando Windows Forms

Introducción

Windows es una clas e bas e del Marco .NET us ada para crear aplicaciones que correrán
s obre Windows , es ta s e encuentra dis ponible al elegir en Vis ual Bas ic la plantilla
“Windows Application”.

Al elegir una aplicación para Windows automáticamente s e realizan los s iguientes


cambios :

En el ToolBox aparecerá una ficha llamada “Windows Forms ” conteniendo los


controles para trabajar con Formularios Windows y Controles de Us uario.

En el código del formulario aparecerá la referencia a la clas e bas e heredada:

Inherits Sys tem.Windows .Forms .Form

61 de 197
Para ilus trar mejor la funcionalidad que podemos obtener de Windows tenemos la
figura 4.1, que res ume los principales objetos us ados en Windows , para lo cual s e
parte de la clas e bas e llamada “Sys tem”, luego s e mues tran algunos de los objetos
de la clas e “Drawing” y de la clas e “WinForms ” anteriormente comentadas .

Figura 3.1: Modelo de Objetos para Windows

Cabe comentar que dentro de la clas e Windows encontramos definido el formulario y


los controles para Windows (Label, Button, TextBox, Menu, etc), as í como también
algunos objetos no vis uales de utilidad como Application (reemplaza al objeto App de
VB6), Clipboard, Help, Screen, etc.

Objeto Formulario

62 de 197
El objeto Formulario es el contenedor principal de toda aplicación para Windows
y s e encuentra en el s iguiente NameSpace:

“ System.Windows.Forms.Form”

En Vis ual Studio .NET el formulario ha s ufrido muchos cambios , tanto en propiedades ,
métodos y eventos , tal como s e mues tra en los s iguientes cuadros :

63 de 197
Propiedades

Propiedad Descripción
Autos croll Es una nueva propiedad que permite des plazars e
por el formulario a través de una barra s i es que los
controles s obrepas an el área cliente.

Backcolor Es pecifica el color de fondo del formulario.

BackgroundImage Antes llamada Picture. Permite mos trar una imagen


de fondo s obre el formulario, tiene 2 tamaños :
cas cada y centrado en pantalla.

BorderStyle Controla la apariencia del borde del formulario y los


controles que s e pres entan en la barra de título.
Tiene 6 opciones .

ControlBox Si es ta en True mues tra el menú de controles de la


barra de título, s i es ta en Fals e no los mues tra.

Curs or Es pecifica el curs or que aparecerá al s ituar el


mous e s obre el formulario. Antes era la propiedad
Mous ePointer y s i s e quería un curs or pers onalizado
s e configuraba Mous eIcon, ahora s olo exis te Curs or
y s us gráficas s on vis tas en la lis ta.

Font Configura la fuente de los textos de los controles


ubicados en el formulario y de los textos mos trados
con métodos de dibujo.

Forecolor Es pecifica el color del texto de los controles


(excepto el TextBox) y de los textos mos trados con
métodos de dibujo.

64 de 197
GridSize Determina el tamaño de las rejillas que s e mues tran
en tiempo de dis eño para dis eñar controles .

Icon Indica el icono del formulario, es te s e mues tra en la


barra de título de la ventana y en la barra de tareas
de Windows .

Is MDIContainer Determina s i es que el formulario es un MDI, antes


s e creaba un formulario MDI añadiéndolo del menú
“Project” y un formulario hijo configurando la
propiedad MDIChild en True.

Ahora s olo s e configura para ambos la propiedad


Is MDIContainer.

Location Indica la pos ición del formulario con res pecto a la


es quina s uperior izquierda de la pantalla. Antes
había que configurar la propiedad Top y Left, ahora
los valores de X e Y.

Opacity Es una nueva propiedad, que indica la forma de


vis ualización del formulario, que puede s er des de
opaco (100%) has ta trans parente (0%). Antes para
hacer trans parente s e us aba la API SetWindowRgn

RightToLeft Determina la alineación de los textos con res pecto a


s us controles , por defecto es No, es decir s e
alinean de izquierda a derecha; s i es True s e
alinearán de derecha a izquierda.

Size Configura el tamaño del formulario en píxeles .

StartPos ition Indica la pos ición en que aparecerá por primera vez
el formulario con res pecto a la pantalla. Tiene 5
opciones .

65 de 197
Text Antes s e llamaba Caption y permite mos trar el texto
de la barra de título en el formulario.

TopMos t Pos iciona en primer plano la ventana, s iempre y


cuando no es te des activada. Antes s e podía hacer
es to con la API Windows OnTop.

WindowState Determina la forma en que s e pres entará la


ventana, puede s er Normal, Minimizada o
Maximizada.

Métodos

Método Descripción
Activate Activa el formulario y le da el foco.

ActivateControl Activa un control del formulario.

Clos e Cierra un formulario des cargándolo de la memoria.

Focus Pone el foco s obre el formulario.

Hide Oculta el formulario, s in des cargarlo de la memoria.

Refres h Repinta el formulario y s us controles .

SetLocation Ubica el formulario en una cierta pos ición de la


pantalla.

66 de 197
SetSize Configura el tamaño de la ventana en píxeles .

Show Mues tra un formulario como ventana no modal


(modeles ).

ShowDialog Mues tra un formulario como ventana modal (modal).

67 de 197
Eventos

Evento Descripción
Activated Ocurre al activars e el formulario.

Click Se des encadena al dar clic con el mous e s obre el


formulario.

Clos ed Se habilita al cerrar el formulario. Es s imilar al evento


Unload de Vis ual Bas ic 6.

Clos ing Ocurre mientras s e es tá cerrando el formulario. Es


s imilar al evento QueryClos e de Vis ual Bas ic 6.
También s e puede cancelar la s alida.

Deactivated Ocurre al des activars e el formulario.

DoubleClick Se des encadena al dar doble clic con el mous e s obre


el formulario.

GotFocus Ocurre al ingres ar el foco s obre el formulario.

Load Se produce al cargar los controles s obre el formulario

Los tFocus Ocurre al s alir el foco del formulario.

Mous eEnter Se habilita al ingres ar el mous e s obre el área cliente


del formulario.

Mous eLeave Se habilita al s alir el mous e del área cliente del


formulario.

68 de 197
Mous eMove Se des encadena al pas ar el mous e s obre el
formulario.

Move Es te evento se habilita al mover la ventana o


formulario.

Paint Ocurre al pintars e la ventana en pantalla.

Res ize Ocurre cada vez que s e modifica de tamaño el


formulario.

69 de 197
Uso del ToolBox

El ToolBox es la caja de herramientas donde s e encuentran los controles que s e van


ha us ar para dis eñar la interface de los diferentes tipos de aplicaciones , es te varía de
acuerdo al tipo de plantilla elegida.

A continuación s e pres enta el ToolBox cuando elegimos una plantilla “Windows


Application”; és te pres enta varias fichas : “Windows Forms ”, “Data”, “Components ” y
“General”.

Figura 3.2: ToolBox para Aplicaciones Windows

Para us ar un control del ToolBox s olo hay que elegir la ficha adecuada y luego
s eleccionar el control y arras trarlo s obre el formulario o contenedor donde s e des ea
ubicarlo, también s e puede dar doble clic s obre el control y aparecerá por defecto en la
pos ición 0,0 del formulario (antes s e ubicaba al centro de és te).

70 de 197
71 de 197
Usando Controles para Windows Forms

Controles Label, TextBox y Button

Control Label

Propiedades

Propiedad Descripción
Anchor Es una nueva propiedad que permite ajus tar el ancho
del control.

AutoSize Ajus ta el texto de la etiqueta al tamaño del control.

Backcolor Es pecifica el color de fondo de la etiqueta.

BorderStyle Controla la apariencia del borde de la etiqueta. Tiene


3 opciones .

Curs or Es pecifica el curs or que aparece al s ituar el mous e


s obre la etiqueta.

Dock Da la pos ibilidad de acoplar la etiqueta a un lado del


contenedor, puede s er arriba, abajo, izquierda,
derecha o al centro.

Enabled Habilita o des habilita la etiqueta.

Font Configura la fuente del texto de la etiqueta.

Forecolor Es pecifica el color del texto de la etiqueta.

72 de 197
Location Indica la pos ición de la etiqueta con res pecto a s u
contenedor.

Locked Bloquea el control para que no s e mueva o modifique


de tamaño.

RightToLeft Determina la alineación del texto con res pecto al


control.

Size Configura el tamaño del control en píxeles .

Text Vis ualiza el texto de la etiqueta.

TextAlign Alinea el texto hacia el control, s ea: izquierda, derecha


o centro.

Vis ible Vis ualiza o no el control.

73 de 197
Métodos

Método Descripción
FindForm Devuelve el formulario en el que s e encuentra el
control.

Focus Pone el foco s obre la etiqueta.

Hide Oculta la etiqueta, s in des cargarla de la memoria.

Refres h Repinta la etiqueta.

SetLocation Ubica la etiqueta en una cierta pos ición de la pantalla.

SetSize Configura el tamaño de la etiqueta.

Show Pone vis ible la etiqueta.

Eventos

Evento Descripción
Click Se des encadena al dar clic con el mous e s obre la
etiqueta.

DoubleClick Se des encadena al dar doble clic con el mous e s obre


la etiqueta.

74 de 197
GotFocus Ocurre al ingres ar el foco s obre el control.

Los tFocus Ocurre al s alir el foco del control.

Mous eEnter Se habilita al ingres ar el mous e s obre la etiqueta.

Mous eLeave Se habilita al s alir el mous e de la etiqueta.

Mous eMove Se des encadena al pas ar el mous e s obre la etiqueta.

75 de 197
Control TextBox

Propiedades

Es te control tiene propiedades s imilares al control Label, entre aquéllas propiedades


exclus ivas de es te control tenemos :

Propiedad Descripción
CharacterCas ing Nueva propiedad que convierte a mayús culas o
minús culas el texto.

Lines Mues tra el contenido de cada línea del texto.

MaxLength Determina el número de caracteres que s e pueden


ingres ar en és te.

MultiLine Si es True s e pueden es cribir varias líneas de texto.

Pas s wordChar S eñala el carácter que aparecerá como mas cara de


entrada.

ReadOnly Indica que el control s olo s e puede ver pero no


editar. Antes s e llamaba Locked.

ScrollBars Habilita las barras de des plazamiento s i el control es


multilínea.

WordWrap Cambia de línea al llegar al final de un texto


multilínea.

76 de 197
Métodos

Método Descripción
AppendText Añade texto al final del texto actual.

Clear Borra el contenido del cuadro de texto.

Copy Copia el texto y lo envía al portapapeles .

Cut Corta el texto y lo envía al portapapeles .

Pas te Pega el texto del portapapeles al cuadro.

Res etText Inicializa el texto.

Select Selecciona el texto.

Undo Des hace el último cambio en el texto.

77 de 197
Eventos

Evento Descripción
KeyDown Ocurre al puls ar hacia abajo una tecla extendida.

KeyPres s Ocurre al puls ar una tecla normal. También s e


des encadena antes el evento KeyDown y des pués el
evento KeyUp.

KeyUp Ocurre al s oltar una tecla extendida previamente


puls ada.
TextChanged Es un nuevo evento que reemplaza al evento change,
es decir ocurre al cambiar el texto.

Validated Se habilita des pués de validars e el control.

Validating Se habilita cuando el control es tá validándos e.

Control Button

Propiedades

Es te control también tiene propiedades s imilares al control Label, entre aquéllas


propiedades exclus ivas y nuevas de es ta vers ión, tenemos :

Propiedad Descripción
Name Generalmente us aremos el prefijo btn.

78 de 197
BackgroundImage Es pecifica la imagen de fondo que us ará el botón.

DialogRes ult Determina el valor del formulario padre s i s e da clic


s obre el botón.

FlatStyle Determina el es tilo o apariencia del control. Tiene 3


valores .

Image Imagen que s e mos trará en el control.

ImageAlign Alineación de la imagen dentro del control. Tiene 9


opciones .

Métodos

Método Descripción
NotifyDefault Indica s i el botón s erá el control por defecto. Es de
tipo lógico.

PerformClick Ejecuta el evento clic del botón.

Eventos

Evento Descripción
Click Se des encadena al dar clic con el mous e s obre la
etiqueta.

79 de 197
GotFocus Ocurre al ingres ar el foco s obre el botón.

Los tFocus Ocurre al s alir el foco del botón.

Mous eEnter Se habilita al ingres ar el mous e s obre el botón.

Mous eLeave Se habilita al s alir el mous e del botón.

Mous eMove Se des encadena al pas ar el mous e s obre el botón.

Controles GroupBox, RadioButton y CheckBox

Control GroupBox

Antes conocido como Frame, es un contenedor que s e utiliza para agrupar varias
opciones , que pueden s er: de opción única como los RadioButton o de opción múltiple
como los CheckBox.

Es te control s e utiliza como contenedor y por s i s olo no tiene mucha funcionalidad, es


por es o, que s olo veremos s us principales propiedades , métodos y eventos .

Propiedades

Propiedad Descripción
Name Generalmente us aremos el prefijo gbx.

80 de 197
Enabled Determina s i el control es tará habilitado o
des habilitado.

Text Indica el texto que s e mos trará como encabezado del


control.

Vis ible Mues tra u oculta al control y todo s u contenido.

81 de 197
Métodos

Método Descripción
Focus Pone el foco s obre el control.

Hide Oculta el control, s in des cargarlo de la memoria.

Show Pone vis ible el cuadro de grupo.

Eventos

Evento Descripción
GotFocus Ocurre al ingres ar el foco s obre el control.

Los tFocus Ocurre al s alir el foco del control.

Control RadioButton

Antes conocido como OptionButton, es un control en el que s olo s e puede s eleccionar


uno por contenedor.

Propiedades

Propiedad Descripción
Name Generalmente us aremos el prefijo rbn.

Appearance Controla la apariencia del control, puede s er: Normal


(como botón de opción) o Button (como botón de

82 de 197
comando).

AutoCheck Cambia de es tado cada vez que s e da clic al botón.

CheckAlign Controla la alineación del botón. Hay 9 pos iciones .

Checked Indica s i el botón ha s ido s eleccionado o no.

Métodos

Método Descripción
Focus Pone el foco s obre el radiobutton.

Hide Oculta el radiobutton, s in des cargarlo de la memoria.

Show Pone vis ible el radiobutton.

Eventos

Evento Descripción
CheckedChanged Ocurre al cambiar la propiedad checked del
radiobutton.

Click Se des encadena al dar clic con el mous e s obre el


botón.

DoubleClick Se des encadena al dar doble clic con el mous e s obre


el botón.

83 de 197
Control CheckBox

Es te control mantiene el mis mo nombre anterior, es un control en el que s e pueden


s eleccionar varios por contenedor.

Propiedades

Propiedad Descripción
Name Generalmente us aremos el prefijo chk.

Appearance Controla la apariencia del control, puede s er: Normal


(como cas illa) o Button (como botón de comando).

AutoCheck Cambia de es tado cada vez que s e da clic al botón.

CheckAlign Controla la alineación del checkbox. Hay 9 pos iciones .

Checked Indica s i el checkbox ha s ido s eleccionado o no.

CheckState Devuelve el es tado del checkbox, que puede s er:


Unchecked (s in marcar), Checked (marcado) o
Indeterminate (gris ).

ThreeState Habilita o des habilita el es tado indeterminado del


checkbox cada vez que s e da el tercer clic.

Métodos

84 de 197
Método Descripción
Focus Pone el foco s obre el checkbox.

Hide Oculta el checkbox, s in des cargarlo de la memoria.

Show Pone vis ible el checkbox.

85 de 197
Eventos

Evento Descripción
CheckedChanged Ocurre al cambiar el valor de la propiedad
Checked del control.

CheckStateChanged Ocurre al cambiar el valor de la propiedad


CheckState del control.

Controles ListBox, CheckedListBox y ComboBox

Control ListBox

Propiedades

Propiedad Descripción
Name Generalmente us aremos el prefijo ls t.

ColumnWidth Indica el ancho de cada columna en una lis ta de


varias columnas .

HorizontalExtent Indica el ancho mínimo en píxeles que s e requiere


para que aparezca la barra horizontal.

HorizontalScrollbar Mues tra u oculta la barra de des plazamiento


horizontal de la lis ta.

IntegralHeight Determina que las opciones de la lis ta s e vean en


forma completa.

86 de 197
ItemHeight Devuelve el alto en píxeles de cada elemento de la
lis ta.

Items Es la principal propiedad y s e refiere a los


elementos de la lis ta.

MultiColumn Indica s i los elementos s e pueden ver en varias


columnas .

ScrollAlways Vis ible Vis ualiza s iempre las 2 barras de des plazamiento.

SelectionMode Determina la forma de s elección que puede s er:


None (ninguno), One (uno), MultiSimple (varios con
click) y MultiExtended (varios con s hift + click o ctrl
+ click).

Sorted Ordena la lis ta en forma as cendente.

SelectedIndex Devuelve o es tablece el índice del elemento


s eleccionado.

SelectedItem Devuelve el ítem s eleccionado de la lis ta.

87 de 197
Métodos

Método Descripción
FindString Devuelve el índice de un elemento bus cado en una
lis ta. Si no exis te devuelve -1 y s i exis te devuelve un
número mayor que -1.

FindStringExact Realiza una labor s imilar al método anterior pero


compara con exactitud la cadena.

GetSelected Devuelve true s i un elemento ha s ido s eleccionado o


fals e s i no.

Ins ertItem Ins erta un elemento en una cierta pos ición de la lis ta.

Eventos

Evento Descripción
DoubleClick Ocurre al dar dos veces clic s obre la lis ta.

SelectedIndexChanged Ocurre al cambiar el índice del elemento


s eleccionado.

Colección Items

Para trabajar con los elementos de una lis ta s e hace us o de la colección Items , la cual
s e detalla a continuación:

88 de 197
Propiedades

Propiedad Descripción
All Devuelve un objeto con todos los elementos de la
lis ta.

Count Devuelve el número de elementos de la lis ta.

Métodos

Método Descripción
Add Añade un elemento al final de la lis ta.

Clear Borra todos los elementos de la lis ta.

Ins ert Ins erta un elemento en la pos ición indicada por el


índice.

Remove Elimina un elemento de la lis ta de acuerdo a s u índice.

Control CheckedListBox

Es un nuevo control que antes s e obtenía configurando la propiedad s tyle del control
Lis tbox a checked. Como es s imilar al control Lis tBox s olo mencionaremos las
caracterís ticas dis tintas que tiene el control CheckedLis tBox.

89 de 197
Propiedades

Propiedad Descripción
Name Generalmente us aremos el prefijo ckl.

CheckOnClick Es tablece s i el control podrá s er fijado la primera vez


al dar click.

ThreeDCheckBox Indica s i la apariencia de los items s e mos trará en


3D o plano.

Métodos

Método Descripción
GetItemChecked Devuelve true s i un cierto item ha s ido
s eleccionado o fals e s i no.

GetItemCheckState Devuelve el valor de la propiedad CheckState de un


cierto item.

SetItemChecked Es tablece o quita la s elección de un cierto


elemento.

SetItemCheckState Es tablece la propiedad CheckState de un cierto


elemento.

Eventos

90 de 197
Evento Descripción
ItemCheck Ocurre al s eleccionar un elemento y poner el
check en true.

SelectedIndexChanged Ocurre al s eleccionar otro elemento.

Control ComboBox

91 de 197
Propiedades

Propiedad Descripción
Name Generalmente us aremos el prefijo cbo.

Items Es la principal propiedad y s e refiere a los


elementos del combo.

MaxDropDownItems Indica el máximo número de elementos que s e


mos trarán al des plegars e el combo.

MaxLenght Determina el máximo número de caracteres que


s e podrán es cribir en el cuadro de texto del
combo.

Sorted Ordena los elementos del combo en forma


as cendente.

Style Es pecifica el tipo de combo que puede s er:


Simple, DropDown (por defecto), y DropDownLis t.

SelectedIndex Devuelve o es tablece el índice del elemento


s eleccionado.

SelectedItem Devuelve el ítem s eleccionado de la lis ta.

SelectedText Devuelve el texto s eleccionado de la lis ta.

Text Se refiere al texto es crito en el cuadro del combo.

92 de 197
Métodos

Método Descripción
FindString Devuelve el índice de un elemento bus cado en el
combo. Si no exis te devuelve -1 y s i exis te devuelve
un número mayor que -1.

FindStringExact Realiza una labor s imilar al método anterior pero


compara con exactitud la cadena.

93 de 197
Eventos

Evento Descripción
Click Ocurre al dar clic con el mous e a un
elemento de la lis ta.

DoubleClick Se da al dar dos veces clic s obre un


elemento de la lis ta.

SelectedIndexChanged Ocurre al cambiar el índice del elemento


s eleccionado.

SelectionChangeCommited Se da cuando s e s elecciona un elemento


del combo.

TextChanged Ocurre al cambiar la propiedad Text del


combo.

Colección Items

La colección Items del combo es s imilar a la del Lis tBox.

Propiedades

Propiedad Descripción
All Devuelve un objeto con todos los elementos del
combo.

94 de 197
Count Devuelve el número de elementos del combo.

Métodos

Método Descripción
Add Añade un elemento al final del combo.

Clear Borra todos los elementos del combo.

Ins ert Ins erta un elemento en la pos ición indicada por el


índice.

Remove Elimina un elemento del combo de acuerdo a s u


índice.

95 de 197
Interfaces

Introducción

Una interface es el medio de comunicación entre 2 entidades , en nues tro cas o, la


interface s irve de enlace entre el us uario y la aplicación.

En la evolución de la computación s e inicia con interfaces de texto o de cons ola, las


cuales predominan des de los inicios de la computación has ta cas i la mitad de la
década del 80, luego aparecen las interfaces gráficas .

Des de que trabajamos en ambiente Windows , las interfaces han ido evolucionando de
acuerdo a la facilidad del us uario para acceder a los elementos de la aplicación, y
entre las principales interfaces tenemos :

SDI (Single Document Interface): Interface de Simple Documento, mues tra una
s ola ventana con un cierto documento en la aplicación; el acces o a las ventanas
es s ecuencial, por lo que no es tan recomendable. Algunas aplicaciones con SDI
s on los acces orios de Windows : Bloc de notas , Paint, Wordpad, etc.

MDI (Multiple Document Interface): Interface de Múltiples Documentos ,


mues tra varios documentos en s us res pectivas ventanas , las cuales aparecen
s obre una ventana principal; el acces o a las ventanas es directo porque
generalmente en la ventana padre exis te un menú. Algunas aplicaciones con MDI
s on los programas de Office: Word y Excel.

TreeView - ListView (Vistas Árbol – Lista): Mues tra los elementos de la


aplicación en un árbol (TreeView) y en el lado derecho mues tra una lis ta con los
detalles (Lis tView); puede mos trars e junto a un SDI como en el cas o del
Explorador de archivos de Windows o puede mos trars e junto a un SDI como en el
cas o del Enterpris e Manager de SQL Server 6 o s uperior.

Con la evolución de Internet también s e dis tinguen diferentes tipos de interfaces en el


brows er, pero que no s e tocan en es te capítulo, s i no que nos centraremos en la
creación de interfaces para aplicaciones Windows .

96 de 197
Creando Aplicaciones MDI

Una aplicación MDI cons ta de 2 partes : un Formulario MDI Padre y uno o mas
Formularios MDI Hijos , la creación de ambos es muy s encilla en VB .NET y s e explica a
continuación:

Creando un Formulario MDI Padre

Para crear un Formulario MDI padre s olo hay que configurar la propiedad
IsMDIContainer del formulario a True.

A diferencia de la vers ión anterior de Vis ual Bas ic, es ta vers ión permite colocar
cualquier control WinForm dentro del formulario MDI, pero es to hará que los
formularios hijos s e mues tren en s egundo plano, ya que en primer plano s e verán los
controles del formulario MDI padre.

Creando un Formulario MDI Hijo

Para crear un Formulario MDI hijo s olo hay que configurar la Propiedad Parent
(dis ponible s olo en tiempo de ejecución) del formulario hijo apuntando al formulario
padre y luego us ar el método Show para mos trarlo.

El s iguiente código mues tra como mos trar un formulario hijo des de un menú:

Protected Sub mnuArchivo_Nuevo_Click(ByVal s ender As Object, …)

Dim X As New frmHijo()

X.MDIParent = frmPadre

97 de 197
X.Show()

End Sub

Organizando Formularios MDI Hijos

Si es que des ea organizar los formularios MDI hijos s e debe us ar el método


LayoutMDI del formulario MDI padre junto con una cons tante de tipo MDILayaout, que
tiene 4 valores : ArrangeIcons , Cas cade, TileHorizontal y TileVertical.

A continuación s e mues tra como ordenar en Cas cada los formularios MDI hijos de un
formulario MDI Padre llamado frmPadre:

frmPadre.LayoutMDI(MDILayout.Cas cade)

Controles TreeView y ListView

Es tos 2 controles cas i s iempre trabajan juntos , uno mues tra los elementos de la
aplicación y el otro s u contenido o detalle. Antes es taban dis ponibles como controles
ActiveX, ahora en VB NET es tán dis ponibles como controles del WinForm.

Ambos controles generalmente us an imágenes para mos trar los elementos , por lo
cual primero veremos el us o del control ImageLis t para almacenar imágenes de las
vis tas .

Trabajando con el ImageList

Para llenar una lis ta de imágenes realice los s iguientes pas os :

Doble clic al control ImageLis t del ToolBox y s e mos trará en la parte inferior del
dis eñador de formularios .

98 de 197
Configurar la propiedad “Name” us ando el prefijo ils s eguido del nombre y la
propiedad “ImageSize” que define el tamaño de las imágenes : 16, 32, 48 etc.

Seleccionar la propiedad “Image” que es una colección y puls ar s obre el botón ,


entonces aparecerá el diálogo “Image Collection Editor” en el cual s e añadirán las
imágenes con el botón “Add” y s e eliminarán con “Remove”.

Figura 3.3: Editor de la Colección de Imágenes

Trabajando con el TreeView

El trabajo con el TreeView es mas s encillo con VB NET, para lo cual s e realiza los
s iguientes pas os :

Llenar un ImageLis t con las imágenes que s e us aran en el TreeView.

Dar doble clic al control TreeView y configurar la propiedad “Name” es cribiendo el


prefijo tvw s eguido del nombre.

99 de 197
Configurar la propiedad “Anchor” en TopBottomLeft para que al modificars e de
tamaño el formulario s e ajus te automáticamente el tamaño del TreeView.

Configurar la propiedad “ImageLis t” eligiendo el nombre de la Lis ta de Imágenes .

Seleccionar la propiedad “Nodes ” que es una colección y puls ar s obre el botón


, aparecerá el dialogo “TreeNode Editor”.

Para crear un nodo principal dar clic en el botón “Add Root”, luego s eleccionar el
nodo y es cribir en “Label” el texto que irá en el nodo, finalmente en las lis tas
“Images ” y “Selected Imag” elegir las imágenes que s e verán en el nodo.

Para crear un nodo hijo dar clic en el botón “Add Child” y s eguir el mis mo pas o
anterior, es decir, s eleccionar el nodo hijo, es cribir el “Label” y llenar las lis tas .

Figura 3.4: Editor de la Colección de Nodos

100 de 197
Trabajando con el ListView

El trabajo con el Lis tView es s imilar al del TreeView, realizándos e los s iguientes pas os :

Llenar dos ImageLis t con las imágenes que s e us aran en el Lis tView para la vis ta
de Iconos grandes y otra para la vis ta de Iconos pequeños .

Dar doble clic al control Lis tView y configurar la propiedad “Name” es cribiendo el
prefijo lvw s eguido del nombre.

Configurar la propiedad “Anchor” en All para que al modificars e de tamaño el


formulario s e ajus te automáticamente el tamaño del Lis tView.

Configurar las propiedad “LargeImageLis t” y “SmallImageLis t” eligiendo el


nombre de las Lis tas de Imágenes grande y pequeña res pectivamente.

Seleccionar la propiedad “Lis tItems ” que es una colección y puls ar s obre el botón
, aparecerá el dialogo “Lis tItem Collection Editor”, en el cual s e añadirán items
con el botón “Add” y s e eliminarán con “Remove”.

Para añadir un Lis tItem clic en “Add” y es cribir en “Text” el texto del item, en
“Index” indicar el índice de la imagen de las lis tas . Además de llenar la colección
de Lis tItems también s e debe llenar la colección de “Columns ” para las
cabeceras de las columnas en la vis ta detalle.

Figura 3.5: Editor de la Colección de ListItem

101 de 197
102 de 197
Añadiendo Menús, Diálogos y Barras

Una vez creada la interface de la aplicación, es neces ario aumentar caracterís ticas que
ayuden a facilitar el trabajo al us uario; tales como: menús que permitan organizar
opciones , diálogos que faciliten la elección de archivos , colores , fuentes , etc. y barras
de herramientas que permitan elegir opciones rápidamente.

Menús

Un menú mues tra un conjunto de opciones dis tribuidas u organizadas de acuerdo a


categorías que el us uario defina.

En Windows , exis ten dos tipos de menús muy us ados :

1. Menús Principales: Se acoplan en algún extremo del formulario, generalmente,


en la parte s uperior de és te.

2. Menús Contextuales: También llamados Flotantes , generalmente, s e mues tran


al dar clic derecho s obre algún objeto y s u contenido varía de acuerdo al contexto.

Control MainMenu

Permite crear un menú principal, para lo cual s e realizan los s iguientes pas os :

Dar doble clic s obre el control “MainMenu” del ToolBox y s e mos trarán 2 objetos :
uno en la parte s uperior del formulario que es donde s e crearán las opciones del
menú y otro en la parte inferior del dis eñador de formularios que repres enta a
todo el menú.

103 de 197
Para crear una opción del menú s olo hay que es cribir directamente donde dice
“Type Here” (propiedad Text), luego configuramos el nombre de la opción
mediante la propiedad “Name” us ando el prefijo mnu s eguido del nombre.

Si des eamos crear un acces o directo para alguna opción del menú configuramos
la propiedad “ShortCut” eligiendo un valor de la lis ta.

Para crear una opción que s ea un s eparador s implemente en el “Text” es cribir


“-“.

Des pués de crear todas las opciones del menú principal es cribir código para cada
opción, generalmente en el evento “Click”. Aunque s i des eamos realizar una
acción como mos trar un mens aje al pas ar por la opción s e puede us ar el evento
“Select”.

104 de 197
Control ContextMenu

Se us a para crear un menú contextual, para lo cual s e realizan los s iguientes pas os :

Dar doble clic s obre el control “ContextMenu” del ToolBox y s e mos trarán 2
objetos : uno en la parte s uperior del formulario que es donde s e crearán las
opciones del menú y otro en la parte inferior del dis eñador de formularios que
repres enta a todo el menú contextual.

La creación de las opciones del menú contextual es s imilar a la creación de un


menú principal; aunque s i s e des ea crear un menú contextual de un s olo nivel,
las opciones s e deben crear en forma horizontal (pero s e verán en forma
vertical).

Finalmente el menú contextual debe mos trars e al dar clic derecho s obre un cierto
objeto (generalmente un control); antes s e cons eguía es to programando en el
evento Mous eDown del objeto; ahora s olo configuramos la propiedad
“ContextMenu” del objeto as ignándole el objeto menú contextual.

Diálogos

Controles OpenFileDialog y SaveFileDialog

Es tos controles s e us an para facilitar el trabajo con archivos , el primero s e refiere al


diálogo de “Abrir Archivo” y el s egundo al diálogo “Guardar Archivo”, que en la vers ión
anterior es taban dis ponibles como Controles ActiveX.

Ambos tienen caracterís ticas s imilares que detallamos a continuación:

Propiedades

Propiedad Descripción

105 de 197
Name Para el OpenFileDialog generalmente us aremos el
prefijo odg.

Para el SaveFileDialog generalmente us aremos el


prefijo s dg.

AddExtens ion Añade automáticamente la extens ión al nombre del


archivo.

CheckFileExits Chequea que exis ta el archivo antes de regres ar del


diálogo.

CheckPathExits Chequea que exis ta la ruta del archivo antes de


regres ar del diálogo.

CreatePrompt Solo para el diálogo de Guardar. Si la propiedad


ValidateName es true pide confirmación al us uario
cuando el archivo es creado.

DefaultEx Indica la extens ión por defecto del archivo.

FileName Indica el archivo es crito o s eleccionado del diálogo.

Filter Es pecifica el tipo de archivo que s e mos trará en el


diálogo.

FilterIndex Determina el índice del filtro del diálogo. Es te empieza


en 1 y depende de la lis ta de tipos de archivos
configurada por Filter.

InitialDirectory Mues tra un cierto directorio inicial para los archivos del
diálogo.

106 de 197
Multis elect S olo para el diálogo de Abrir. Determina s i s e pueden
s eleccionar varios archivos a la hora de abrir.

OverwritePrompt Solo para el diálogo de Guardar. Si la propiedad


ValidateName es true pide confirmación al us uario
cuando un archivo creado exis te.

ReadOnlyChecked S olo para el diálogo de Abrir. Determina el es tado del


checkbox ReadOnly en el diálogo de abrir.

Res toreDirectory Controla s i el diálogo res taura el directorio actual antes


de cerrars e.

ShowHelp Vis ualiza o no el botón de Ayuda en el diálogo.

ShowReadOnly S olo para el diálogo de Abrir. Determina s i s e mues tra


o no el checkbox ReadOnly en el diálogo de abrir.

Tile Indica el título a mos trars e en la barra de título del


diálogo.

ValidateNames Controla que el nombre del archivo no tenga caracteres


inválidos .

Métodos

Método Descripción
OpenFile Devuelve un Stream indicando el archivo abierto en el
diálogo de abrir o grabado en el diálogo de guardar.

107 de 197
ShowDialog Mues tra el diálogo de archivo, s ea de abrir o de
guardar.

Eventos

Evento Descripción

FileOk Ocurre al dar clic s obre el botón OK del diálogo de


archivo.

108 de 197
Control FontDialog

Es te control s e us a para mos trar el diálogo de fuente y poder acceder a s us


caracterís ticas como tipo de fuente, tamaños , es tilos , efectos , etc.

Propiedades

Propiedad Descripción
Name Generalmente us aremos el prefijo fdg.

AllowScriptChange Controla s i el conjunto de caracteres de fuente puede


s er cambiado.

Color Devuelve el color de fuente s eleccionado en el diálogo.

Font Determina la fuente s eleccionada en el diálogo. Es un


objeto.

FontMus tExis t Indica s i s e mos trará un reporte de error al no exis tir


una fuente.

MaxSize Máximo tamaño de la fuente en puntos .

MinSize Mínimo tamaño de la fuente en puntos .

Scripts Only Controla s i excluirá los caracteres OEM y s ímbolos .

ShowApply Determina s i s e verá el botón de Aplicar en el diálogo.

109 de 197
ShowColor Indica s i s e mos trará el color elegido del diálogo.

ShowEffects Mues tra el cuadro de efectos que trae: s ubrayado,


tachado y color.

ShowHelp Vis ualiza o no el botón de Ayuda en el diálogo.

Métodos

Método Descripción

ShowDialog Mues tra el diálogo de fuente.

Eventos

Evento Descripción

Apply Ocurre al dar clic s obre el botón de aplicar del diálogo


de fuente.

110 de 197
Control ColorDialog

Es te control s e us a para mos trar el diálogo de colores y poder acceder a s us


caracterís ticas como s eleccionar un color s ólido o pers onalizado.

Propiedades

Propiedad Descripción
Name Generalmente us aremos el prefijo cdg.

AllowFullOpen Habilita o no el botón de pers onalizar colores .

AnyColor Controla s i cualquier color puede s er s eleccionado.

Color Indica el color s eleccionado en el diálogo.

FullOpen Determina s i la s ección de colores pers onalizados s erá


inicialmente vis ta.

ShowHelp Vis ualiza o no el botón de Ayuda en el diálogo.

SolidColorOnly Controla s i s olo los colores s ólidos pueden s er


s eleccionados .

Métodos

Método Descripción

ShowDialog Mues tra el diálogo de colores .

111 de 197
Eventos

Evento Descripción

HelpReques ted Ocurre al dar clic s obre el botón de ayuda del diálogo
de color.

112 de 197
Barras

Las Barras s on muy importantes en una aplicación ya que permiten mos trar algunos
acces os directos , mos trar el es tado en que s e encuentra la aplicación, etc.

Control ToolBar

Sirve para crear una Barra de Herramientas , para lo cual s e realizan los s iguientes
pas os :

Llenar un ImageLis t con las imágenes que s e us aran en el ToolBar.

Dar doble clic al control ToolBar y configurar la propiedad “Name” es cribiendo el


prefijo tbr s eguido del nombre. Luego configurar la propiedad “ImageLis t”
eligiendo el nombre de la Lis ta de Imágenes .

Seleccionar la propiedad “Buttons ” que es una colección y puls ar s obre el botón


, aparecerá el dialogo “ToolBarButton Collection Editor”.

Para crear un botón dar clic en el botón “Add”, luego modificar las propiedades
“ImageIndex” para indicar el índice de la imagen a mos trar, opcionalmente en
“ToolTipText” es cribir un comentario y en “Text” es cribir un título.

Finalmente programar en el evento “ButtonClick” las acciones de los botones .

Figura 3.6: Editor de la Colección de Botones del ToolBar

113 de 197
114 de 197
Control StatusBar

Se us a para crear una Barra de Es tado, para lo cual s e realizan los s iguientes pas os :

Dar doble clic al control Status Bar y configurar la propiedad “Name” es cribiendo
el prefijo s br s eguido del nombre.

Configurar la propiedad “ShowPanels ” en true para poder ver los paneles .

Seleccionar la propiedad “Panels ” que es una colección y puls ar s obre el botón


, aparecerá el dialogo “Status BarPanels Collection Editor”.

Para crear un panel dar clic en el botón “Add”, luego modificar s us propiedades ,
tales como: “Aligment”, “BorderStyle”, “Icon”, “Style”, “Text”, “ToolTipText” y
“Width”

Si s e des ea realizar alguna tarea al dar clic a un cierto panel, programar en el


evento “PanelClick” las acciones que realizará el panel.

Figura 3.7: Editor de la Colección de Paneles del StatusBar

115 de 197
Nota: En es ta vers ión de Vis ual Bas ic los paneles no traen una propiedad que permita
mos trar automáticamente el es tado de las teclas Caps Lock, NumLock, o que mues tre
la fecha u hora, etc.

116 de 197
Laboratorio 3:

El pres ente laboratorio tiene como objetivo trabajar con aplicaciones para Windows ,
us ando controles “Windows Forms ” y añadiendo caracterís ticas como barras de
herramientas , barras de es tado, diálogos , etc. Es te laboratorio es tá dividido en 2
ejercicios que tienen una duración aproximada de 50 minutos.

Ejercicio 1: Usando Controles para Windows

Duración: 20 minutos

Elegir un nuevo proyecto “Vis ual Bas ic” y una plantilla de “Aplicación Windows ”,
s eleccionar en ubicación la carpeta “C:\VBNET\Labs ” y como nombre es cribir
“Lab04_1”.

Vamos a crear una aplicación de tipo Proforma, que calcule el precio a pagar por
un Computador eligiendo las partes bás icas y opcionalmente s us acces orios ;
para es to, el nombre del formulario s erá “frmProforma.vb”.

Realizar el dis eño del formulario añadiendo un “TabControl” con 3 “TabPages ” y


dis eñar las fichas , tal como s e mues tran en la figuras de abajo:

Figura 3.8: Diseño de la primera ficha de frmProforma

117 de 197
118 de 197
Figura 3.9: Diseño de la segunda ficha de frmProforma

Nota: Los “GroupBox” de lectoras y los “Lis tBox” es tán des habilitados .

Figura 3.10: Diseño de la tercera ficha de frmProforma

119 de 197
120 de 197
Luego de realizar el dis eño y configurar las propiedades de los controles ; lo
primero que haremos es es cribir una rutina que permita llenar el combo y las
lis tas , de la s iguiente forma:

Public Sub Llenar_Lis tas ()

With cboProces ador.Items

.Add("Pentium II 350 Mhz")

.Add("Pentium III 400 Mhz")

.Add("Pentium III 500 Mhz")

.Add("Pentium III 700 Mhz")

End With

With ls tMemoria.Items

.Add("32 Mb")

.Add("64 Mb")

.Add("128 Mb")

End With

With ls tDis co.Items

.Add("10 Gb")

.Add("20 Gb")

.Add("30 Gb")

End With

With ls tImpres ora.Items

.Add("Stylus Color 400")

.Add("Stylus Color 500")

.Add("Stylus Color 700")

End With

With ls tScanner.Items

121 de 197
.Add("Pequeño")

.Add("Mediano")

.Add("Grande")

End With

End Sub

A continuación, s e debe llamar a la rutina des pués que s e crea el formulario:

Public Sub frmProforma_Load(…)

Llenar_Lis tas ()

End Sub

Se debe programar el combo y las lis tas de la primera ficha “Configuración


Bás ica” para que al elegir un tipo de proces ador, memoria o dis co duro, s e
mues tre el precio res pectivo:

Public Sub cboProces ador_SelectedIndexChanged(ByVal s ender As …)

Select Cas e cboProces ador.SelectedIndex

Cas e 0

txtPrecioProces ador.Text = "100"

Cas e 1

txtPrecioProces ador.Text = "150"

Cas e 2

txtPrecioProces ador.Text = "200"

Cas e 3

txtPrecioProces ador.Text = "300"

End Select

122 de 197
End Sub

Public Sub ls tMemoria_SelectedIndexChanged(ByVal s ender As …)

Select Cas e ls tMemoria.SelectedIndex

Cas e 0

txtPrecioMemoria.Text = "30"

Cas e 1

txtPrecioMemoria.Text = "50"

Cas e 2

txtPrecioMemoria.Text = "70"

End Select

End Sub

Public Sub ls tDis co_SelectedIndexChanged(ByVal s ender As …)

Select Cas e ls tDis co.SelectedIndex

Cas e 0

txtPrecioDis co.Text = "80"

Cas e 1

txtPrecioDis co.Text = "100"

Cas e 2

txtPrecioDis co.Text = "120"

End Select

End Sub

También s e debe realizar lo mis mo al elegir una opción del grupo de botones ,
tanto del monitor como del teclado:

Public Sub rbnMonitor14_Click(ByVal s ender As Object, …)

txtPrecioMonitor.Text = "150"

End Sub

123 de 197
Public Sub rbnMonitor15_Click(ByVal s ender As Object, …)

txtPrecioMonitor.Text = "200"

End Sub

Public Sub rbnTecladoSimple_Click(ByVal s ender As Object, …)

txtPrecioTeclado.Text = "15"

End Sub

Public Sub rbnTecladoLujo_Click(ByVal s ender As Object, …)

txtPrecioTeclado.Text = "30"

End Sub

Programamos la s egunda ficha de “Acces orios ”, iniciando por la cas illa de lectora
de dis co, para que al elegir es te acces orio s e habilite s us opciones (ya que las
des habilitamos en dis eño) y al elegir un modelo s e mues tre s u precio:

Public Sub chkLectoraDis co_Click(ByVal s ender As Object, …)

gbxLectoraDis co.Enabled = chkLectoraDis co.Checked

End Sub

Public Sub rbnLectoraDis co1_Click(ByVal s ender As Object, …)

txtPrecioLectoraDis co.Text = "20"

End Sub

Public Sub rbnLectoraDis co2_Click(ByVal s ender As Object, …)

txtPrecioLectoraDis co.Text = "40"

End Sub

Public Sub rbnLectoraDis co3_Click(ByVal s ender As Object, …)

txtPrecioLectoraDis co.Text = "50"

End Sub

124 de 197
De manera s imilar, lo hacemos con la lectora de CD ROM:

Public Sub chkLectoraCD_Click(ByVal s ender As Object, …)

gbxLectoraCD.Enabled = chkLectoraCD.Checked

End Sub

Public Sub rbnLectoraCD40X_Click(ByVal s ender As Object, …)

txtPrecioLectoraCD.Text = "40"

End Sub

Public Sub rbnLectoraCD60X_Click(ByVal s ender As Object, …)

txtPrecioLectoraCD.Text = "50"

End Sub

Public Sub rbnLectoraCD80X_Click(ByVal s ender As Object, …)

txtPrecioLectoraCD.Text = "70"

End Sub

Para la opción de Impres oras y Scanner s e realiza el mis mo procedimiento:

Public Sub chkImpres ora_Click(ByVal s ender As Object, …)

ls tImpres ora.Enabled = chkImpres ora.Checked

End Sub

Public Sub ls tImpres ora_SelectedIndexChanged(ByVal s ender As …)

ls tImpres ora.SelectedIndexChanged

Select Cas e ls tImpres ora.SelectedIndex

Cas e 0

txtPrecioImpres ora.Text = "100"

125 de 197
Cas e 1

txtPrecioImpres ora.Text = "200"

Cas e 2

txtPrecioImpres ora.Text = "300"

End Select

End Sub

Public Sub chkScanner_Click(ByVal s ender As Object, …)

ls tScanner.Enabled = chkScanner.Checked

End Sub

Public Sub ls tScanner_SelectedIndexChanged(ByVal s ender As …)

Select Cas e ls tScanner.SelectedIndex

Cas e 0

txtPrecioScanner.Text = "100"

Cas e 1

txtPrecioScanner.Text = "200"

Cas e 2

txtPrecioScanner.Text = "400"

End Select

End Sub

Finalmente, programamos los botones de la tercera ficha “General”, que calculen


el precio a pagar, limpie los datos ingres ados y finalice la aplicación
res pectivamente:

Public Sub btnCalcular_Click(ByVal s ender As Object, …)

Dim PrePro, PreMem, PreDis , PreMon, PreTec As Integer

Dim PreLDi, PreLCD, PreImp, PreSca As Integer

Dim TotBas , TotAcc, TotVen, TotIGV, TotPag As Single

126 de 197
PrePro = txtPrecioProces ador.Text.ToInt16

PreMem = txtPrecioMemoria.Text.ToInt16

PreDis = txtPrecioDis co.Text.ToInt16

PreMon = txtPrecioMonitor.Text.ToInt16

PreTec = txtPrecioTeclado.Text.ToInt16

PreLDi = txtPrecioLectoraDis co.Text.ToInt16

PreLCD = txtPrecioLectoraCD.Text.ToInt16

PreImp = txtPrecioImpres ora.Text.ToInt16

PreSca = txtPrecioS canner.Text.ToInt16

TotBas = PrePro + PreMem + PreDis + PreMon + PreTec

TotAcc = PreLDi + PreLCD + PreImp + PreSca

TotVen = TotBas + TotAcc

TotIGV = (0.18 * TotVen).ToSingle

TotPag = TotVen + TotIGV

txtTotalBas ico.Text = TotBas .ToString

txtTotalAcces orios .Text = TotAcc.ToString

txtTotalVenta.Text = TotVen.ToString

txtTotalIGV.Text = TotIGV.ToString

txtTotalPagar.Text = TotPag.ToString

End Sub

Public Sub btnNuevo_Click(ByVal s ender As Object, …)

Dim X As Control

For Each X In Controls

If ((TypeOf X Is TextBox) Or (TypeOf X Is ComboBox)) Then

X.Text = ""

End If

127 de 197
Next

End Sub

Public Sub btnSalir_Click(ByVal s ender As Object, …)

End

End Sub

Ejercicio 2: Creando aplicaciones MDI con Menús, Diálogos y Barras

Duración: 30 minutos

Es tando en Vis ual S tudio .NET, elegir un nuevo proyecto de “Vis ual Bas ic” y una
plantilla de “Aplicación Windows ”, s eleccionar como ubicación la carpeta
“C:\VBNET\Labs ” y como nombre ingres ar “Lab04_2”.

Se va a crear un editor de texto enriquecido, es decir un programa que lea y


recupere archivos RTF para lo cual neces itamos un formulario principal de tipo
MDI y un formulario hijo para mos trar los documentos RTF.

En la ventana del “S olution Explorer” s eleccionar el nombre del formulario y en la


ventana de propiedades es cribir en “FileName” el nombre “mdiEditor.vb”, para
que es te formulario s ea MDI configurar s u propiedad “Is MDIContainer” en “True”.

Realizar el dis eño del formulario “mdiEditor” que contenga un menú de 4


opciones , una barra de herramientas con 9 botones (2 s eparadores ) y una barra
de es tado con 4 paneles , tal como s e mues tra en la s iguiente figura:

Figura 3.11: Diseño del formulario mdiEditor

128 de 197
También neces itamos añadir diálogos de abrir, guardar, fuente y colores , y una
lis ta de imágenes para almacenar las figuras de los botones de la barra de
herramientas .

129 de 197
Seguidamente, añadir otro formulario colocándole como nombre
“frmDocumento.vb” y luego añadirle un menú contextual llamado “mnuPopup” con
3 opciones (Copiar, Cortar y Pegar) y un RichTextBox de nombre “rtbEditor” con la
propiedad “Anchor” en “All” para que s e ajus te al tamaño de la ventana al
cambiar de tamaño.

Figura 3.12: Diseño del formulario frmDocumento

Proceder a ins ertar un módulo es tándar, donde s e defina una variable que
almacene el número de documentos abiertos , tal como s igue:

Module Modulo

Public N As Byte

End Module

Ingres ar al código del primer formulario “mdiEditor” y es cribir las s iguientes


rutinas de validación:

130 de 197
Public Sub Validar_Menus _Boton(ByVal Habilitado As Boolean)

mnuArchivo_Guardar.Enabled = Habilitado

mnuEdicion.Enabled = Habilitado

mnuFormato.Enabled = Habilitado

mnuVentana.Enabled = Habilitado

ToolBarButton3.Enabled = Habilitado

End Sub

Public Sub Validar_Copiar_Cortar(ByVal Habilitado As Boolean)

mnuEdicion_Copiar.Enabled = Habilitado

mnuEdicion_Cortar.Enabled = Habilitado

ToolBarButton5.Enabled = Habilitado

ToolBarButton6.Enabled = Habilitado

End Sub

Public Sub Validar_Pegar(ByVal Habilitado As Boolean)

mnuEdicion_Pegar.Enabled = Habilitado

ToolBarButton7.Enabled = Habilitado

End Sub

Public Sub Iniciar_Editor()

Validar_Menus _Boton(Fals e)

Validar_Copiar_Cortar(Fals e)

Validar_Pegar(Fals e)

End Sub

Public Sub Cambiar_Nombre(ByVal Nombre As String)

Me.ActiveMDIChild.Text = Nombre

Status BarPanel1.Text = Nombre

131 de 197
End Sub

Programar en el inicio del formulario la configuración inicial del editor, tal como s e
mues tra a continuación:

Public Sub frmEditor_Load(…)

Status BarPanel3.Text = "0 Docs "

Status BarPanel3.ToolTipText = "Numero de Documentos Abiertos "

Status BarPanel4.Text = Date.Now.ToLongTimeString

Status BarPanel4.ToolTipText = Date.Today.ToLongDateS tring

Iniciar_Editor()

End Sub

Es cribir el s iguiente código para las opciones del menú “Archivo”:

Public Sub mnuArchivo_Nuevo_Click(ByVal s ender As Object, …)

Dim X As New Form2()

N += 1

X.MDIParent = Form1

X.Text = "Documento " & N.ToString

X.Show()

Validar_Menus _Boton(True)

End Sub

Public Sub mnuArchivo_Abrir_Click(ByVal s ender As Object, …)

With odgEditor

.Title = "Abrir archivo de texto enriquecido"

132 de 197
.Filter = "Archivo de texto enriquecido (*.rtf)|*.rtf"

If .ShowDialog()=DialogRes ult.OK And .FileName<>"" Then

If Me.ActiveMDIChild = Nothing Then _

mnuArchivo_Nuevo.PerformClick()

Dim X As RichTextBox = _

Me.ActiveMDIChild.ActiveControl()

X.LoadFile(.FileName)

Cambiar_Nombre(.FileName)

End If

End With

End Sub

Public Sub mnuArchivo_Guardar_Click(ByVal s ender As Object, …)

With s dgEditor

.Title = "Guardar archivo de texto enriquecido"

.Filter = "Archivo de texto enriquecido (*.rtf)|*.rtf"

If .ShowDialog()=DialogRes ult.OK And .FileName<>"" Then

Dim X As RichTextBox = _

Me.ActiveMDIChild.ActiveControl()

X.SaveFile(.FileName)

Cambiar_Nombre(.FileName)

End If

End With

End Sub

Public Sub mnuArchivo_Salir_Click(ByVal s ender As Object, …)

End

End Sub

133 de 197
Programar las opciones del menú “Edición”, tal como s igue:

Public Sub mnuEdicion_Copiar_Click(ByVal s ender As Object, …)

Dim X As RichTextBox = Me.ActiveMDIChild.ActiveControl()

ClipBoard.SetDataObject(X.SelectedText)

End Sub

Public Sub mnuEdicion_Cortar_Click(ByVal s ender As Object, …)

Dim X As RichTextBox = Me.ActiveMDIChild.ActiveControl()

ClipBoard.SetDataObject(X.SelectedText)

X.SelectedText = ""

End Sub

Public Sub mnuEdicion_Pegar_Click(ByVal s ender As Object, …)

Dim X As RichTextBox = Me.ActiveMDIChild.ActiveControl()

Dim iData As IDataObject = Clipboard.GetDataObject()

If iData.GetDataPres ent(DataFormats .RTF) Then

X.SelectedText = iData.GetData(DataFormats .Text)

End If

End Sub

A continuación, es cribir código para las opciones del menú “Formato”:

Public Sub mnuFormato_Fondo_Click(ByVal s ender As Object, …)

Dim X As RichTextBox = Me.ActiveMDIChild.ActiveControl()

With cdgEditor

If .ShowDialog() = DialogRes ult.OK Then

134 de 197
X.BackColor = .Color

End If

End With

End Sub

Public Sub mnuFormato_Fuente_Click(ByVal s ender As Object, …)

Dim X As RichTextBox = Me.ActiveMDIChild.ActiveControl()

With fdgEditor

.ShowColor = True

If .ShowDialog() = DialogRes ult.OK Then

X.ForeColor = .Color

End If

End With

End Sub

Para organizar la pres entación de las ventanas hijas , es cribir código para las
opciones del menú “Ventana”:

Public Sub mnuVentana_Cas cada_Click(ByVal s ender As Object, …)

Form1.LayoutMDI(MDILayout.Cas cade)

End Sub

Public Sub mnuVentana_Mos aicoV_Click(ByVal s ender As Object, …)

Form1.LayoutMDI(MDILayout.TileVertical)

End Sub

Public Sub mnuVentana_Mos aicoH_Click(ByVal s ender As Object, …)

Form1.LayoutMDI(MDILayout.TileHorizontal)

End Sub

135 de 197
Public Sub mnuVentana_OrganizarI_Click(ByVal s ender As Object, …)

Form1.LayoutMDI(MDILayout.Cas cade)

End Sub

Una vez es crito el código para los menús , hacerlo para los botones de la barra de
herramientas :

Public Sub tbrEditor_ButtonClick(ByVal s ender As Object, …)

Select Cas e e.button.ImageIndex

Cas e 0

mnuArchivo_Nuevo.PerformClick()

Cas e 1

mnuArchivo_Abrir.PerformClick()

Cas e 2

mnuArchivo_Guardar.PerformClick()

Cas e 3

mnuEdicion_Copiar.PerformClick()

Cas e 4

mnuEdicion_Cortar.PerformClick()

Cas e 5

mnuEdicion_Pegar.PerformClick()

Cas e 6

End

End Select

End Sub

136 de 197
Para que cada vez que s e activa una ventana de documento, s e vea el nombre del
documento en el primer panel de la barra de es tado, es cribir lo s iguiente:

Public Sub Form1_MDIChildActivate(ByVal s ender As Object, …)

Status BarPanel1.Text = Me.ActiveMDIChild.Text

End Sub

Ingres ar al formulario “frmDocumento” y es cribir código para que cada vez que
s e cierre una ventana de documento s e dis minuya la variable de contador y s e
verifique que s i no hay ventanas abiertas s e inicialice el editor:

Public Sub Form2_Clos ed(ByVal s ender As Object, …)

N -= 1

If N = 0 Then

Dim X As Form1 = Me.MDIParent

X.Iniciar_Editor()

End If

End Sub

Para habilitar las opciones del menú y los botones de “Edición”, es cribimos :

Public Sub rtbEditor_SelectionChange(ByVal s ender As Object, …)

Dim X As Form1 = Me.MDIParent

X.Validar_Copiar_Cortar(rtbEditor.SelectedText <> "")

X.Validar_Pegar(Clipboard.GetDataObject <> Nothing)

mnuCopiar.Enabled = rtbEditor.SelectedText <> ""

mnuCortar.Enabled = rtbEditor.SelectedText <> ""

mnuPegar.Enabled = Clipboard.GetDataObject <> Nothing

137 de 197
End Sub

Finalmente, programamos las opciones del menú contextual de edición:

Public Sub mnuCopiar_Click(ByVal s ender As Object, …)

ClipBoard.SetDataObject(rtbEditor.SelectedText)

End Sub

Public Sub mnuCortar_Click(ByVal s ender As Object, …)

ClipBoard.SetDataObject(rtbEditor.SelectedText)

rtbEditor.SelectedText = ""

End Sub

Public Sub mnuPegar_Click(ByVal s ender As Object, …)

Dim iData As IDataObject = Clipboard.GetDataObject()

If iData.GetDataPres ent(DataFormats .RTF) Then

rtbEditor.SelectedText = iData.GetData(DataFormats .Text)

End If

End Sub

138 de 197
Módulo 4
Creando Componentes
.NET
Vis ual Bas ic .NET tiene todas las caracterís ticas de la Programación Orientada a
Objetos (POO), ya que el Marco .NET s oporta los requerimientos para que todos los
lenguajes que trabajen con él us en POO. Es tas caracterís ticas s on:

1. Encapsulación

Cuando creamos un componente .NET es te s e encuentra encaps ulado, ya que


oculta la lógica de programación a los us uarios que lo utilizan, permitiendo manejar
dicho objeto a través de s us miembros , tales como propiedades y métodos ,
realizando el des arrollo de aplicaciones mas s imple, al ocultar la complejidad del
código (encaps ular).

2. Herencia

La herencia es la caracterís tica en la cual una clas e llamada “Clas e Bas e” pas a o
hereda todas s us caracterís ticas a otra llamada “Clas e Derivada”, permitiendo la
total reus abilidad del código es crito en las aplicaciones . La herencia de clas es es
una nueva caracterís tica de Vis ual Bas ic .NET y no s olo es a nivel de clas es
creadas en és te lenguaje s ino a través de cualquier lenguaje del Marco .NET.

3. Polimosfismo

Otra caracterís tica interes ante de la POO es el polimorfis mo, en el cas o de Vis ual
Bas ic .NET és te s e puede crear cuando en una clas e derivada s e implementa de
manera dis tinta un método heredado de la clas e bas e. Es decir, podemos tener un
mis mo método con dos comportamientos dis tintos (códigos dis tintos ) de acuerdo al
tipo de objeto, que puede s er creado de la clas e bas e o de la derivada.

Como vemos las nuevas caracterís ticas de la Programación Orientación a Objetos

139 de 197
(POO) mezcladas con la facilidad de us o de la Programación Orientada a Componentes
(POC) dan como res ultado la creación de aplicaciones poderos as y con un bajo cos to
de mantenimiento.

Sin duda, la reus abilidad y encaps ulación ofrecida por la tecnología COM bas ada en
componentes s e ve incrementada por la herencia de clas es y el polimorfis mo ofrecida
por la tecnología .NET orientada a objetos ; lográndos e una verdadera integración entre
aplicaciones .

Para finalizar es ta introducción a los componentes .NET, la otra gran ventaja con
res pecto a COM es la dis tribución de componentes , que en es te último era una
pes adilla debido había que regis trar componentes y lidiar con los problemas de
compatibilidad de vers iones ; en cambio con .NET los componentes no s e regis tran y s u
dis tribución es automática con s olo copiar y pegar la aplicación.

Elementos de una Clase (Miembros)

Todos los componentes es tán formados por clas es y es tas a s u vez s e componen de
elementos o miembros , los cuales trataremos en es te capítulo. Para ilus trar mejor
tenemos el s iguiente gráfico.

igura 4.1: Estructura de un Componente .NET

A diferencia de Vis ual Bas ic 6 en donde las clas es podían tener s olo propiedades ,
métodos , eventos y cons tantes enumeradas ; en Vis ual Bas ic .NET las clas es pueden
tener campos , delegados , cons tructores y des tructores . Además pueda s er que una

140 de 197
clas e herede de otra que es te dentro del componente o en otro componente .NET.

Clase

Una clas e es la plantilla para crear el objeto, es aquí donde s e definen las partes del
objeto: datos (propiedades , cons tantes , enumeraciones , campos ) y procedimientos
que operan s obre los datos (métodos ).

La clas e define un nuevo tipo de datos que res ulta de la abs tracción de algún elemento
en la aplicación, por tanto, es neces ario dis eñar bien la aplicación antes de crear la
clas e, ya que es ta s olo implementa el dis eño de objetos previamente realizado.

Declaración de una Clase

A diferencia de Vis ual Bas ic 6, donde el tipo de clas e es taba dado por la propiedad
“Ins tancing” de la clas e, que podía s er privada (Private), dependiente
(PublicNotCreateTable) o pública (SingleUs e, GlabalSingleUs e, MultiUs e, o
GlobalMultiUs e); en VB .NET no exis te propiedades para el módulo de clas e, ya que las
caracterís ticas de la clas e dependen de la forma de s u declaración.

Sintaxis:

[Tipo de Declaración] Class <Nombre Clas e>

<Definición de miembros de la clas e>

<...>

End Class

Exis ten varias formas de declarar una clas e, que detallamos a continuación en la
s iguiente tabla:

Declaración Alcance o Ámbito


Public Puede us ars e en cualquier otra clas e del componente
o en las aplicaciones clientes .

141 de 197
Private No puede us ars e en otras clas es del componente ni
en las aplicaciones clientes .

Protected Solo puede s er us ada por las clas es derivadas de


és te, pero no por las aplicaciones clientes .

Friend Solo puede s er us ada por las otras clas es del


componente, pero no por las aplicaciones clientes .

Protected Es una combinación de ambas , es decir, la clas e


Friend puede s er us ada por otras clas es del componente y
por las clas es derivadas .

Shadows Indica que los miembros de la clas e pueden ocultars e


en la clas e derivada, es decir que al heredar s e
ocultan ciertos miembros .

Mus tInherit Determina que los miembros de la clas e pueden


heredars e a una clas e derivada, pero no puede s er
creada por aplicaciones clientes

NotInheritable La clas e no puede heredars e pero s i ins tanciars e


des de aplicaciones clientes .

142 de 197
Ejemplo:

Si queremos crear una aplicación de Planilla neces itamos dis eñar un componente que
manipule información del empleado, s us horas trabajadas , tardanzas , faltas , etc.

Para crear la clas e Empleado, de tal manera que pueda heredars e y utilizars e tanto
dentro del componente como en las aplicaciones clientes , definiríamos la clas e en
Vis ual Bas ic, tal como s igue:

Public Clas s Empleado

End Clas s

Constantes, Campos y Enumeraciones

Constantes

Una cons tante es un dato que permanece fijo en toda la ejecución de la aplicación, a
diferencia de la variable, cuyo valor va cambiándos e en tiempo de ejecución.

Se utiliza para facilitar el mantenimiento del código, ya que s i definimos un valor en


una cons tante, s i es te cambia, con s olo cambiar el valor de la cons tante, la aplicación
trabajaría con el nuevo valor.

Sintaxis:

[Public | Private] Const <Nombre> [As <Tipo Dato>]=<Valor>

Ejemplo:

Podemos crear un par de cons tantes que almacenen el valor de las tas as de los
impues tos a la renta e impues to extraordinario de s olidaridad, para propós itos del
cálculo de des cuentos .

143 de 197
Private Cons t Tas aIRenta As Single = 0.1

Private Cons t Tas aIES As Single = 0.02

Nota:

En Vis ual Bas ic .NET s i no s e define el tipo de dato de la cons tante s e as ume que es
Object, ya no Variant como en Vis ual Bas ic 6, debido a que és te tipo de dato ya no
exis te.

Campos

Un campo es una variable local para la clas e, es decir, s olo puede s er us ada
internamente por los miembros de la clas e pero no por otras clas es o por aplicaciones
clientes .

El campo s olo puede s er una variable privada o protegida que s e us e dentro de la


clas e para almacenar un valor us ado por alguna propiedad o método, s in que és te
pueda s er vis to o ins tanciado por otras aplicaciones .

Sintaxis:

[Private | Friend] <Nombre Campo> [As <Tipo Dato>]

Ejemplo:

Podemos crear un par de campos que almacenen el cálculo de los impues tos a la
renta e impues to extraordinario de s olidaridad, para el total de des cuentos .

Private IES As Single

Private IRenta As Single

144 de 197
Enumeraciones

Una enumeración es una es tructura de datos pers onalizada que define un conjunto de
valores enteros . Por defecto, el primer dato enumerado empieza en 0, el s egundo en 1
y as í s uces ivamente, aunque es to puede cambiars e al momento de definir la
enumeración.

Las enumeraciones s on útiles para dar claridad al programa y evitar errores de


as ignación de variables , ya que s i definimos una variable de tipo enumerada, el valor
que s e puede as ignar es tá limitado por el rango de valores definido en la
enumeración.

Sintaxis:

[Public | Private | Protected | Friend] Enum <Nombre Enumeración>

<Elemento1>[=<Valor1>]

<Elemento2>[=<Valor2>]

<Elemento3>[=<Valor3>]

<...>

End Enum

Ejemplo:

Vamos a crear dos enumeraciones , la primera que des criba los cargos de los
empleados que s e us ará des de otras clas es y aplicaciones , y la s egunda que defina
las áreas de la empres a para propós itos internos de trabajar con información del
empleado.

Public Enum Cargos

Auxiliar

Técnico

Ingeniero

Secretaria

145 de 197
Vendedor

End Enum

Private Enum Areas

Gerencia = 100

Contabilidad = 200

Producción = 300

Sis temas = 400

Ventas = 500

End Enum

Para us ar es tas enumeraciones creadas , tan s olo bas ta declarar una variable de es tos
tipos y as ignarle un valor definido, por ejemplo, para el cas o anterior s ería como
s igue:

Dim Cargo As Cargos

Cargo = Cargos .Vendedor

Dim Area As Areas

Area = Areas .Ventas

146 de 197
Propiedades

Una propiedad es una caracterís tica del objeto que tiene información s obre un cierto
atributo de és te como por ejemplo s u nombre, des cripción, etc. Las propiedades s on
métodos que s e trabajan como s i fues en campos , con la diferencia que el campo es
interno s olo para us o de la clas e, en cambio las propiedades s e us an fuera de la
clas e.

A diferencia de la vers ión anterior de Vis ual Bas ic que exis tían 3 es tructuras para
declarar una propiedad (Property Get, Let, y Set), ahora, en Vis ual Bas ic .NET s olo
exis te una es tructura llamada Property donde internamente s e define s i la propiedad
es de lectura (Get) y/o es critura (Set), tal como s e mues tra debajo.

Sintaxis:

[Tipo de Declaración] Property <Nombre > [As <Tipo Dato>]

[[ReadOnly] Get

<Ins trucciones >

End Get]

[[WriteOnly] Set (ByVal Value [As <Tipo Dato>])

<Ins trucciones >

End Set]

End Property

Exis ten muchas formas de declarar una propiedad, que explicamos en la s gte tabla:

Declaración Uso
Default Indica que la propiedad es por defecto (no es
neces ario es cribirla)

147 de 197
Public Puede s er us ada des de cualquier clas e o aplicación.

Private Solo puede s er acces ada des de dentro de la clas e.

Protected Se us a des de dentro de la clas e o des de una clas e


derivada.

Friend Puede s er us ada des de otras clas es del componente


pero no fuera.

Protected Tiene las caracterís ticas de la protegida y amiga, es


Friend decir, s e us a dentro de la clas e, des de una clas e
derivada o des de otra clas e del mis mo componente,
pero no en aplicaciones clientes .

ReadOnly Indica que el valor de la propiedad s olo puede s er


recuperado pero no es crito. Solo puede tener la
cláus ula Get y no S et.

WriteOnly Indica que el valor de la propiedad s olo puede s er


es crito pero no devuelto. Solo puede tener la cláus ula
Set y no Get.

Overloads Permite que la propiedad de la clas e bas e s ea


s obrecargada, es decir definida varias veces en las
clas es derivadas pero con diferentes parámetros que
la propiedad definida en la clas e bas e.

Overrides Permite s obres cribir la propiedad por otra propiedad


con el mis mo nombre en una clas e derivada.

Overridable Permite s obres cribir la propiedad por un método con


el mis mo nombre en una clas e derivada.

148 de 197
NotOverridable Indica que la propiedad no puede s er s obres crita por
nadie en ninguna clas e derivada.

Mus tOverride Indica que la propiedad no puede s er implementada


en es ta clas e y puede s er implementada en una clas e
derivada.

Shadows Se us a para ocultar una propiedad de tal manera que


no pueda implementars e en una clas e derivada.

Shared Permite que la propiedad s ea compartida y pueda


llamars e s in neces idad de ins tanciar a la clas e s ino a
través de s u nombre.

Ejemplo:

Para nues tra clas e Empleado, podemos implementar las propiedades código, nombre
y bás ico del empleado, de tal manera que s e puedan leer y es cribir en cualquier parte.

Private mvarCodigo As Integer

Private mvarNombre As String

Private mvarSueldo As Single

Public Property Codigo() As Integer

Get

Codigo = mvarCodigo

End Get

Set(ByVal Value As Integer)

mvarCodigo = Value

149 de 197
End Set

End Property

Public Property Nombre() As String

Get

Nombre = mvarNombre

End Get

Set(ByVal Value As String)

mvarNombre = Value

End Set

End Property

Public Property Sueldo() As Single

Get

Sueldo = mvarSueldo

End Get

Set(ByVal Value As Single)

mvarSueldo = Value

End Set

End Property

Métodos

Un método es un conjunto de ins trucciones que modifica el es tado de las propiedades ;


en términos de objetos , un método es un s ervicio o función del objeto, mientras que
en términos de código un método es un procedimiento o función que realiza una tarea
es pecífica.

150 de 197
En Vis ual Bas ic .NET todos los miembros de una clas e (propiedades , eventos ,
cons tructores , des tructores , etc.) s on en realidad métodos ; claro, es tos últimos s on
métodos es peciales .

Un procedimiento o función en una clas e es un método, y s us caracterís ticas s on las


mis mas que cuando s e encuentran en un módulo es tándar, es decir, s i es
procedimiento la declaración es con Sub, y s i es función la declaración es con Function,
tal como s e mues tra en la s intaxis de abajo.

Sintaxis:

[Tipo Declaración] [Sub | Function] <Nombre >([Param]) [As <Tipo Dato>]

<Ins trucciones >

[Exit [Sub | Function]]

End Property

En cuanto al tipo de declaración, es muy s imilar al de las propiedades , que


des cribimos anteriormente en una tabla, es decir, puede declarars e el método como
Public, Private, Protected, Friend, Protected Friend y Shadows .

También hay que recordar que s i el método es una función s iempre s e deberá
devolver un valor, que s e puede hacer de dos formas : de manera clás ica as ignando un
valor al nombre de la función o de una nueva forma es cribiendo la s entencia return y el
valor.

Ejemplo:

En nues tro ejemplo de Empleado, podemos implementar dos métodos públicos , uno
que permita as ignar valores a las propiedades creadas : código, nombre y s ueldo del
empleado y otro método que permita actualizar el s ueldo.

Public Sub CrearEmpleado(ByVal vCodigo As Integer, _

ByVal vNombre As String, ByVal vSueldo As Single)

mvarCodigo = vCodigo

151 de 197
mvarNombre = vNombre

mvarSueldo = vSueldo

End Sub

Public Sub ActualizarSueldo(ByVal vNuevoSueldo As Single)

mvarSueldo = vNuevoSueldo

End Sub

152 de 197
Eventos

Un evento es un s uces o que le ocurre al objeto y que le indica o notifica s obre un


cambio en s us atributos o propiedades . Un evento es neces ario para controlar el
es tado de las propiedades e informar a las aplicaciones del nuevo es tado, para que
es tas realicen la acción corres pondiente.

Es fácil entender eventos as ociados a objetos vis uales como los controles , por
ejemplo en el objeto “Button” s e tiene el evento “Click” que s e des encadena al
s eleccionar el botón, el evento “Mous eMove” que ocurre al pas ar el mous e por el
botón, y as í hay muchos eventos as ociados al objeto botón; pero, cuando trabajamos
con clas es , los eventos s on más abs tractos y un poco más difíciles de entender, ya
que podía confundirs e con los métodos .

Para aclarar el concepto de eventos definamos mentalmente una clas e llamada


“Cuenta” para un componente llamado “Banco”. Es ta clas e cuenta tiene propiedades
como “NumeroCta”, “FechaApertura”, “TipoCta”, “NumeroTarjeta” y “Saldo”. Además
tiene métodos como “Depós ito”, “Retiro” y “Trans ferencia” que modifican el es tado del
s aldo. Cuando hacemos un “Retiro” de nues tra cuenta donde el monto a retirar s upera
al “Saldo” s e des encadena un evento llamado “SaldoIns uficiente” y también cuando
durante el día hemos retirado más del monto permitido s e des encadena el evento
“LimiteRetiroDiario”.

Para crear un evento en la clas e primero declare l evento con la s entencia “Event” y
luego llámelo con “Rais eEvent”, tal como s e mues tra en la s intaxis .

Declaración Sintaxis:

[Tipo Declaración] Event <Nombre > ([Parámetro(s )])

Declaración Llamada:

RaiseEvent <Nombre > ([Parámetro(s )])

El tipo de declaración, es igual que la de los métodos , es decir, puede s er Public,


Private, Protected, Friend, Protected Friend y Shadows .

153 de 197
Ejemplo:

Crear dos eventos que nos informen cuando el s ueldo es bajo o alto; para nues tra
realidad un s ueldo s erá bajo cuando es menor a 500 y alto cuando s ea mayor a 3000.

Public Event SueldoBajo()

Public Event SueldoAlto()

Private Sub ChequearSueldo()

If mvarSueldo < 500 Then

Rais eEvent SueldoBajo()

Els eIf mvarSueldo > 3000 Then

Rais eEvent SueldoAlto()

End If

End Sub

Para finalizar, deberíamos llamar a la rutina “ChequearSueldo” al final de


“CrearEmpleado” y “ActualizarSueldo” que es donde s e modifica el “Sueldo”.

154 de 197
Constructores y Destructores

Constructores

Un cons tructor es un método que s e us a para inicializar caracterís ticas del objeto.
Todas las clas es de Vis ual Bas ic .NET tienen un cons tructor por defecto que es el
método “New”, pero s e pueden agregar varios cons tructores “New” diferenciándos e
por el número de parámetros .

Sintaxis:

Public Sub New ()

<Ins trucciones >

End Sub

Public Sub New ([<Param1> As <Tipo Dato>])

<Ins trucciones >

End Sub

Public Sub New ([<Param1> As <Tipo Dato>,<Param2> As <Tipo Dato>])

<Ins trucciones >

End Sub

Public Sub New ([<P1> As <Dato>,<P2> As <Dato>,…,<PN> As <Dato>])

<Ins trucciones >

End Sub

Nota:

Es requis ito indis pens able es cribir los métodos cons tructores al inicio de la clas e, de
lo contrario no funcionarían.

Ejemplo:

155 de 197
Continuando con nues tro ejemplo de la clas e “Empleado” podemos crear 4
cons tructores que permitan crear de cuatro maneras dis tintas un objeto de tipo
empleado.

Public Sub New()

End Sub

Public Sub New(ByVal vCodigo As Integer)

mvarCodigo = vCodigo

End Sub

Public Sub New(ByVal vCodigo As Integer, ByVal vNombre As String)

mvarCodigo = vCodigo

mvarNombre = vNombre

End Sub

Public Sub New(ByVal vCodigo As Integer, ByVal vNombre As String,

ByVal vSueldo As Single)

mvarCodigo = vCodigo

mvarNombre = vNombre

mvarSueldo = vSueldo

End Sub

156 de 197
Destructores

Un des tructor es un método que s e us a para limpiar caracterís ticas del objeto antes
que s ea des truido y liberado de la memoria. Por ejemplo, s i tenemos una clas e que
accede a datos y que abre una conexión hacia una bas e de datos par crear un Datas et,
entonces recitamos un des tructor que permita cerrar el Datas et y la conexión antes de
des truir el objeto que apunta a dicha clas e.

El FrameWork .NET s olo provee de des tructores a Vis ual C#, en cambio, en Vis ual
Bas ic :NET no exis te un método es pecial para crear des tructores ; en vez de ello s e
crea un método cualquiera que realice la labor de iniciar variables , liberar recurs os ,
etc.

Sintaxis:

Public Sub <Nombre Des tructor>()

<Ins trucciones >

End Sub

Ejemplo:

Para la clas e “Empleado” podemos crear un des tructor llamado “Finalizar” que permita
liberar las variables us adas por las propiedades para almacenar s us valores .

Public Sub Finalizar()

mvarCodigo = Nothing

mvarNombre = Nothing

mvarSueldo = Nothing

End Sub

Creando una Librería de Clases

157 de 197
Des pués de ver los elementos de una clas e, es momento de crear Componentes .NET
los cuales también s on conocidos como “Librería de Clas es ”, para lo cual exis ten
varias etapas que detallamos a continuación.

Eligiendo el Tipo de Aplicación

Del menú “File”, elegir “New” y luego “Project” o puls ar [Ctrl + N]

En la opción “Project Types ” elegir “Vis ual Bas ic Projects ” y en la opción


“Templates ” elegir “Clas s Library”

Figura 4.2: Ventana para crear una Librería de Clases

Seleccionar la ubicación y es cribir un nombre adecuado para el proyecto,


generalmente, s e acos tumbra colocar el nombre de la Empres a, nos otros
podemos llamar al componente “ACME” y luego “OK”.

158 de 197
Inmediatamente aparecerá una clas e llamada “Clas s 1”, proceder a cambiar de
nombre fís ico y lógico, por ejemplo ponerle como nombre “Empleado”.

Añadiendo una Clase

Por defecto toda librería trae una clas e, pero s i queremos crear mas clas e realizamos
lo s iguiente:

Del menú “Project” elegimos la opción “Add Clas s ”

Es cribimos el nombre fís ico de la clas e, es te a s u vez s erá por defecto el nombre
lógico y damos clic en “Open”.

Figura 4.3: Ventana para crear una Clase

159 de 197
1. Por defecto aparecerá la s iguiente es tructura:

Public Clas s Cliente

End Clas s

2. Dependiendo del alcance que queramos que tenga el objeto s e puede modificar el
tipo de declaración “Public” a una de las vis tas anteriormente, tales como:
“Private”, “Protected”, “Friend”, “Shadows ”, etc.

160 de 197
Creando Propiedades, Métodos, Eventos

La creación de propiedades , métodos y eventos s e realiza dentro del módulo de clas e


tal como s e mos tró anteriormente. Por ejemplo para la clas e “Empleado” podemos
crear lo s iguiente.

3. Añadiendo una propiedad:

Private mvarSueldo As Single

Public Property Sueldo() As Single

Get

Sueldo = mvarSueldo

End Get

Set(ByVal Value As Single)

mvarSueldo = Value

End Set

End Property

4. Añadiendo un método:

Public Sub ActualizarSueldo(ByVal vNuevoSueldo As Single)

mvarSueldo = vNuevoSueldo

End Sub

5. Añadiendo eventos :

Public Event SueldoBajo()

161 de 197
Public Event SueldoAlto()

6. Llamando eventos :

Sub ChequearSueldo()

If mvarSueldo < 500 Then

Rais eEvent SueldoBajo()

Els eIf mvarSueldo > 3000 Then

Rais eEvent SueldoAlto()

End If

End Sub

Public Sub ActualizarSueldo(ByVal vNuevoSueldo As Single)

mvarSueldo = vNuevoSueldo

ChequearSueldo()

End Sub

También podemos definir en el módulo de clas e cons tantes , campos y enumeraciones ;


además , podemos añadir cons tructores y des tructores para la clas e, tal como vimos
en la s ección anterior.

162 de 197
Probando y Usando la Librería de Clases

Probar la Librería de Clases

Para probar el funcionamiento de la Librería de Clas es es neces ario crear una


aplicación que us e los miembros de las clas es de la librería. Es ta aplicación la
llamaremos el “Cliente” del componente y puede es tar es crito en cualquier lenguaje
del FrameWork .NET, es decir, s i creamos una librería en Vis ual Bas ic .NET, la podemos
probar o us ar en una aplicación Vis ual Bas ic .NET, Vis ual C#, Vis ual C++, COBOL,
Pas cal, C++, etc.

Vamos a as umir que s e des ea crear una aplicación cliente en Vis ual Bas ic .NET que
pruebe la librería de clas es creada, para es to neces itamos realizar lo s iguiente:

7. Del menú “File”, elegir “Add Project”, y luego s eleccionar “New Project”. Elegir una
plantilla de aplicación para Windows o Web en Vis ual Bas ic .NET

8. Elegir el directorio donde s e creará la aplicación, es cribir el nombre y “OK”.


Aparecerá un nuevo proyecto en la s olución, el cual s e ejecuta por defecto.

9. Para indicar que el proyecto de la aplicación es el que s e ejecuta dar clic derecho
s obre el nombre del proyecto en la ventana del “Solution Explorer” y elegir “S et
as StartUp Project”.

Figura 4.4: Ventana para Añadir una Referencia a la Librería

163 de 197
164 de 197
10. Para us ar la librería des de la aplicación creada hacer una referencia a es ta,
des de el menú “Project” eligiendo “Add Reference...”

11. Elegir la ficha “Projects ” de la ventana de añadir referencia y s e mos trará la


librería creada en la mis ma s olución, tal como s e mues tra en la figura anterior.

12. Dar clic al botón “S elect” y luego “OK”; inmediatamente, aparecerá en la carpeta
“References ” del proyecto en la ventana del “Solution Explorer”.

13. Declarar una variable objeto que apunte a una clas e del componente o librería,
para lo cual exis ten 3 formas que ilus traremos con la clas e empleado:

1. Primera forma:

Dim objEmpleado As ACME.Empleado

objEmpleado = New ACME.Empleado()

2. Segunda forma:

Dim objEmpleado As ACME.Empleado = New ACME.Empleado()

3. Tercera forma:

Dim objEmpleado As New ACME.Empleado

14. Us ar las propiedades y métodos del objeto, tal como s e mues tra en el ejemplo:

objEmpleado.CrearEmpleado(123, "Luis Dueñas ", 1000)

15. Si des eamos us ar los eventos , entonces tendremos que declarar la variable en la
s ección de decalaraciones generales , de la s iguiente forma:

165 de 197
Private WithEvents objEmpleado As New ACME.Empleado()

16. Para liberar la variable objeto realizar la s iguiente as ignación:

objEmpleado = Nothing

Nota:

La anterior s entencia en realidad no des truye la variable, s ino que la des activa, el
encargado de des truír definitivamente al objeto es el “Garbage Collector”.

Usar la Librería de Clases

Anteriormente, habiamos vis to como probar la librería junto con una aplicación en la
mis ma s olución, lo que permite realizar depuración pas o a pas o, pero cuando ya es tá
probada la librería no es neces ario tener el código fuente, s ino tan s olo el archivo DLL.

Para us ar la librería en cualquier aplicación s olo hay que hacer una referencia y en la
opción “Projects ” hay que s eleccionar el nombre de la DLL que s e encuentra en la
carpeta del proyecto. Des pués s e realizan los mis mos pas os que para probarla.

166 de 197
Herencia de Clases

Introducción a la Herencia de Clases

La parte principal de la Programación Orientada a Objetos (POO) es la herencia de


clases, es decir, la caracterís tica de definir una clas e que s irva de bas e para otras
clases derivadas, las clas es derivadas tendran los miembros de la clase base:
propiedades , métodos , eventos , etc.

Los miembros heredados por la clas e derivada pueden s obre es cribirs e e


implementars e de otra forma, además la clas e derivada puede tener s us propios
miembros y s ervir de clas e bas e para otras clas es , lográndos e la reutilización de
objetos a través de la herencia.

Otra forma de herencia es a través del polimorfismo, que es una caracterís tica de la
POO que cons is te en definir una clase abstracta con propiedades y métodos que
s erán implementados de diferentes formas por otras clas es , es decir, con un mis mo
nombre de propiedad o método s e obtiene funcionalidad dis tinta de acuerdo al tipo de
objeto.

En .NET s olo exis te herencia simple y no herencia múltiple, es decir, una clas e
derivada s olo puede heredar de una clas e bas e. Haciendo una analogía, s i a la clas e
bas e le llamamos “padre” y a la clas e derivada le llamamos “hijo” diriamos que la
herencia s imple cons is te en que un “hijo” s olo puede tener un s olo “padre”, lo que
parece algo natural y coherente.

Si des eamos s imular herencia múltiple en Vis ual Bas ic .NET recurrimos a las
interfaces, que permiten definir propiedades y métodos en una clas e s in código,
luego des de una clas e s e puede implementar varias interfaces , lográndos e una
herencia múltiple pero a nivel de definición y no de código, ya que la implementación
s erá dis tinta en cada clas e.

En general, la herencia de clas es permite reus ar código y facilitar el mantenimiento de


las aplicaciones , ya que cuando s e des ea modificar caracterís ticas de un objeto s olo
hay que cambiar la clas e adecuada.

167 de 197
Con .NET podemos implementar la herencia de cualquier clas e pública de la librería de
clas es bas e, la cual tiene una gran cantidad de clas es de diferentes tipos , tales como
Windows , Data, XML, ASP .NET, Sys tem, etc. Pero, también podemos implementar
herencia de clas es creadas por nos otros , s in importar el lenguaje en que fueron
creadas .

168 de 197
Implementando Herencia en una Clase

Para crear una herencia de clas es s e us a la ins trucción Inherits s eguida de la clas e
bas e de donde s e heredarán los miembros para la clas e actual (clas e derivada), tal
como s e mues tra debajo.

Sintaxis:

Inherits <Clas e Bas e>

Notas:

Dos obs ervaciones importantes que hay que tener en cuenta s on:

1. La ins trucción Inherits debe es cribirs e en la primera línea de la clas e derivada.

2. Solo puede exis tir una ins trucción Inherits , ya que s olo exis te herencia s imple.

Ejemplo:

Podemos crear una clas e llamada “Vendedor” que herede de la clas e “Empleado” que
habíamos creado anteriormente, y crear dos propiedades , una llamada “Venta” y otra
llamada “Comis ion”, tal como s igue:

Public Clas s Vendedor

Inherits Empleado

Private mvarVenta As Single

Private mvarComis ion As Single

Property Venta() As Single

Get

Venta = mvarVenta

End Get

169 de 197
Set(ByVal Value As Single)

mvarVenta = Value

End Set

End Property

Property Comis ion() As Single

Get

Comis ion = mvarComis ion

End Get

Set(ByVal Value As Single)

mvarComis ion = Value

End Set

End Property

End Clas s

Finalmente, la clas e “Vendedor” tendrá

5 propiedades : 3 heredadas : “Codigo”, “Nombre” y “Bas ico” y 2 propias : “Venta”


y “Comis ion”.

2 métodos heredados : “CrearEmpleado” y “ActualizarBas ico”.

2 eventos heredados : “Bas icoBajo” y “Bas icoAlto”.

170 de 197
Sentencias para trabajar con Herencia

Para trabajar con herencia de clas es exis ten varias ins trucciones que hay que conocer
tanto a nivel de la clas e como de s us miembros que definen las caracterís ticas de la
herencia, las cuales explicamos a continuación.

Declaración de Clases Base

Para declarar una clas e bas e exis ten varias formas que fueron vis tas en temas
anteriores , ahora afianzaremos s olo los tipos de declaraciones que pos ibilitan o limitan
el us o de herencia de una clas e bas e:

1. MustInherit

Permite crear una clas e que s olo s irva como clas e bas e, es decir, que s irva s olo
para implementar herencia en otras clas es , pero no podrá crears e objetos de es ta
clas e.

Sintaxis:

MustInherit Class <Nombre Clas e Bas e>

<Código de la clas e>

End Class

2. NotInheritable

Se us a para crear una clas e que s olo pueda crear objetos o aplicaciones clientes ,
pero que no pueda s ervir para heredars e en otra clas e.

Sintaxis:

NotInheritable Class <Nombre Clas e>

<Código de la clas e>

171 de 197
End Class

SobreEscribiendo Propiedades y Métodos en Clases Derivadas

Para declarar una propiedad o método en una clas e derivada o clas e que hereda de
una clas e bas e, hay que tener ciertas cons ideraciones de acuerdo al tipo de
declaración, que s e explican a continuación.

1. Overridable

Permite crear una propiedad o método que puede s er s obre es crito en una clas e
derivada. Es ta declaración s e hace en la propiedad o método de la clas e bas e.

2. Overrides

Se us a para s obre es cribir una propiedad o método que fue definido como
“Overridable” en la clas e bas e. Es ta declaración s e hace en la propiedad o método
de la clas e derivada.

172 de 197
3. NotOverridable

Impide que una propiedad o método pueda s er s obre es crito en una clas e derivada.
La definición s e realiza en la propiedad o método de la clas e bas e.

Por defecto, todas las propiedades o métodos públicos definidos en una clas e bas e
no pueden s er s obre es critos en la clas e derivada.

4. MustOverride

Permite crear una propiedad o método que s erá obligatorio s obre es cribirlo en la
clas e derivada. Es ta declaración s e realiza en la propiedad o método de la clas e
bas e que ha s ido definida como Mus tInherit.

Palabras claves MyBase y MyClass

Se puede us ar las palabras clave MyBas e y MyClas s al trabajar con herencia, tal como
s e mues tra a continuación:

1. MyBase

Se us a para llamar a miembros de la clas e bas e des de la clas e derivada. Es decir


en vez de us ar el nombre de la clas e s eguido de la propiedad o método s e us a la
palabra clave MyBas e s eguida de la propiedad o método.

Es te tipo de llamada es útil cuando s e trabaja con métodos s obre es critos en una
clas e derivada y s e neces ita invocar al método de la clas e bas e que s erá s obre
es crito, tal como s e mues tra en el s iguiente ejemplo.

Ejemplo:

Suponiendo que el método “CrearEmpleado” de la clas e “Empleado” haya s ido


creado como “Overridable”, y s e des ea s obre es cribir en la clas e “Vendedor” para
calcular correctamente el s ueldo del vendedor incluyendo las comis iones , entonces ,
tendriamos lo s iguiente:

173 de 197
Public Clas s Vendedor

Inherits Empleado

Public Overrides Sub CrearEmpleado(ByVal vCodigo As Integer, _

ByVal vNombre As String, ByVal vSueldo As Single)

vSueldo = vSueldo + mvarVenta * mvarComis ion

MyBas e.CrearEmpleado(vCodigo,vNombre,vSueldo)

End Sub

End Clas s

2. MyClass

Se us a para llamar a métodos s obre es cribibles des de la clas e derivada, y


diferenciarlos de los métodos heredados des de la clas e bas e.

174 de 197
Polimorfismo

El polimorfis mo cons is te en la funcionalidad múltiple que puede tener un miembro de


una clas e para comportars e de divers as maneras de acuerdo al tipo de objeto que lo
implemente.

Exis ten dos formas de implementar el polimorfis mo en Vis ual Bas ic .NET:

1. Polimorfismo basado en Herencia

Es una nueva forma de crear multiple funcionalidad para un método de una clas e
bas e que puede s er s obre es crito por otros métodos con el mis mo nombre en las
clas es derivadas .

Ejemplo:

Tomemos como cas o el ejemplo anterior donde habíamos s obre es crito el método
“CrearEmpleado” de la clas e “Empleado” modificandos e en la clas e derivada
“Vendedor” para incluir lo recibido por comis iones de ventas . Crearemos el método
llamado “Mos trarSueldo” que permita crear el empleado y mos trar cuanto gana,
us ando el polimorfis mo dependeiendo s i es vendedor o no.

Sub Mos trarSueldo(ByVal vEmpleado As Empleado, _

ByVal vCodigo As Integer, ByVal vNombre As String, _

ByVal vSueldo As Single)

vEmpleado.CrearEmpleado(vCodigo,vNombre,vSueldo)

Ms gBox(vNombre & " gana s /. " & vSueldo)

End Sub

Sub ProbarPolimorfis mo()

Dim objEmpleado As New Empleado

Dim objVendedor As New Vendedor

175 de 197
objEmpleado.CrearEmpleado(100, "Luis Dueñas ", 1000)

objVendedor.Venta=1000

objVendedor.Comis ion=0.10

objVendedor.CrearEmpleado(100, "Luis Dueñas ", 1000)

End Sub

En es te ejemplo el res ultado s erá para el primer cas o el mens aje “Luis Dueñas
gana 1000” y en el s egundo cas o el mens aje “Luis Dueñas gana 1100”.

2. Polimorfismo basado en Interfaces

Es te tipo de polimorfis mo s e us a también en Vis ual Bas ic 6 y cons is te en crear una


interface donde s e definan nombres de propiedades y/o métodos , y luego s e
implementen con la s entencia “Implements ” en varias clas es , es cribiendo
diferentes códigos o implementaciones para las propiedades y métodos de cada
clas e.

Es te último tipo de polimorfis mo no s e va a tratar, debido a que la manera natural


de implementar polimorfis mo es a través de la herencia de clas es s obre
es cribiendo propiedades o métodos .

176 de 197
Laboratorio 4:

Es te laboratorio pretende ens eñar como s e trabajan con componentes en Vis ual Bas ic
.NET, primero s e verá un laboratorio de cómo crear una librería de clas es y luego
veremos como trabajar con herencia de clas es . El laboratorio 6 s e divide en dos
ejercicios que duran aproximadamente 60 minutos.

Ejercicio 1: Creando y Usando una Librería de Clases

Duración: 25 minutos

Se va a cons truír una librería que permita manejar el inventario de productos en


almacen y realizar un mantenimiento de es tos . Para es to realizar los s iguientes pas os :

Elegir un nuevo proyecto “Vis ual Bas ic” y una plantilla “Clas s Library”, s eleccionar
en ubicación la carpeta “C:\VBNET\Labs ” y como nombre es cribir
“Libreria_Clas es ”.

Es cribir “Producto” como nombre fís ico y lógico de la clas e:

Public Clas s Producto

End Clas s

Creando propiedades para la clas e producto:

Private mvarCodigo As String

Private mvarNombre As String

Private mvarPrecio As Single

177 de 197
Private mvarStock As Integer

Public Property Codigo() As String

Get

Codigo = mvarCodigo

End Get

Set(ByVal Value As String)

mvarCodigo = Value

End Set

End Property

Public Property Nombre() As String

Get

Nombre = mvarNombre

End Get

Set(ByVal Value As String)

mvarNombre = Value

End Set

End Property

Public Property Precio() As Single

Get

Precio = mvarPrecio

End Get

Set(ByVal Value As Single)

mvarPrecio = Value

178 de 197
End Set

End Property

Public Property Stock() As Integer

Get

Stock = mvarStock

End Get

Set(ByVal Value As Integer)

mvarStock = Value

End Set

End Property

Creando métodos para la clas e producto:

Public Sub CrearProducto(ByVal vCodigo As String, ByVal vNombre

As String, ByVal vPrecio As Single, ByVal vStock As Integer)

mvarCodigo = vCodigo

mvarNombre = vNombre

mvarPrecio = vPrecio

mvarStock = vStock

End Sub

Public Sub ActualizarPrecio(ByVal vOperacionPrecio As Byte,

ByVal vTas a As Single)

If vOperacionPrecio = 1 Then

mvarPrecio = (1 + (vTas a / 100)) * mvarPrecio

179 de 197
Els eIf vOperacionPrecio = 2 Then

mvarPrecio = (1 - (vTas a / 100)) * mvarPrecio

End If

End Sub

Public Sub ActualizarStock(ByVal vOperacionStock As Byte,

ByVal vCantidad As Integer)

If vOperacionStock = 1 Then

mvarStock = mvarS tock + vCantidad

Els eIf vOperacionStock = 2 Then

mvarStock = mvarS tock - vCantidad

End If

End Sub

Luego, añadimos una aplicación para Windows que permita realizar el


mantenimiento de productos us ando la librería creada.

Del menú “File” elegimos “Add Project”, y s eleccionamos “New Project”. Elegimos
una “Aplicación para Windows ” y le damos el nombre de
“Prueba_Libreria_Clas es ”.

Configuramos para que la aplicación s ea la que inicia, dando clic derecho al


nombre en la ventana del “Solution Explorer” y eligiendo “S et as StartUp Project”.

Dis eñamos un formulario llamado “frmProducto” que tenga un “TabControl” con 3


fichas , una de ingres o de productos , otra de actualización de precios y s tock y
otra de cons ulta, dis eñadas tal como mues tran las figuras de abajo:

Figura 4.5: Ficha “Ingreso” del formulario “frmProducto”

180 de 197
Figura 4.6: Ficha “Actualizacion” del formulario “frmProducto”

Figura 4.7: Ficha “Consulta” del formulario “frmProducto”

181 de 197
Des pués de realizar el dis eño y antes de es cribir código, para us ar la librería
primero debemos hacer una referencia a és ta.

Del menú “Project” elegir “Add Reference...”, s eleccionar la ficha “Projects ”,


elegir la librería creada y clic en “Select”, luego “OK”.

Declarar e inicializar una variable objeto de tipo de la clas e producto, tal como
s igue:

Private objProducto As New Libreria_Clas es .Producto()

Programando en el botón de crear producto:

Private Sub btnCrear_Click(…) Handles btnCrear.Click

objProducto.CrearProducto(txtCodigo_Ing.Text, _

txtNombre_Ing.Text, Convert.ToSingle(txtPrecio_Ing.Text), _

Convert.ToInt16(txtS tock_Ing.Text))

txtCodigo_Ing.Clear()

txtNombre_Ing.Clear()

182 de 197
txtPrecio_Ing.Clear()

txtStock_Ing.Clear()

End Sub

Programando los botones de actualizar precio y s tock del producto:

Private Sub btnActualizarPrecio_Click(…) Handles ...

If rbnPrecioAumento.Checked = True Then

objProducto.ActualizarPrecio(1,

Convert.ToSingle(txtTas a.Text))

Els eIf rbnPrecioDis minucion.Checked = True Then

objProducto.ActualizarPrecio(2,

Convert.ToSingle(txtTas a.Text))

End If

txtTas a.Clear()

End Sub

Private Sub btnStock_Click(…) Handles btnStock.Click

If rbnStockAumento.Checked = True Then

objProducto.ActualizarStock(1,

Convert.ToInt16(txtCantidad.Text))

Els eIf rbnStockDis minucion.Checked = True Then

objProducto.ActualizarStock(2,

Convert.ToInt16(txtCantidad.Text))

End If

txtCantidad.Clear()

183 de 197
End Sub

Finalmente, mos trando los datos del producto:

Private Sub btnMos trar_Click(…) Handles btnMos trar.Click

With objProducto

txtCodigo_Con.Text = .Codigo

txtNombre_Con.Text = .Nombre

txtPrecio_Con.Text = .Precio.ToString

txtStock_Con.Text = .Stock.ToString

End With

End Sub

Ejercicio 2: Trabajando con Herencia de Clases

Duración: 35 minutos

En es te laboratorio vamos a cons truír una librería de clas es para un Ins tituto Superior
Tecnológico que permita matricular a los alumnos en un cierto curs o libre dictado por
un cierto profes or. Para lo cual realizamos los s iguientes pas os :

Elegir un nuevo proyecto “Vis ual Bas ic” y una plantilla “Clas s Library”, s eleccionar
en ubicación la carpeta “C:\VBNET\Labs ” y como nombre es cribir
“Libreria_Herencia”.

Crear la clas e “Pers ona”, modificando el nombre de la clas e “Clas s 1” por el de


“Pers ona”, tanto fís ica como lógicamente; luego es cribir código para crear las
propiedades : nombre, fechanac, edad y direccion; y el método crearpers ona:

Public Clas s Pers ona

184 de 197
Private mvarNombre As String

Private mvarFechaNac As Date

Private mvarEdad As Byte

Private mvarDireccion As String

Property Nombre() As String

Get

Nombre = mvarNombre

End Get

Set(ByVal Value As String)

mvarNombre = Value

End Set

End Property

Property FechaNac() As Date

Get

FechaNac = mvarFechaNac

End Get

Set(ByVal Value As Date)

mvarFechaNac = Value

End Set

End Property

ReadOnly Property Edad() As Byte

Get

Edad = mvarEdad

185 de 197
End Get

End Property

Property Direccion() As String

Get

Direccion = mvarDireccion

End Get

Set(ByVal Value As String)

mvarDireccion = Value

End Set

End Property

Sub CrearPers ona(ByVal vNombre As String, _

ByVal vFechaNac As Date, ByVal vDireccion As String)

mvarNombre = vNombre

mvarFechaNac = vFechaNac

mvarDireccion = vDireccion

mvarEdad = Convert.ToByte(Date.Today.Year-vFechaNac.Year)

End Sub

End Clas s

Crear la clas e “Alumno” que hereda de “Pers ona”, para lo cual añadimos una
clas e al componente; del menú “Project” elegimos “Add Clas s ...” y es cribimos
como nombre “Pers ona.vb” y “Open”. Luego es cribimos el s iguiente código:

Public Clas s Alumno

Inherits Pers ona

186 de 197
Private mvarCodigo As String

Private mvarEs pecialidad As String

Property Codigo() As String

Get

Codigo = mvarCodigo

End Get

Set(ByVal Value As String)

mvarCodigo = Value

End Set

End Property

Property Es pecialidad() As String

Get

Es pecialidad = mvarEs pecialidad

End Get

Set(ByVal Value As String)

mvarEs pecialidad = Value

End Set

End Property

Sub CrearAlumno(ByVal vNombre As String, _

ByVal vFechaNac As Date, ByVal vDireccion As String, _

ByVal vCodigo As String, ByVal vEs pecialidad As String)

CrearPers ona(vNombre, vFechaNac, vDireccion)

mvarCodigo = vCodigo

187 de 197
mvarEs pecialidad = vEs pecialidad

End Sub

End Clas s

Crear la clas e “Profes or” que también hereda de “Pers ona”, para lo cual
añadimos una clas e al componente; del menú “Project” elegimos “Add Clas s ...” y
es cribimos como nombre “Profes or.vb” y “Open”. Luego es cribimos el s iguiente
código:

Public Clas s Profes or

Inherits Pers ona

Private mvarCodigo As String

Private mvarTipo As String

Property Codigo() As String

Get

Codigo = mvarCodigo

End Get

Set

mvarCodigo = Value

End Set

End Property

Property Tipo() As String

Get

Tipo = mvarTipo

End Get

Set

mvarTipo = Value

188 de 197
End Set

End Property

Sub CrearProfes or(ByVal vNombre As String, _

ByVal vFechaNac As Date, ByVal vDireccion As String, _

ByVal vCodigo As String, ByVal vTipo As String)

CrearPers ona(vNombre, vFechaNac, vDireccion)

mvarCodigo = vCodigo

mvarTipo = vTipo

End Sub

End Clas s

Finalmente, crear la clas e “Curs o”, para lo cual añadimos una clas e al
componente; del menú “Project” elegimos “Add Clas s ...” y es cribimos como
nombre “Curs o.vb” y “Open”. Luego es cribimos el s iguiente código:

Public Clas s Curs o

Private mvarCodigo As String

Private mvarNombre As String

Private mvarTotalHoras As Byte

Private mvarCos toTotal As Single

Private mvarCos toHora As Single

Property Codigo() As String

Get

Codigo = mvarCodigo

End Get

Set(ByVal Value As String)

189 de 197
mvarCodigo = Value

End Set

End Property

Property Nombre() As String

Get

Nombre = mvarNombre

End Get

Set(ByVal Value As String)

mvarNombre = Value

End Set

End Property

Property TotalHoras () As Byte

Get

TotalHoras = mvarTotalHoras

End Get

Set(ByVal Value As Byte)

mvarTotalHoras = Value

End Set

End Property

Property Cos toTotal() As Single

Get

Cos toTotal = mvarCos toTotal

End Get

190 de 197
Set(ByVal Value As Single)

mvarCos toTotal = Value

End Set

End Property

ReadOnly Property Cos toHora() As Single

Get

Cos toHora = mvarCos toHora

End Get

End Property

Sub CrearCurs o(ByVal vCodigo As String, _

ByVal vNombre As String, ByVal vTotalHoras As Byte, _

ByVal vCos toTotal As Single)

mvarCodigo = vCodigo

mvarNombre = vNombre

mvarTotalHoras = vTotalHoras

mvarCos toTotal = vCos toTotal

mvarCos toHora = mvarCos toTotal / mvarTotalHoras

End Sub

End Clas s

Para probar la librería de clas e añadimos un proyecto a la s olución, del menú


“File”, elegimos “Add Project” y luego “New Project...”, s eleccionando una
aplicación para Windows a la cual llamaremos “Prueba_Libreria_Herencia”.

La aplicación tendrá un formulario llamado “frmMatricula” con 3 fichas , donde s e

191 de 197
realizarán el ingres o de datos del alumno, el curs o y el profes or para la
matrícula, tal como s e mues tran en las figuras de abajo.

Figura 4.8: Ficha “Alumno” del formulario “frmMatricula”

192 de 197
Figura 4.9: Ficha “Curso” del formulario “frmMatricula”

Figura 4.10: Ficha “Profesor” del formulario “frmMatricula”

Lo primero que tenemos que hacer para probar la librería en la aplicación es


hacer una referencia a es ta, eligiendo del menú “Project”, “Add References ...”,
s eleccionar la ficha “Projects ” y elegir la librería, clic en “S elect” y “OK”.

193 de 197
Para que la aplicación Windows que vamos a crear s ea la que s e ejecute dar clic
derecho al nombre del proyecto en la ventana del “Solution Explorer” y elegir “Set
as StartUp Project”.

En las declaraciones generales definimos variables objetos para manipular datos


del alumno, curs o y el profes or, as í como una rutina que permita limpiar textos .

Private objAlumno As New Libreria_Herencia.Alumno()

Private objCurs o As New Libreria_Herencia.Curs o()

Private objProfes or As New Libreria_Herencia.Profes or()

Sub LimpiarTextos ()

txtAlumno_Codigo.Clear()

txtAlumno_Nombre.Clear()

txtAlumno_FechaNac.Clear()

txtAlumno_Direccion.Clear()

txtAlumno_Edad.Clear()

txtAlumno_Es pecialidad.Clear()

txtCurs o_Codigo.Clear()

txtCurs o_Nombre.Clear()

txtCurs o_TotalHoras .Clear()

txtCurs o_Cos toTotal.Clear()

txtCurs o_Cos toHora.Clear()

txtProfes or_Codigo.Clear()

txtProfes or_Nombre.Clear()

txtProfes or_FechaNac.Clear()

194 de 197
txtProfes or_Direccion.Clear()

txtProfes or_Edad.Clear()

txtProfes or_Tipo.Clear()

End Sub

Programamos el botón “Matricular” para que guarde los datos de los objetos
creados anteriormente.

Private Sub btnMatricular_Click(…) Handles btnMatricular.Click

objAlumno.CrearAlumno(txtAlumno_Nombre.Text, _

Convert.ToDateTime(txtAlumno_FechaNac.Text), _

txtAlumno_Direccion.Text, txtAlumno_Codigo.Text, _

txtAlumno_Es pecialidad.Text)

objCurs o.CrearCurs o(txtCurs o_Codigo.Text, _

txtCurs o_Nombre.Text, _

Convert.ToByte(txtCurs o_TotalHoras .Text), _

Convert.ToSingle(txtCurs o_Cos toTotal.Text))

objProfes or.CrearProfes or(txtProfes or_Nombre.Text, _

Convert.ToDateTime(txtProfes or_FechaNac.Text), _

txtProfes or_Direccion.Text, _

txtProfes or_Codigo.Text, txtProfes or_Tipo.Text)

LimpiarTextos ()

End Sub

Es cribimos código en el botón “Cons ultar” para mos trar los datos almacenados
en los objetos .

195 de 197
Private Sub btnCons ultar_Click(…) Handles btnCons ultar.Click

With objAlumno

txtAlumno_Codigo.Text = .Codigo

txtAlumno_Nombre.Text = .Nombre

txtAlumno_FechaNac.Text=Format(.FechaNac, "dd/MM/yyyy")

txtAlumno_Direccion.Text = .Direccion

txtAlumno_Edad.Text = .Edad.ToString

txtAlumno_Es pecialidad.Text = .Es pecialidad

End With

With objCurs o

txtCurs o_Codigo.Text = .Codigo

txtCurs o_Nombre.Text = .Nombre

txtCurs o_TotalHoras .Text = .TotalHoras .ToString

txtCurs o_Cos toTotal.Text = .Cos toTotal.ToString

txtCurs o_Cos toHora.Text = .Cos toHora.ToString

End With

With objProfes or

txtProfes or_Codigo.Text = .Codigo

txtProfes or_Nombre.Text = .Nombre

txtProfes or_FechaNac.Text=Format(.FechaNac, "dd/MM/yyyy")

txtProfes or_Direccion.Text = .Direccion

txtProfes or_Edad.Text = .Edad.ToString

txtProfes or_Tipo.Text = .Tipo

End With

End Sub

196 de 197
Finalmente, programamos el botón de “S alir” de la aplicación.

Private Sub btnSalir_Click(…) Handles btnSalir.Click

Me.Clos e()

End Sub

Instituto Telematic / 3

197 de 197

Potrebbero piacerti anche