Docstoc

Programacion en vb net

Document Sample
Programacion en vb net Powered By Docstoc
					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 W  eb XML deben us ars e en otras aplicaciones del
   negocio, para ello Vis ual Studio .NET cuenta con el Explorador de Servidores
                                                    eb
   (Server Explorer) que permite ver los Servicios W publicados y us arlos con s olo
                                                    eb
   un arras tre. También podemos us ar un Servicio W haciendo referencia des de un
                                     eb
   proyecto mediante la opción “Add W 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 W   eb, 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 W    eb, 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 “W           eb Application”
                                                    eb
     habilitando en el Toolbox los controles para W y los controles HTML que s erán
                                        eb
     us ados para cons truir la página W 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.



                                                           eb
     Web Service Designer: Sirve para dis eñar s ervicios W 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.


                                                         F




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 FrameW ork .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
                                             eb
     plantilla de aplicación para Windows o W 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

				
DOCUMENT INFO
Shared By:
Tags:
Stats:
views:561
posted:3/31/2011
language:Spanish
pages:197