Está en la página 1de 0

Ing. CIP Herberth Aranda Rojas 7.

Formularios








FORMULARIOS, PROPIEDADES
Y MTODOS



La Primera Aplicacin

Un Hola Mundo desde VB.NET

Una de las primeras acciones que solemos realizar cuando nos enfrentamos a un nuevo lenguaje de
programacin, es la escritura de un programa que muestre el clsico mensaje Hola Mundo por
pantalla. Esto nos permite dar nuestro primer paso con el entorno y empezar a familiarizarnos con el
mismo.

As que cumpliendo con la tradicin, vamos a proceder a escribir nuestro primer programa para
VB.NET. A lo largo de los siguientes apartados de este tema, describiremos los pasos necesarios
para la confeccin de una sencilla aplicacin. El lector podr comprobar que esta labor no encierra
grandes complejidades, simplemente requiere un poco de entrenamiento y la adaptacin a un nuevo
conjunto de modos de programacin (cree el ejemplo Hola Mundo).


Iniciar el IDE de VS.NET

El primer paso a dar es arrancar el entorno de desarrollo de VS.NET, para lo cual, seleccionaremos en
la estructura de mens de Windows, la opcin de men situada en Inicio + Programas + Microsoft
Visual Studio 2008 + Microsoft Visual Studio 2008, que ejecutar el IDE y nos mostrar el rea
principal de trabajo con la pestaa Pgina de inicio. Ver Figura 37 y Figura 38.
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
2

hhharanda@yahoo.com


Figura 37. Opcin de men para acceder a Visual Studio .NET.



Figura 38. Pantalla inicial del IDE de Visual Studio .NET.


Este IDE es comn para todos los lenguajes, como habr podido observar el lector al iniciarlo, ya que
a diferencia de versiones anteriores, no se selecciona la herramienta de trabajo y esta abre el entorno
de programacin, sino que directamente se abre el IDE y posteriormente elegiremos el lenguaje con el
que vamos a escribir el programa.

@ Ing. CIP Herberth Aranda Rojas
7. Formularios
3

hhharanda@yahoo.com
Otro punto de diferencia con versiones anteriores reside en la disposicin de los elementos dentro del
IDE: el sistema de mens y barras de herramientas no ha variado, pero algunos componentes se hallan
en pestaas desplegables, cuyo contenido se expande al situar el cursor del ratn sobre la pestaa.
Igualmente el rea principal de trabajo se organiza tambin en base a una ventana con pestaas, que
nos permite cambiar de contenido pulsando la pestaa correspondiente, en lugar de tener ventanas
independientes. No vamos a extendernos aqu en cuestiones de configuracin del IDE, ya que estos
aspectos se tratan en un tema especfico, por lo que vamos a seguir creando nuestro primer programa.


Crear un nuevo proyecto

A continuacin, pulsaremos dentro de la pgina de inicio el botn Nuevo proyecto, que nos mostrar
un cuadro de dilogo para seleccionar el lenguaje a usar y el tipo de aplicacin que queremos obtener.
Ver Figura 39.


Figura 39. Seleccin de tipo de proyecto a crear.

Como podemos observar, en este cuadro de dilogo hay varios puntos a tener en cuenta que
describimos seguidamente.

En la lista Tipos de proyecto podemos seleccionar el lenguaje en el que vamos a codificar el programa:
Visual Basic, C#, C++; as como otra serie de asistentes de instalacin, todo ello agrupado en
diferentes carpetas. En este caso elegiremos Proyectos de Visual Basic.

Una vez que sabemos el lenguaje a usar, debemos elegir el tipo de aplicacin en la lista Plantillas.
Seleccionaremos Aplicacin para Windows ya que vamos a crear un programa con interfaz tpica de
Windows.

La gran ventaja de las plantillas radica en que al crear la aplicacin, nos proporciona la funcionalidad
bsica de la misma, que de otro modo tendramos que codificar manualmente.

Por ltimo, en el campo Nombre escribiremos HolaMundo como nombre para nuestra aplicacin y
en el campo Ubicacin estableceremos la carpeta del disco duro que contendr los ficheros del
proyecto. Pulsando Aceptar se crear el nuevo proyecto.
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
4

hhharanda@yahoo.com
Objetos, Propiedades y Mtodos

Desde la versin 4.0, el lenguaje Visual Basic ha ido adoptando progresivamente principios del
paradigma de la Programacin Orientada a Objeto (Object Oriented Programming u OOP a partir de
ahora), aunque con ciertas restricciones.

VB.NET es la primera versin de este lenguaje que incorpora plenas, excelentes y muy potentes
caractersticas de orientacin a objetos, esto es debido a que el lenguaje forma parte de la plataforma
.NET, la cual est diseada en su totalidad siguiendo un modelo de orientacin a objetos, basado en un
conjunto de especificaciones que obligan a todos los lenguajes que operen bajo este entorno a seguir
los dictados de dichas normas. Por este motivo, todos los elementos que usemos en una aplicacin
VB.NET sern considerados objetos, que deberemos manipular a travs de sus propiedades y mtodos.

A partir de ahora, y a lo largo de todo el texto, se harn continuas referencias relacionadas con los
fundamentos, terminologa y tcnicas de programacin a objetos, ya que es tal la integracin de estas
caractersticas en todo el entorno, que es imposible realizar un mnimo acercamiento inicial sin tratar
estos aspectos.

Somos conscientes de que el lector puede no tener una experiencia previa en OOP, por ello, le
recomendamos la consulta de los temas dedicados a programacin OOP, para resolver las cuestiones
sobre fundamentos de orientacin a objetos que se presenten.

-Y por qu no ir explicando la programacin orientada a objetos desde el primer ejemplo?-.
Suponemos que esta ser una pregunta que se formular el lector. Bien, el motivo es por intentar
simplificar al mximo los primeros pasos a realizar con VB.NET. Por ello, en estos ejemplos iniciales
se darn las mnimas explicaciones puntuales sobre los objetos que se utilicen, para evitar aadir una
innecesaria complejidad, nada recomendable al comenzar a trabajar con un nuevo lenguaje.


Formularios

Una vez creado el proyecto, se aade un formulario al mismo, apareciendo una nueva pestaa en el
rea principal del IDE, que corresponde al diseador del formulario. Ver Figura 40.


Figura 40. Diseador de formulario de VB.NET.
FORMULARIOFORM1
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
5

hhharanda@yahoo.com
Dentro de una aplicacin VB.NET, el trmino formulario designa a una ventana estndar de las
que utilizamos habitualmente en Windows para comunicarnos con el usuario, mientras que el
diseador del formulario representa a la plantilla de una ventana, sobre la cul aadiremos controles y
modificaremos si es necesario su aspecto inicial.


El formulario como un objeto

Un formulario es, al igual que la gran mayora de elementos en el entorno de .NET, un objeto, y como
tal, la forma de manipularlo pasa por asignar y obtener valores de sus propiedades, y por la ejecucin
de sus mtodos.

Debido a que un formulario dispone de un elevado nmero de propiedades y mtodos, durante el texto
nos centraremos slo sobre los que vayamos a trabajar, pudiendo el lector, consultar el resto a travs
de la ayuda de VS.NET; esto es aplicable a todos los objetos con los que tratemos.


Acceso a las Propiedades de un Formulario

Para acceder a las propiedades de un formulario, podemos hacerlo de una de las siguientes
maneras:

Seleccionar la opcin Ver + Ventana Propiedades del men de VS.NET.

Pulsar [F4].

Hacer clic en el botn de la barra de herramientas correspondiente a la ventana de
propiedades. Ver Figura 41


Figura 41. Botn Propiedades de la barra de herramientas.


Situar el ratn en la pestaa Propiedades, que se halla generalmente en el margen derecho del
IDE, que al expandirse, nos mostrar la ventana Propiedades para el objeto que tengamos en
ese momento activo en el proyecto. Ver Figura 42.

En esta ventana, los nombres de las propiedades aparecen en la columna izquierda y su valor en la
derecha. Por defecto, las propiedades aparecen ordenadas por categoras, pero para acceder ms
rpidamente a ellas a travs del nombre, vamos a ordenarlas alfabticamente, pulsando el segundo
botn de esta ventana comenzando por la izquierda. Ver Figura 43.

La primera propiedad a mencionar, y la ms importante para cualquier objeto es Name, que contiene el
nombre del objeto que luego nos va a permitir manipularlo en el cdigo del programa. VB.NET asigna
nombres por defecto a los formularios y controles que agreguemos a la aplicacin. En este caso, el
nombre que ha asignado al formulario es Form1. Podemos modificar estos nombres por otros que sean
ms significativos para el programador, sin embargo, para simplificar este ejemplo, mantendremos los
nombres que sean asignados por defecto.

El formulario en su estado actual, muestra como ttulo el mismo que tiene para el nombre. La
propiedad que contiene el ttulo del formulario es Text, y vamos a cambiarla por un valor que
describa mejor la funcionalidad que queremos dar al programa.
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
6

hhharanda@yahoo.com


Figura 42. Ventana Propiedades de VS.NET, mostrando las propiedades de un formulario.



Figura 43. Botn para ordenar las propiedades alfabticamente.


Para ello, haremos clic sobre el valor de la propiedad Text y cambiaremos el literal que aparece por el
siguiente: Programa de prueba. Al pulsar [INTRO], el diseador del formulario mostrar el nuevo
ttulo.

Otro aspecto es referente a la posicin del formulario en pantalla cuando ejecutemos el programa.
Actualmente es Windows quien calcula dicha posicin, apareciendo en la zona superior izquierda de la
pantalla. Podemos modificar tambin esta posicin, para ello haremos clic en la propiedad
StartPosition, que mostrar un botn que al ser pulsado abrir una lista con los posibles valores
disponibles. Seleccionaremos CenterScreen, y cada vez que ejecutemos el programa, el formulario
aparecer siempre en el centro de la pantalla.


Controles (Objetos)

Los controles constituyen aquellos elementos que insertamos dentro de un formulario, y que permiten
al mismo interactuar con el usuario, tales como botones de pulsacin, cajas de texto, casillas de
verificacin, cajas con listas de valores, etc.; al igual que un formulario, son objetos con sus
propiedades y mtodos, y se manejan de la misma forma.
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
7

hhharanda@yahoo.com
Para aadir un control a un formulario, en primer lugar situaremos el ratn sobre la pestaa Cuadro de
herramientas, que al expandirse mostrar los controles disponibles, que podemos incluir en un
formulario. Ver Figura 44.



Figura 44. Cuadro de herramientas de VB.NET.


La operacin de aadir un control a un formulario se denomina dibujo de control, y podemos
realizarla de varias maneras:

Haciendo doble clic sobre el icono del control, lo que situar una copia del control en el
formulario con una posicin y tamao predefinidos por VB.NET.

Haciendo clic sobre el icono del control, y a continuacin clic sobre la superficie del
formulario. El nuevo control se insertar desde el punto en que hemos pulsado, extendindose
hacia la derecha y abajo con un tamao predeterminado por el diseador.

Haciendo clic sobre el icono del control, y seguidamente clic sobre la posicin del formulario
en la que queramos comenzar a dibujar el control, arrastraremos y soltaremos dando nosotros
el tamao requerido al control.
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
8

hhharanda@yahoo.com
Label (Etiqueta)

Un control Label o Etiqueta es un control esttico. Eso quiere decir que no realiza ninguna interaccin
con el usuario, puesto que slo muestra un texto informativo.

Dibujaremos sobre el formulario un control de este tipo del modo descrito anteriormente, al que el
diseador le asignar el nombre Label1. A continuacin, con el control seleccionado, pasaremos a la
ventana de propiedades. En la propiedad Text escribiremos Hola Mundo, lo cual se reflejar tambin
en el control dentro del diseador de formularios. Ver Figura 45.



Figura 45. Control Label aadido a un formulario.


Ya que el tamao de Label1 con respecto al formulario es insignificante, aumentaremos dicho tamao
haciendo clic sobre el control; esto mostrar alrededor del mismo una serie de recuadros o guas de
redimensin. Haciendo clic sobre cualquiera de ellas y arrastrando el ratn, variaremos el tamao del
Label hasta conseguir uno ms adecuado.

Tambin podemos hacer clic sobre el control y arrastrarlo, cambiando la posicin en la que lo
habamos dibujado originalmente.

Ahora debemos cambiar el tamao del tipo de letra, y para ello emplearemos la propiedad Font o
Fuente del control. Pasaremos pues a la ventana de propiedades, observando como esta propiedad
muestra en su valor el nombre de fuente actual. Ver Figura 46.



Figura 46. Ventana de propiedades con Font seleccionada.
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
9

hhharanda@yahoo.com
Haciendo clic sobre Font, aparecer un botn con puntos suspensivos, que al ser pulsado, abrir el
cuadro de dilogo estndar del sistema para seleccin de tipos de letra. Ver Figura 47



Figura 47. Seleccin del tipo de fuente para un control del formulario.


Cambiando el tamao del tipo de letra a 20 y pulsando Aceptar, aumentar la letra del Label que
tenemos en el formulario.


Ejecutando la Aplicacin

En este punto del desarrollo, daremos por concluida la aplicacin. Ahora debemos ejecutarla para
comprobar que todo funciona correctamente. Podemos hacerlo empleando una de las siguientes
formas:

Seleccionar la opcin Depurar + Iniciar en el men de VS.NET.

Pulsar [F5].

Pulsar el botn Iniciar de la barra de herramientas. Ver Figura 48.


Figura 48. Botn Iniciar de la barra de herramientas de VS.NET.


Esta accin compilar el proyecto y generar la aplicacin, ejecutndola desde el propio IDE. El
resultado ser la visualizacin del formulario de la Figura 49.
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
10

hhharanda@yahoo.com


Figura 49. La aplicacin Hola Mundo en ejecucin.


Este formulario podemos manipularlo de igual forma que cualquier otro de los que existan en el
sistema: redimensionarlo, maximizarlo, minimizarlo, etc.

Como ventaja aadida, observe el lector que para crear este programa no ha necesitado escribir ni una
sola lnea de cdigo, todo lo ha realizado a travs de los diseadores y dems elementos del IDE.


El cdigo de la Aplicacin

Quiere lo anterior decir que un formulario no tiene cdigo?. La respuesta es no, toda aplicacin
VB.NET tiene su correspondiente cdigo, lo que ocurre en el caso del formulario que acabamos de
crear, es que al haberlo hecho desde el diseador de formulario, su cdigo lo genera el IDE por
nosotros, lo que supone una gran ayuda.

Para acceder al cdigo fuente del formulario, hemos de hacerlo de alguna de las siguientes
maneras:

Seleccionar la opcin Ver + Cdigo en el men de VS.NET.

Pulsar [F7].

Hacer clic derecho sobre el formulario y elegir la opcin Ver cdigo del men contextual que
aparece.

Cualquiera de las anteriores acciones abre una nueva pestaa en la zona principal del IDE, mostrando
el editor de cdigo del formulario. Ver Figura 50.

Sin embargo falta un pequeo detalle, ya que evidentemente, no es posible que un formulario tenga tan
pocas lneas de cdigo. Lo que ocurre es que el cdigo generado por el diseador, est oculto por una
tcnica denominada Esquematizacin (Outlining), que permite definir zonas y regiones de cdigo que
pueden ser expandidas o contradas desde el editor de cdigo, haciendo clic en los indicadores de la
regin correspondiente.
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
11

hhharanda@yahoo.com


Figura 50. Ventana de cdigo del formulario.


En este caso, el diseador ha creado una regin con el nombre Windows Form Designer generated
code, y la ha contrado. Podemos reconocer una regin de cdigo contrada porque su nombre se
encuentra dentro de un rectngulo.

Para expandir una regin de cdigo, haremos clic en el signo +que se encuentra a la izquierda de su
nombre, lo que mostrar su contenido al completo. En nuestro caso accederemos al cdigo del
formulario Form1, que reproducimos en el Cdigo fuente 9.
Esto es en la versin de Visual Studio 2005, en Visual Basic 2008 muestra el cdigo como en la Fig. 50.


Publ i c Cl ass For m1
I nher i t s Syst em. Wi ndows. For ms. For m

#Regi on " Wi ndows For mDesi gner gener at ed code "

Publ i c Sub New( )
MyBase. New( )

' Thi s cal l i s r equi r ed by t he Wi ndows For mDesi gner .
I ni t i al i zeComponent ( )

' Add any i ni t i al i zat i on af t er t he I ni t i al i zeComponent ( ) cal l

End Sub

' For mover r i des di spose t o cl ean up t he component l i st .
Pr ot ect ed Over l oads Over r i des Sub Di spose( ByVal di sposi ng As Bool ean)
I f di sposi ng Then
I f Not ( component s I s Not hi ng) Then
component s. Di spose( )
End I f End I f
MyBase. Di spose( di sposi ng)
End Sub
Fr i end Wi t hEvent s Label 1 As Syst em. Wi ndows. For ms. Label

' Requi r ed by t he Wi ndows For mDesi gner
Pr i vat e component s As Syst em. Component Model . Cont ai ner

' NOTE: The f ol l owi ng pr ocedur e i s r equi r ed by t he Wi ndows For mDesi gner
' I t can be modi f i ed usi ng t he Wi ndows For mDesi gner .
' Do not modi f y i t usi ng t he code edi t or .
<Syst em. Di agnost i cs. Debugger St epThr ough( ) > Pr i vat e Sub I ni t i al i zeComponent ( )
Me. Label 1 = New Syst em. Wi ndows. For ms. Label ( )
Me. SuspendLayout ( )
'
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
12

hhharanda@yahoo.com
' Label 1
'
Me. Label 1. Font = New Syst em. Dr awi ng. Font ( " Mi cr osof t Sans Ser i f " , 20. 25! ,
Syst em. Dr awi ng. Font St yl e. Regul ar , Syst em. Dr awi ng. Gr aphi csUni t . Poi nt , CType( 0,
Byt e) )
Me. Label 1. Locat i on = New Syst em. Dr awi ng. Poi nt ( 56, 56)
Me. Label 1. Name = " Label 1"
Me. Label 1. Si ze = New Syst em. Dr awi ng. Si ze( 184, 40)
Me. Label 1. TabI ndex = 0
Me. Label 1. Text = " Hol a Mundo"
'
' For m1
'
Me. Aut oScal eBaseSi ze = New Syst em. Dr awi ng. Si ze( 5, 13) Me. Cl i ent Si ze
= New Syst em. Dr awi ng. Si ze( 292, 273) Me. Cont r ol s. AddRange( New
Syst em. Wi ndows. For ms. Cont r ol ( ) {Me. Label 1}) Me. Name = " For m1"
Me. St ar t Posi t i on = Syst em. Wi ndows. For ms. For mSt ar t Posi t i on. Cent er Scr een
Me. Text = " Pr ogr ama de pr ueba"
Me. ResumeLayout ( Fal se)

End Sub

#End Regi on

End Cl ass


Cdigo fuente 9

En la versin de Visual Studio 2008 es de la siguiente forma, la codificacin de sistema se oculta,
como se muestra en Cdigo fuente 9.A.

Publ i c Cl ass For m1

Pr i vat e Sub For m1_Load( ByVal sender As Syst em. Obj ect , ByVal e As Syst em. Event Ar gs) Handl es MyBase. Load
Me. Text = ( " Hol a Mundo Vi sual St udi o . NET" )
End Sub
End Cl ass
Cdigo fuente 9.A

Tambin se puede usar en vez de Me el nombre del formulario por defecto Form1 esto para las
versiones anteriores no orientadas a objetos, as:
For m1. Text = ( " Hol a Mundo Vi sual St udi o . NET" )

El lector puede estar sorprendido ante tal cantidad de cdigo para un simple formulario, por lo
que vamos a analizar brevemente cada una de las partes que componen esta fuente para comprobar que
todas son necesarias.

Diseccionando el cdigo Fuente del Formulario

Todo este cdigo que vemos por primera vez nos puede parecer muy complejo. En el caso de un
programador de VB6, puede hacer retroceder la vista hacia dicha versin y en su sencillez a la hora de
crear un formulario.
Si es una nueva versin de VB por qu es, o al menos parece ms complicado, cuando debera de
ser todo lo contrario?.

Bien, si analizamos la situacin y reflexionamos un poco, veremos cmo esta aparente dificultad no es
tal. Por una parte, pensemos en las ventajas de poder crear un formulario desde cdigo, esto abre la
puerta a muchas posibilidades que tenamos cerradas en VB6, donde el cdigo de creacin del
formulario no era accesible por el programador. Por otro lado, todo el cdigo del formulario ha
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
13

hhharanda@yahoo.com
sido creado automticamente por el diseador (VB), de manera que en circunstancias normales,
no tendremos que preocuparnos por escribirlo, sino que ser el propio diseador quien lo genere
por nosotros.
A continuacin y para poder asimilar mejor todas estas novedades, vamos a proceder a examinar el
anterior cdigo fuente por partes y de un modo general, por lo que ciertas instrucciones, palabras
clave, tcnicas, etc., no sern tratadas aqu, explicndose cada una en su correspondiente tema del
texto.

La Clase del Formulario

Todo formulario es un objeto y el cdigo de un objeto se escribe en una clase. Por dicho motivo,
debemos crear una nueva clase usando las palabras clave Class...End Class y heredar esta clase de
la clase Form con la palabra clave Inherits. La clase Form se encuentra en el espacio de nombres
System.Windows.Forms y contiene todas las clases relacionadas con el formulario y controles.
Ver Cdigo fuente 10.


Publ i c Cl ass For m1
I nher i t s Syst em. Wi ndows. For ms. Form
. . .
. . .
End Cl ass

Cdigo fuente 10

En la versin de Visual Studio 2008 oculta la llamada a las clases heredadas (Inherits
System.Windows.Forms.Form), lo hace internamente.

Por el mero hecho de establecer una relacin de herencia entre Form y Form1, toda la funcionalidad
de la clase Form (que representa la clase padre o base) pasa a la nueva clase Form1 (que
representa a la clase hija o derivada), a la que podremos aadir nuevas caractersticas propias, de
forma similar a como se establece una relacin real padre-hijo.

Para ms informacin sobre los espacios de nombres, consulte el lector el tema dedicado a .NET
Framework.

El Mtodo Constructor New( )

Toda clase debe tener lo que se denomina un mtodo constructor, que es el primero que se ejecuta
cuando es instanciado un objeto de la clase y en l se escribe el cdigo de inicializacin para
el objeto.
Dentro de VB.NET el mtodo constructor para una clase se debe llamar New( ). Ver Cdigo fuente
11.
Esto es en la versin Visual Studio 2005, para la versin VS 2008 se ha simplificado notablemente como
se muestra en Cdigo fuente 9.A.

Publ i c Sub New()
MyBase. New( )

' Thi s cal l i s r equi r ed by t he Wi ndows For mDesi gner .
I ni t i al i zeComponent ( )

' Add any i ni t i al i zat i on af t er t he I ni t i al i zeComponent ( ) cal l

End Sub

Cdigo fuente 11
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
14

hhharanda@yahoo.com
Puesto que nuestra clase Form1 hereda de la clase Form, en el mtodo constructor de Form1
llamamos al mtodo constructor de la clase base con MyBase.New( ). La palabra clave MyBase
representa al objeto de la clase padre. Por ltimo llamamos al mtodo InitializeComponent( ), que
como su nombre indica, se encarga de inicializar los componentes del formulario: configura las
propiedades del formulario, crea y aade los controles.

Configuracin del formulario y creacin de controles

Siguiendo un orden lgico de ejecucin, pasemos ahora al mtodo InitializeComponent( ). Antes de
comenzar a ejecutarlo se declaran dos variables: Label1, un objeto que representa al control Label
que hemos incluido en el formulario, y components, que se trata de un objeto en el que se
incluirn los elementos no visuales del formulario. En nuestro ejemplo no se realiza uso de este
objeto

Es importante destacar la advertencia que incluye el diseador del formulario en el cdigo, justo antes
de comenzar este mtodo, indicando que no se modifique dicho mtodo mediante cdigo, sino que se
utilice el diseador para tal labor.
Dentro del cdigo de InitializeComponent( ) propiamente dicho, la palabra clave Me nos permite
referirnos a cualquier elemento del formulario (propiedades, mtodos, etc), desde dentro del
propio formulario. Aunque no es necesario el uso de Me, se recomienda por hacer ms fcil la
lectura del cdigo; el propio IDE al generar el cdigo utiliza esta palabra, lo cual es indicativo de su
importancia.
Se instancia el control Label1, y se asigna valor a sus propiedades, para ms adelante, agregarlo a la
lista de controles del formulario con el mtodo AddRange( ) de la coleccin Controls del formulario.

Tambin se establecen valores para las propiedades del formulario, y durante todo este tiempo,
para evitar efectos extraos de visualizacin, esta es suspendida para el formulario, y se vuelve a
reanudar al final. Esto se consigue con los mtodos SuspendLayout( ) y ResumeLayout( ) del
formulario. Ver el Cdigo fuente 12.

Fr i end Wi t hEvent s Label 1 As Syst em. Wi ndows. For ms. Label
' Requi r ed by t he Wi ndows For mDesi gner
Pr i vat e component s As Syst em. Component Model . Cont ai ner
' NOTE: The f ol l owi ng pr ocedur e i s r equi r ed by t he Wi ndows For mDesi gner
' I t can be modi f i ed usi ng t he Wi ndows For mDesi gner .
' Do not modi f y i t usi ng t he code edi t or .
<Syst em. Di agnost i cs. Debugger St epThr ough( ) > Pr i vat e Sub I ni t i al i zeComponent ( )
Me. Label 1 = New Syst em. Wi ndows. For ms. Label ( )
Me.SuspendLayout()
'
' Label 1
'
Me. Label 1. Font = New Syst em. Dr awi ng. Font ( " Mi cr osof t Sans Ser i f " , 20. 25! ,
Syst em. Dr awi ng. Font St yl e. Regul ar , Syst em. Dr awi ng. Gr aphi csUni t . Poi nt , CType( 0,
Byt e) )
Me. Label 1. Locat i on = New Syst em. Dr awi ng. Poi nt ( 56, 56)
Me. Label 1. Name = " Label 1"
Me. Label 1. Si ze = New Syst em. Dr awi ng. Si ze( 184, 40)
Me. Label 1. TabI ndex = 0
Me. Label 1. Text = " Hol a Mundo"
' For m1
Me. Aut oScal eBaseSi ze = New Syst em. Dr awi ng. Si ze( 5, 13) Me. Cl i ent Si ze
= New Syst em. Dr awi ng. Si ze( 292, 273) Me. Cont r ol s. AddRange( New
Syst em. Wi ndows. For ms. Cont r ol ( ) {Me. Label 1}) Me. Name = " For m1"
Me. St ar t Posi t i on = Syst em. Wi ndows. For ms. For mSt ar t Posi t i on. Cent er Scr een
Me. Text = " Pr ogr ama de pr ueba"
Me.ResumeLayout(False)
End Sub
Cdigo fuente 12.
@ Ing. CIP Herberth Aranda Rojas
7. Formularios
15

hhharanda@yahoo.com
Liberacin de Recursos del Formulario

El mtodo Dispose( ) del formulario, sirve para indicarle al entorno de ejecucin de .NET
Framework, que el formulario ya no se va a utilizar y que todos los recursos que ha estado
usando, quedan de nuevo a disposicin del entorno para que el recolector de basura de la
plataforma, los recupere cuando considere necesario. Esta accin se emplea tanto para los
componentes, representados por la variable components, como para el propio formulario, en la llamada
que hace a este mismo mtodo en su clase base. Ver Cdigo fuente 13.



' For mover r i des di spose t o cl ean up t he component l i st .
Pr ot ect ed Over l oads Over r i des Sub Di spose( ByVal di sposi ng As Bool ean)
I f di sposi ng Then
I f Not ( component s I s Not hi ng) Then
components.Dispose()
End I f
End I f
MyBase. Di spose( di sposi ng)
End Sub


Cdigo fuente 13

Estructura y Grabacin del Proyecto

Al crear un nuevo proyecto en VB.NET, se genera en disco, partiendo de la ruta especificada en la
ventana de creacin del proyecto, una estructura de directorios, que contiene los archivos que forman
parte del proyecto. La Figura 51 muestra la estructura correspondiente al programa de ejemplo Hola
Mundo.



Figura 51. Estructura de directorios de un proyecto VB.NET.


Si modificamos los elementos del proyecto (formularios, clases, mdulos, etc), debemos grabar los
cambios en alguna de las siguientes maneras:

Opcin Generar + Generar del men de VS.NET.

Opcin Depurar + Iniciar del men de VS.NET.

Pulsando [F5] al ejecutar el proyecto en modo de prueba. Los elementos del proyecto que se
hayan modificado y no se hayan grabado, se grabarn automticamente.

Un proyecto VB.NET est compuesto por un conjunto de ficheros, cuyos tipos han variado
notablemente desde VB6. Clasificados por su extensin, a continuacin se relacionan algunos de
estos ficheros:
16


VB. Cdigo fuente escrito en lenguaje Visual Basic. A diferencia de VB6, en el que haba
diferentes tipos de ficheros en funcin de si se trataba de un formulario, clase, mdulo de
cdigo, etc., un fichero con extensin VB puede contener cualquier tipo de cdigo en VB:
clases, mdulos de cdigo, etc.

VBPROJ. Proyecto de VB. Contiene informacin sobre todos los elementos que forman parte
de un proyecto: ficheros de cdigo, referencias, etc.

SLN (Solucin). Una solucin es el medio que utiliza VS.NET para agrupar varios
proyectos escritos en el mismo o en diferentes lenguajes de los que integran la plataforma
.NET.

VBPROJ.USER. Informacin sobre las opciones de usuario del proyecto.

RESX. Plantilla de recursos en formato XML.

EXE. Aplicacin ejecutable.

PDB. Informacin sobre depuracin de la aplicacin.


En el directorio BIN del proyecto se genera el fichero ejecutable, que contiene nuestra aplicacin y
que en principio es lo nico que necesitamos para ejecutar el programa en cualquier otro equipo,
que naturalmente, tambin tenga instalado la plataforma .NET Framework. Ello nos evita
problemas y ahorra tiempo de instalacin.


Una vez grabado el proyecto a disco, podemos dar por concluido el desarrollo de nuestro primer
programa Hola Mundo.

17


ENTORNOYPARTESDEVISUALSTUDIO2008
VENTANAINICIAL:

ALCREARUNNEWPROJECT(NUEVOPROYECTO)ENELMENUFILENEWPROJECT.

18


NOSMOSTRARALAPANTALLADONDEESCOGEMOSELTIPODEPROYECTODELAAPLICACINVISUAL
BASICAUTILIZAR(CONSOLAOWINDOWS).

SISELECCIONAMOSCONSOLEAPPLICATION(APLICACINCONSOLA),NOSMOSTRARALASIGUIENTE
VENTANA.

ELCDIGOVAAQU
DENTRODELMAIN
19


SISELECCIONAMOSWINDOWSAPPLICATION(APLICACINWINDOWS),NOSMOSTRARALASIGUIENTE
VENTANA.

FORMULARIOFORM1
20


PARTESDELOSELEMENTOSDEDESARROLLODELENTORNODEVISUALBASIC.NET

PARTES
1. Barrade
Ttulo.
Muestraelnombre
delprogramaysu
entornodedesarrollo.
WindowsApplication1
MicrosoftVisual
Studio.

2. Barrade
Mens.
Muestralasopciones
delmendelentorno
dedesarrollo.

3. Barrade
Herramientas
Estndar
MuestralosIconosde
lasopciones
principales.

21


4. Ventanade
Formulario.
Muestraunaventana
queesunObjeto,el
readetrabajodonde
sepegarnlos
controles(Objetos)

22


5. Cajade
Herramientas.
Muestraloscontroles
ausareneldesarrollo
deunaaplicacin.

23


6. Ventanade
Proyectos.
Muestrael/los
Formulariosque
contienenelproyecto.

7. Ventanade
Propiedades.
Muestralasdiferentes
caractersticasdelos
Controles(Objetos)

8. Ventanade
Cdigos.
Muestraelreade
codificacindonde
construiremoslos
cdigosyestructuras
autilizar.

9. Ventanade
Erroresde
Ejecucin.
Muestraloserrores
enelmomentodela
ejecucindeuna
aplicacin.

24





Escritura de Cdigo




Escribir cdigo, el papel clsico del Programador

En el tema anterior hemos realizado un primer acercamiento al desarrollo de programas en VB.NET,
creando el tpico Hola Mundo, y utilizando VS.NET como herramienta de trabajo; comprobando
tambin, algunas de las mltiples facilidades que nos proporciona el IDE para la construccin de
aplicaciones.

Sin embargo, por muy sofisticado que sea un entorno de trabajo, hay un aspecto que siempre ha sido
propio del programador, y que no podr ser eliminado: la escritura del cdigo.

Es cierto que la generacin de cdigo automtica por parte de los asistentes supone una gran ayuda,
pero nunca se ajustar a las necesidades especficas que requieren los programas, por lo que el
programador ser el que tenga siempre la ltima palabra y deba retocar o aadir el cdigo necesario
para que el comportamiento de la aplicacin sea el requerido.


Un programa Escribiendo su Cdigo

En este tema vamos a desarrollar un sencillo programa, en el que a diferencia del ejemplo mostrado en
el tema anterior, escribiremos nosotros el cdigo en lugar de dejar al IDE que lo haga de forma
automtica.
8. Estructura de Cdigo
25
Ing. CIP Herberth Aranda Rojas

Ser un programa como hemos dicho muy sencillo, no disearemos formularios, solamente tomaremos
un valor que introducir el usuario por pantalla y lo mostraremos posteriormente. La idea principal es
que el lector aprenda como configurar el proyecto para establecer el lugar por el que se iniciar el
programa, y el modo de escribir cdigo para el mismo.


Crear el Proyecto

En primer lugar, iniciaremos el IDE de VS.NET y crearemos un nuevo proyecto en VB.NET de la
misma forma que la explicada en el tema anterior. El nombre que daremos al proyecto ser
EscribirCodigo.

Al igual que en el ejemplo HolaMundo, este tipo de proyecto crea un formulario vaco, pero no vamos
a hacer uso del mismo. A continuacin, agregaremos un nuevo mdulo al proyecto para el cdigo
que vamos a escribir.


Un Nuevo Mdulo de Cdigo

Mediante la opcin de men de VS.NET Proyecto + Agregar mdulo, se abrir la caja de dilogo
Agregar nuevo elemento, con la que podremos aadir a nuestro proyecto un mdulo (como este caso),
formulario, clase, etc., seleccionando dicho elemento del panel derecho. Ver Figura 52.



Figura 52. Aadir un nuevo mdulo al proyecto.


Daremos el nombre MiCodigo.VB al mdulo, con lo que se crear el nuevo mdulo en un fichero y se
mostrar una nueva pestaa en la ventana principal del IDE con el editor de cdigo para el mdulo.
8. Estructura de Cdigo
26
Ing. CIP Herberth Aranda Rojas

Ver Figura 53. Un mdulo se define mediante las palabras clave Module...End Module, que indican
respectivamente el comienzo y fin del mdulo, y entre ellas escribiremos el cdigo que va a contener:
procedimientos, declaraciones, etc.



Figura 53. Editor de cdigo para el mdulo.


La Ubicacin Fsica del Cdigo

Como vimos en pri meros cap tul os del materi al y en el ejemplo anterior, el cdigo de un
programa se escribe en ficheros con extensin .VB. Ahora hemos aadido un mdulo al proyecto
que se ha creado en un nuevo fichero de este tipo.

Los ficheros .VB pueden contener cualquier instruccin en lenguaje VB.NET, de manera que es
posible tener un nico fichero .VB con todo el cdigo de la aplicacin, en el caso de que esta no
sea muy extensa, tal y como muestra de forma esquemtica el Cdigo fuente 14.



CodigoProg.VB
=============
Class Cliente
' cdigo de la clase
' ............
' ............
End Class

Module General
' cdigo del mdulo
' ............
' ............
End Module

Class Facturas
' cdigo de la clase
' ............
' ............
End Class

Cdigo fuente 14


Aunque tambin podemos aadir todos los ficheros .VB que necesitemos al proyecto, para tener
nuestro cdigo organizado por procedimientos generales, procedimientos especficos de la aplicacin,
clases de formularios, clases no visuales, etc., este el modo recomendado de organizacin cuando el
programa es muy grande. Ver Cdigo fuente 15. En cualquier caso, disponemos de una gran
flexibilidad a este respecto.
8. Estructura de Cdigo
27
Ing. CIP Herberth Aranda Rojas

Codi goCl ases. VB
============= Cl ass Cl i ent e
' cdi go de l a cl ase
' . . . . . . . . . . . .
' . . . . . . . . . . . .
End Cl ass

Cl ass Fact ur as
' cdi go de l a cl ase
' . . . . . . . . . . . .
' . . . . . . . . . . . .
End Cl ass
**************************************************

Rut i nasVar i as. VB
================
Modul e Gener al
' cdi go del mdul o
' . . . . . . . . . . . .
' . . . . . . . . . . . .
End Modul e

Modul e Li st ados
' cdi go del mdul o
' . . . . . . . . . . . .
' . . . . . . . . . . . .
End Modul e

Cdigo fuente 15


Comentarios de Cdigo

Para introducir un comentario aclaratorio en el cdigo de un programa utilizaremos la comilla simple
( ), seguida del texto correspondiente al comentario. Podemos insertar comentarios desde el
comienzo de lnea o a continuacin de cdigo ejecutable. Ver Cdigo fuente 16.



Sub Pr ueba( )
' Este es un comentario desde el principio de lnea
Di mVal or As I nt eger

Val or = 158 ' Est e es un coment ar i o j unt o a una l nea de cdi go

End Sub

Cdigo fuente 16


Procedimientos

Dentro de cualquier lenguaje de programacin, un procedimiento o rutina de cdigo es aquella
entidad que guarda un conjunto de lneas de cdigo que sern ejecutadas al llamar al procedimiento
desde cualquier otro punto del programa.
8. Estructura de Cdigo
28
Ing. CIP Herberth Aranda Rojas

Para crear un procedimiento en el programa usaremos las palabras clave Sub...End Sub, y entre las
mismas escribiremos las instrucciones del procedimiento. El Cdigo fuente 17 muestra un ejemplo.


Sub Prueba()
' instruccin1
' instruccin2
' instruccin3
' ............
' ............
' ............
'
instruccinN
End Sub

Cdigo fuente 17


Los procedimientos podemos incluirlos en cualquier lugar dentro del programa. En el ejemplo actual,
escribiremos un procedimiento en el mdulo MiCodigo, al que daremos el nombre de Main( ) y que
representa el procedimiento por el cual se comienza a ejecutar la aplicacin.


El punto de Entrada al Programa

Todo programa debe tener un punto de entrada, o elemento que sea el que se comienza a ejecutar en
primer lugar.

En el caso de una aplicacin con estilo Windows, lo primero que comienza a ejecutarse por defecto es
el formulario. Sin embargo, puede haber ocasiones en que no queramos ejecutar el formulario en
primer lugar, bien porque debamos establecer valores de inicializacin para el programa, en un
procedimiento que sea el que da paso al formulario, o simplemente, puede que slo queramos ejecutar
uno o varios procedimientos sin usar formularios.

En esta situacin, debemos escribir un procedimiento especial al que daremos el nombre Main(
), y que en VB.NET representa el punto de entrada a la aplicacin, antes incluso que el propio
formulario. Tambin debemos configurar el proyecto, para que conozca la existencia de dicho
procedimiento y lo ejecute en primer lugar.

En el mdulo de cdigo, escribiremos por lo tanto este procedimiento, aunque de momento vaco. Ver
Cdigo fuente 18.



Module MiCodigo

Sub Main()

End Sub

End Module

Cdigo fuente 18
8. Estructura de Cdigo
29
Ing. CIP Herberth Aranda Rojas

La Clase MessageBox

Queremos mostrar un aviso cuando empecemos a ejecutar la aplicacin, por lo que podemos usar
la clase MessageBox. Esta es una clase del sistema, que permite mostrar un mensaje en pantalla
al usuario mediante su mtodo Show( ), y una cadena de caracteres que pasaremos como parmetro a
dicho mtodo.

Se trata de una clase no instanciable, es decir, no permite que creemos objetos a partir de ella. Al
utilizarla, es el entorno el encargado de crear un objeto compartido, que usaremos para llamar a sus
miembros compartidos o Shared.

Para usar esta clase en nuestro procedimiento Main( ), podemos hacerlo como se muestra en el Cdigo
fuente 19.



Sub Main()

MessageBox.Show("Empieza el programa")

End Sub

Cdigo fuente 19


Configurar el Punto de Entrada del Proyecto

Si ahora ejecutamos el proyecto, seguir apareciendo el formulario y no el mensaje que esperbamos.
Esto es debido a que no hemos configurado el proyecto para que se inicie por Main( ).

Para establecer qu elemento del proyecto debe ejecutarse en primer lugar, debemos acudir a las
propiedades del proyecto, a las que accedemos a travs de la ventana Explorador de soluciones, de
alguna de las siguientes formas:

Opcin Ver + Explorador de soluciones, del men de VS.NET.

Situando el cursor del ratn sobre la pestaa Explorador de soluciones, se expandir su
ventana.

Haciendo clic sobre el botn de la barra de herramientas correspondiente a esta opcin. Ver
Figura 54.


Figura 54. Botn para abrir el Explorador de soluciones.


Cualquiera de estas vas, nos llevar a la ventana de la Figura 55.
8. Estructura de Cdigo
30
Ing. CIP Herberth Aranda Rojas



Figura 55. Explorador de soluciones de VS.NET.

Seguidamente haremos clic sobre el nombre del proyecto, y para acceder a sus
propiedades emplearemos alguna de las siguientes formas:

Haremos clic sobre el tercer botn de esta ventana, que corresponde a las propiedades del
elemento seleccionado. Ver Figura 56.


Figura 56. Botn de propiedades del Explorador de soluciones.

Seleccionaremos la opcin de men de VS.NET Proyecto + Propiedades.

Haremos clic sobre el nombre del proyecto en el Explorador de soluciones, y seleccionaremos
la opcin Propiedades del men contextual.

Cualquiera de estas acciones nos mostrar la ventana de propiedades del proyecto en ella, debemos
abrir la lista desplegable del elemento Objeto inicial, que actualmente mostrar el nombre del
formulario como objeto inicial, y seleccionar Sub Main. Pulsaremos Aceptar y a partir de ese
momento, el entorno de ejecucin buscar un procedimiento con el nombre Main( ), para ejecutar en
primer lugar. Ver Figura 57.


Figura 57. Ventana de propiedades del proyecto.
8. Estructura de Cdigo
31
Ing. CIP Herberth Aranda Rojas

El resultado ahora, al ejecutar el programa, ser el mensaje que mostramos a travs de MessageBox.
Ver Figura 58.



Figura 58. Mensaje mostrado desde Main( ).


Variables

Creemos que mostrar un simple mensaje es insuficiente en este ejemplo, por lo que vamos adems, a
pedir al usuario que introduzca un valor, que mostraremos en otro mensaje posterior. Dicho valor lo
almacenaremos en una variable del programa.

Para declarar variables en VB.NET utilizaremos la instruccin Dim, seguida del nombre de la
variable y el tipo de dato que queremos asignarle. En Main( ) declararemos una variable como muestra
el Cdigo fuente 20.


Sub Mai n( )

MessageBox. Show( " Empi eza el pr ogr ama" )

Dim Nombre As String

End Sub

Cdigo fuente 20

InputBox( )

InputBox( ) es una funcin que muestra una caja de dilogo en la que el usuario puede
introducir un valor, que ser devuelto al aceptar dicha caja.
El Cdigo fuente 21 muestra el formato de InputBox( ).



InputBox(Mensaje,Ttulo,RespuestaDefecto,XPosicion,YPosicion)

Cdigo fuente 21

Mensaje. Obligatorio. Cadena de caracteres con el texto que va a mostrar la caja de dilogo.

Ttulo. Opcional. Ttulo que aparecer en la caja de dilogo.

RespuestaDefecto. Opcional. Cadena de caracteres con el valor que devolver esta funcin,
en el caso de que el usuario no escriba nada.

XPosicion, YPosicion. Opcionales. Valores numricos que indican las coordenadas en donde
ser mostrada la caja. Si se omiten, se mostrar en el centro de la pantalla.

8. Estructura de Cdigo
32
Ing. CIP Herberth Aranda Rojas

Completando el Procedimiento

Llegados a este punto del ejemplo, tenemos todos los ingredientes para completarlo. Necesitamos que
el usuario introduzca su nombre utilizando InputBox( ), volcar dicho nombre en la variable que hemos
declarado y mostrarlo usando otro MessageBox. Todo ello lo vemos en el Cdigo fuente 22.



Sub Main()

MessageBox.Show("Empieza el programa")

Dim Nombre As String

Nombre = InputBox("Escribe tu nombre")

MessageBox.Show("El nombre del usuario es: " & Nombre, "Programa de
prueba")

End Sub

Cdigo fuente 22


Describamos los ltimos pasos que hemos dado:

Despus de la declaracin de la variable Nombre, llamamos a la funcin InputBox( ). Como dicha
funcin devuelve una cadena de caracteres con el valor que haya escrito el usuario, necesitamos
recuperarla de alguna forma, y esta es asignando el resultado de la llamada a la funcin en la variable.
La Figura 59 muestra la caja de dilogo resultante de InputBox( ).



Figura 59. Ejecucin de la funcin InputBox( ).


Despus de escribir su nombre en el campo de la caja, si el usuario pulsa OK, InputBox( ) devolver el
valor de dicho campo a la variable Nombre. Por ltimo, mostraremos el valor de la variable usando el
mtodo Show( ) de MessageBox, pero con algunas variaciones respecto a la primera vez que
utilizamos esta clase en Main( ).
En este caso concatenamos una cadena de caracteres al nombre, para ello debemos utilizar el
operador &, y empleamos un segundo parmetro, que muestra un ttulo en la ventana del mensaje.
Ver Figura 60.
8. Estructura de Cdigo
33
Ing. CIP Herberth Aranda Rojas



Figura 60. Mensaje con el valor resultante obtenido al llamar a InputBox( ).


Finalizamos el Programa

Tras la ejecucin del programa para comprobar que todo funciona correctamente, grabamos si es
necesario, los ltimos cambios del proyecto y podemos dar por concluida la aplicacin.





Una aplicacin con funcionalidad bsica




Integrando lo visto hasta el momento

Los ejemplos de los temas anteriores constituyen un buen comienzo, y nos han permitido dar nuestros
primeros pasos tanto con el lenguaje como con el IDE, pero evidentemente, no nos van a llevar muy
lejos si lo que pretendemos es crear aplicaciones con algo ms de contenido.

En este tema no vamos a entrar todava en los detalles del IDE ni en el lenguaje. Para que el lector siga
familiarizndose con el entorno, daremos unos pequeos pasos iniciales ms; con ello pretendemos
que se adquiera una mejor visin global tanto del lenguaje VB.NET como de su herramienta de
trabajo: Visual Studio .NET.


Un programa ms operativo

En este tema vamos a escribir una aplicacin algo ms completa, que consistir en un formulario en
el que introduciremos el nombre de un fichero y un pequeo texto, que seguidamente grabaremos en
nuestro equipo. As que, una vez esbozado el objetivo a conseguir... manos a la obra.
9. Aplicacin con Funcionalidad Bsica
35
Ing. CIP Herberth Aranda Rojas

Diseo del formulario

Despus de iniciar VS.NET, crearemos un nuevo proyecto al que daremos el nombre de
EscritorTexto (cree el proyecto EscritorTexto). En el formulario del proyecto, Form1, aadiremos
los controles que permitirn al usuario escribir un texto, grabar dicho texto en un fichero, etc.
En concreto aadiremos dos controles Label, dos TextBox y dos Button, cuya ubicacin en la
ventana del Cuadro de herramientas mostramos en la Figura 61.



Figura 61. Controles que debemos dibujar en el formulario del ejemplo.

La forma de dibujar un control en un formulario ya ha sido explicada anteriormente, por lo que
directamente mostramos en la Figura 62, el formulario resultante con los controles ya insertados, en
donde indicamos el tipo de control y el nombre que hemos asignado a cada control en su propiedad
Name.


Figura 62. Formulario para la grabacin de un texto en un fichero.
9. Aplicacin con Funcionalidad Bsica Ing. CIP Herberth Aranda Rojas
36


A continuacin detallamos brevemente la funcionalidad de cada uno de los controles de este
formulario:

Label1, Label2. Muestran un simple literal que indica al usuario lo que debe introducir en los
controles de texto.

txtNombreFichero. Contiene el nombre que daremos al fichero en el que grabaremos el texto.

txtTexto. Contiene el texto que se va a guardar en un fichero. La diferencia de este control,
con el otro control de tipo TextBox del formulario, reside en que permite escribir varias lneas
de texto, gracias a que hemos asignado a su propiedad Multiline el valor True. La propiedad
Multiline por defecto contiene False, lo que indica que un TextBox slo permite introducir el
texto en una nica lnea.

btnGrabar. Al pulsar este botn, se tomar el texto del control txtTexto y se grabar en un
fichero con el nombre que contenga el control txtNombreFichero. Veremos como escribir el
cdigo para un control ms adelante.

btnSalir. Al pulsar este botn, se finalizar la ejecucin del programa, de igual forma que si
pulsramos el botn de cierre del formulario o [ALT+F4].

Observe el lector que al asignar el nombre de algunos controles, hemos utilizado un prefijo. As, para
un TextBox utilizamos el prefijo txt (txtNombreControl); para un Button, btn (btnNombreControl),
etc.

Esta tcnica, denominada convenciones de notacin, consiste en una serie de normas no obligatorias,
utilizadas a la hora de escribir el cdigo, y que son pactadas generalmente en equipos de trabajo, de
manera que cuando un programador debe tomar parte de un proyecto que ha estado desarrollando otro
programador, la interpretacin del cdigo se facilita, y el desarrollo del proyecto en este sentido, se
dinamiza.

El programador independiente puede igualmente utilizar este tipo de convenciones, ya que gran parte
del cdigo fuente que circula en artculos, demos, aplicaciones shareware, etc., emplean una serie de
convenciones genricas de notacin, por lo que si necesita en algn momento compartir su cdigo, la
legibilidad del mismo se facilita.

La Tabla 4 muestra una serie de convenciones (prefijos) para la codificacin de los nombres de
controles, que proponemos como ejemplo, para que el lector utilice estas o alguna similar.


Control Prefijo
Label lbl
Button btn
TextBox txt
CheckBox chk
ListBox lst
ComboBox cbo
9. Aplicacin con Funcionalidad Bsica Ing. CIP Herberth Aranda Rojas
37



RadioButton rbt
MainMenu Mnu
GroupBox grp
MainMenu
ContextMenu
mnu
FontDialog
ColorDialog
y dems controles
de caja dilogo
dlg
Form frm

Tabla 4. Convenciones de notacin para controles de formulario.


Controles (Objetos) y Eventos

Windows es un sistema basado en eventos. Esto quiere decir que cualquier cosa que ocurra dentro de
un formulario, bien sobre el propio formulario, o a cualquiera de los controles que lo componen, se
detecta a travs de un suceso o evento: pasar el ratn sobre un control, hacer clic, escribir en un
control de texto, cerrar el formulario, redimensionarlo, etc. Cualquier accin de este tipo provoca el
evento correspondiente.

En nuestro ejemplo actual, si ejecutamos el programa y hacemos clic sobre alguno de los botones del
formulario, no ocurrir nada en absoluto. Quiere esto decir que los botones no tienen eventos?, la
respuesta es no, los botones s tienen eventos, as como los dems controles, y aunque no lo
percibamos, se estn produciendo constantemente, lo que sucede, es que una vez que dibujamos un
control en un formulario, dicho control inicialmente no est programado para responder a los eventos,
por lo que debemos escribir el cdigo para el evento correspondiente, en respuesta a la accin del
usuario.

Siguiendo con los botones del formulario, vamos a elegir el ms sencillo de codificar, btnSalir. Para
escribir el cdigo del evento correspondiente a la pulsacin de este control, la forma ms rpida es
haciendo doble clic sobre l en el diseador del formulario, lo que abrir el editor de cdigo y nos
situar en un procedimiento vaco que mostramos en el Cdigo fuente 23.



Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnSalir.Click

End Sub

Cdigo fuente 23. Procedimiento para el evento Click de un Button.


Se trata de un procedimiento cuyo nombre, btnSalir_Click, compuesto del nombre del control y del
evento, lo proporciona automticamente el IDE. Recibe dos parmetros: Sender y e, con
informacin adicional proporcionada por el entorno. Pero lo verdaderamente importante est al final de
la declaracin: Handles btnSalir.Click. La palabra clave Handles, seguida del nombre de un
control, un punto y el nombre de un evento de ese control, le indica al entorno de .NET Framework
que debe ejecutar este procedimiento cuando se produzca el evento para ese control. No realizaremos
en este momento una explicacin ms detallada puesto que trataremos este aspecto con ms
profundidad en temas posteriores del texto.
9. Aplicacin con Funcionalidad Bsica Ing. CIP Herberth Aranda Rojas
38




Este procedimiento ser ejecutado cada vez que pulsemos el control btnSalir, por lo que si en tal
situacin, queremos cerrar el formulario, slo ser necesario incluir la lnea de cdigo mostrada en el
Cdigo fuente 24.



Pr i vat e Sub bt nSal i r _Cl i ck( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es bt nSal i r . Cl i ck

' cer r ar el f or mul ar i o
Me.Close()

End Sub

Cdigo fuente 24. Cdigo del evento Click para cerrar un formulario.


El mtodo Close( ) del formulario, produce su cierre, y por ende, la finalizacin del programa. El
efecto es el mismo que si pulsamos el botn de cierre del formulario o la combinacin [ALT+F4]. La
palabra clave Me indica que estamos haciendo usando una propiedad o mtodo del formulario desde el
interior de la clase del propio formulario; esta palabra clave ser explicada con ms detalle en el tema
dedicado a la programacin orientada a objeto.

Ahora nos formularemos una interesante cuestin: -Y por qu saba VS.NET cul evento quera
codificar y me lo ha mostrado directamente?-. Pues sencillamente, VS.NET no lo saba, lo que sucede
es que cuando hacemos doble clic sobre un control en el diseador del formulario, se abre el editor de
cdigo y nos sita en el evento por defecto del control. Y sucede que el evento por defecto de un
control Button es Click( ).


Otro Modo de Escribir el Cdigo de un Evento

En el apartado anterior hemos mostrado el medio ms fcil y rpido para escribir el cdigo de un
evento. Sin embargo, existe otra forma de realizar esta operacin, ya que en muchas ocasiones
tendremos que codificar un evento distinto al evento por defecto de un control o formulario, y en ese
caso deberemos seleccionarlo manualmente. Veamos los pasos a realizar cuando se plantee dicha
situacin.

En el formulario tenemos todava pendiente de codificar el botn btnGrabar. Lo que necesitamos
que haga este botn, es grabar el texto escrito en el control txtTexto, en un fichero al que daremos
como nombre el valor que se haya escrito en el control txtNombreFichero.

Primeramente debemos acceder al editor de cdigo del formulario, y abrir la lista desplegable Nombre
de clase, situada en la parte superior izquierda. Ver Figura 63.

Esta lista muestra el nombre del formulario y los controles que hemos incluido en l, o dicho de otro
modo, todos los objetos del formulario, teniendo en cuenta que el propio formulario tambin es un
objeto.
39
9. Aplicacin con Funcionalidad Bsica Ing. CIP Herberth Aranda Rojas



Seleccionaremos el control para el que vamos a codificar un evento: btnGrabar, y a
continuacin abriremos la lista desplegable Nombre de mtodo, situada esta vez en la parte
superior derecha del editor de cdigo. Ver Figura 64.


Figura 63. Editor de cdigo mostrando la lista de nombres de clases.




Figura 64. Editor de cdigo mostrando la lista de mtodos.


Esta lista muestra todos los eventos que podemos codificar para el control que hemos seleccionado en
el formulario. Al seleccionar el evento Click( ), se mostrar la declaracin de dicho procedimiento de
evento vaca para escribir las acciones descritas anteriormente.



Grabando texto en un fichero

Una vez seleccionado el procedimiento de evento para el botn btnSalir, escribiremos las lneas
mostradas en el Cdigo fuente 25 que comentaremos detalladamente.







40
9. Aplicacin con Funcionalidad Bsica Ing. CIP Herberth Aranda Rojas



' poner esta declaracin al comienzo del fichero de cdigo
Imports System.IO

'....

Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnGrabar.Click

' declarar una variable para la escritura
' de texto en un fichero
Dim oEscritor As StreamWriter

' crear un fichero de texto vaco
' y obtener un objeto StreamWriter
' para escribir en el fichero
oEscritor = File.CreateText(Environment.CurrentDirectory & "\" &
Me.txtNombreFichero.Text & ".TXT")

' escribir en el fichero el contenido del
' control TextBox
oEscritor.Write(Me.txtTexto.Text)

' cerrar el objeto, lo que cierra tambin el
' fichero, y eliminar el objeto
oEscritor.Close()
oEscritor = Nothing

End Sub

Cdigo fuente 25. Evento Click() del botn btnGrabar.

En primer lugar declaramos la variable oEscritor de tipo StreamWriter. Este tipo de objetos nos
permitirn realizar la escritura de un flujo (stream) de caracteres sobre un fichero del disco. Como
vemos en el cdigo fuente, para poder utilizar objetos de la clase StreamWriter, tenemos que poner al
comienzo del fichero de cdigo la instruccin para importar el espacio de nombres System.IO, que
contiene esta clase.

A continuacin, vamos a crear un fichero de texto en nuestro disco duro, en la misma ruta en la que se
est ejecutando la aplicacin. Esto lo conseguimos llamando al mtodo compartido CreateText( ), del
objeto File (observe el lector que al ser un mtodo compartido no necesitamos instanciar un objeto de
la clase File y pasarlo a una variable).

El mtodo CreateText( ) recibe como parmetro una cadena de caracteres con la ruta y el nombre del
fichero a crear. Para componer esta ruta utilizamos por un lado el objeto Environment y su propiedad
compartida CurrentDirectory que devuelve la ruta del directorio actual en donde se est ejecutando la
aplicacin, y por otro lado la propiedad Text del control txtNombreFichero, que contiene el valor que
el usuario haya escrito en dicho TextBox. Estos dos elementos los unimos, formando una sola cadena,
mediante el operador de concatenacin de VB: &.

La llamada a CreateText( ) devuelve un objeto de tipo StreamWriter, que depositamos en la variable
oEscritor, con lo que ya tenemos en la variable un objeto para escribir texto.

El siguiente paso consiste en llamar al mtodo Write( ) de oEscritor y pasarle como parmetro la
propiedad Text del control txtTexto, que contiene el texto escrito por el usuario. Este texto es grabado
en el fichero.

Para finalizar, cerramos el objeto oEscritor llamando a su mtodo Close( ) y le asignamos la palabra
clave Nothing para liberar los recursos del sistema que pudiera estar utilizando.




41
9. Aplicacin con Funcionalidad Bsica Ing. CIP Herberth Aranda Rojas



Observe el lector, como el formato de manipulacin de objetos se basa en la variable que contiene el
objeto o el propio nombre del objeto (si es compartido), un punto y el nombre del mtodo a llamar o
propiedad de la que recuperamos o a la que asignamos un valor, tal y como muestra de
forma esquemtica el Cdigo fuente 26.




' objetos instanciados
'---------------------
oVar.Propiedad = valor ' asignar valor a propiedad
variable = oVar.Propiedad ' recuperar valor de propiedad
oVar.Metodo([ListaParametros]) ' llamar a mtodo
variable = oVar.Metodo([ListaParametros]) ' llamar a mtodo y recuperar valor

' objetos compartidos
'---------------------
Objeto.Propiedad = valor ' asignar valor a propiedad
variable = Objeto.Propiedad ' recuperar valor de propiedad
Objeto.Metodo([ListaParametros]) ' llamar a mtodo
Variable = Objeto.Metodo([ListaParametros]) ' llamar a mtodo y recuperar valor

Cdigo fuente 26. Modos de manipulacin propiedades y mtodos de objetos.


Ya slo queda ejecutar el programa, escribir valores en los controles, y generar el fichero de texto
para comprobar que todo funciona correctamente, con ello habremos conseguido crear un programa
que tenga una aplicacin algo ms prctica que el tpico hola mundo.


Una Puntualizacin Sobre los Eventos

En un apartado anterior hemos explicado que si pulsbamos sobre un nuevo control Button, este no
realizaba ninguna accin porque no habamos codificado todava su evento correspondiente. Esto
puede dar lugar a confusiones, si por ejemplo, al ejecutar un programa, en el caso de un formulario,
pulsamos su botn de cierre, lo redimensionamos, etc.; o en el caso de una lista desplegable, pulsamos
sobre el botn que abre la lista de valores.

Por qu el formulario y controles responden a esos eventos si el programador no ha escrito
cdigo para ellos?

Bien, en este caso estamos ante unos eventos que el programador, en principio, no necesita
codificar, ya que forman parte intrnseca del sistema operativo, siendo el propio sistema el
que se ocupa de que el formulario o control se comporten de acuerdo con tales eventos.







Formularios Windows




Interfaces de ventana. Formularios y controles

Es un hecho palpable el que la programacin para Internet, ha ganado en los ltimos tiempos una
importante cuota de desarrollo, en detrimento de las aplicaciones basadas en Windows. Sin embargo,
todava existe un importante conjunto de programas que debern seguir funcionando en Windows y
que tendrn que migrarse a la plataforma .NET.

Para este sector del desarrollo, .NET Framework proporciona una arquitectura renovada, en lo que a la
programacin de aplicaciones Windows se refiere: los nuevos formularios y controles Windows, que
describiremos seguidamente.

Un formulario Windows representa la conocida ventana, que se utiliza en las aplicaciones ejecutadas
bajo alguno de los sistemas operativos de la familia Windows: Windows95/98, NT, ME, 2000, XP,
etc.

Un control, por otra parte, es aquel elemento situado dentro de una ventana o formulario, y que
permite al usuario de la aplicacin Windows, interactuar con la misma, para introducir datos o
recuperar informacin.

Dentro de .NET, las ventanas clsicas Windows, reciben la denominacin de Windows Forms, o
WinForms, para diferenciarlas de los formularios Web o WebForms, que son los que se ejecutan en
pginas ASP.NET.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
43


System.Windows.Forms

Este espacio de nombres contiene todos los tipos del entorno, a travs de los cuales podremos
desarrollar aplicaciones compuestas por formularios Windows, junto a los correspondientes
controles que permiten al usuario la interaccin con el programa.

El conjunto de clases, estructuras, enumeraciones, etc., de System.Windows.Forms, permiten la
creacin de aplicaciones Windows, basadas en el nuevo motor de generacin de formularios
(Form Engine), ms potente y verstil que el disponible en anteriores versiones de VB.


La Clase Form

Esta clase contiene todos los miembros para la creacin y manipulacin de formularios.

Tras instanciar un objeto de Form, mediante la configuracin de las adecuadas propiedades, podemos
crear formularios estndar, de dilogo, de interfaz mltiple o MDI, con diferentes bordes, etc.


Creacin de un Formulario Bsico

A pesar de que en los temas inciales de este texto, se describi el modo de creacin de una aplicacin
basada en formularios Windows, en el presente tema abordaremos la creacin y diseo de formularios,
desde un mayor nmero de perspectivas, relacionadas con los estilos de formularios, controles,
creacin desde cdigo, herencia, etc.

Comenzaremos creando una aplicacin basada slo en un formulario, para repasar el diseador de
formularios del IDE, y algunas de sus propiedades.

Iniciaremos por lo tanto Visual Studio 2008 .NET, y crearemos un nuevo proyecto VB.NET de
tipo aplicacin Windows, proceso este, que ya describimos en los mencionados temas iniciales. En este
ejemplo dejaremos el nombre de proyecto que nos propone el propio IDE, que ser
WAPAplicacion1, o bien otro nmero, si ya hemos creado algn proyecto con este nombre.

En lo que respecta al diseador del formulario, podemos modificar su tamao haciendo clic sobre las
guas de redimensin que tiene en los bordes de la plantilla de diseo, y arrastrando hasta dar el
tamao deseado. Las guas de color blanco son las que permiten modificar el tamao, mientras que las
de color gris, son fijas. Por ejemplo, si vamos a incluir muchos controles, o un ttulo largo, y el tamao
que tiene por defecto no es lo bastante grande, lo ampliaremos hasta quedar como muestra la Figura
218.

Tambin podemos conseguir el mismo efecto de cambiar el tamao del formulario desde la ventana de
propiedades, asignando valores a la propiedad Size. Para ello, haremos clic en el icono de
expansin de esta propiedad y daremos valores a sus elementos X e Y.

Igualmente haremos con la propiedad Location, de modo que cambiaremos las coordenadas
inciales en las que el formulario ser visualizado. Para que el formulario se visualice en estas
coordenadas que establecemos manualmente, debemos tambin asignar a la propiedad StartPosition el
valor Manual.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
44




Figura 218. Guas de redimensin del diseador de formularios.


Para asignar una imagen de fondo al formulario, recurriremos a la propiedad BackgroundImage,
que nos mostrar una caja de dilogo, mediante la que seleccionaremos un archivo con formato
grfico que ser mostrado en la superficie de la ventana. Si por algn motivo, necesitamos
eliminar dicha imagen de fondo para el formulario, haremos clic derecho sobre el pequeo rectngulo
situado al lado del nombre de la propiedad, y seleccionaremos la opcin Restablecer del men
contextual. Ver Figura
219.



Figura 219. Eliminar imagen de la propiedad BackgroundImage de un formulario.


El icono por defecto lo cambiaremos con la propiedad Icon, seleccionndolo de igual forma que
para la imagen de fondo, y asignando un archivo con extensin .ICO.

Finalmente, asignaremos el valor False a la propiedad MaximizeBox, con lo que se deshabilitar el
botn del formulario que permite maximizarlo. La Figura 220 muestra el formulario de este ejemplo
en ejecucin.


Figura 220. Formulario de ejemplo resultante.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
45


El Cdigo del Formulario

Como ya describimos en los temas iniciales del texto, cuando creamos un formulario desde Visual
Studio .NET del modo en que acabamos de mostrar, el diseador del formulario genera por nosotros el
cdigo del formulario, que consiste en una clase que hereda de la clase base Form. El nombre de la
clase es el mismo que hemos asignado a la propiedad Name en la ventana de propiedades del
diseador, en este caso Form1. El cdigo es grabado en un archivo con la extensin .VB, que tiene el
nombre del formulario: FORM1.VB, en este ejemplo.

Para ver dicho cdigo, tan slo tenemos que hacer clic derecho sobre el formulario, y en el men
contextual seleccionar Ver cdigo, lo que abrir la ventana del editor de cdigo del IDE, mostrando el
cdigo de nuestro formulario.

Parte del cdigo estar oculto por un elemento Region con el nombre Windows Form Designer
generated code; para verlo al completo debemos hacer clic en el icono de expansin de esta regin.

Es posible modificar este cdigo generado por el diseador, para completar aquellos aspectos que
necesitemos del formulario. Sin embargo, no debemos modificar el mtodo InitializeComponent( ), ya
que se trata de un mtodo directamente relacionado con el aspecto visual del formulario, y su edicin
podra dejar el formulario inservible.

El Cdigo fuente 433 muestra el cdigo de la clase Form1, correspondiente al formulario de nuestro
proyecto, que ha generado el diseador.



Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

Public Sub New()
MyBase.New()

'This call is required by the Windows Form Designer.
InitializeComponent()

'Add any initialization after the InitializeComponent() call

End Sub

'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If End If
MyBase.Dispose(disposing)
End Sub

'Required by the Windows Form Designer
Private components As System.ComponentModel.Container

'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Dim resources As System.Resources.ResourceManager = New
System.Resources.ResourceManager(GetType(frmPrueba))
'
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
46


' f r mPr ueba
'
Me. Aut oScal eBaseSi ze = New Syst em. Dr awi ng. Si ze( 5, 13)
Me. Backgr oundI mage = CType( r esour ces. Get Obj ect ( " $t hi s. Backgr oundI mage" ) ,
Syst em. Dr awi ng. Bi t map)
Me. Cl i ent Si ze = New Syst em. Dr awi ng. Si ze( 336, 101)
Me. I con = CType( r esour ces. Get Obj ect ( " $t hi s. I con" ) , Syst em. Dr awi ng. I con)
Me. Locat i on = New Syst em. Dr awi ng. Poi nt ( 3200, 6000)
Me. Maxi mi zeBox = Fal se
Me. Name = " f r mPr ueba"
Me. Text = " Ej empl o senci l l o con f or mul ar i os Wi ndows"

End Sub

#End Regi on

End Cl ass

Cdigo fuente 433


Entre los diferentes miembros de esta clase, podemos identificar el mtodo constructor New( ); el
mtodo Dispose( ), que podemos utilizar para destruir explcitamente el objeto formulario; y el mtodo
InitializeComponent( ), que sirve para inicializar los valores tanto del propio formulario, como de los
controles que pudiera contener.


Cambiando el nombre del formulario

Cambiar el nombre de un formulario es algo tan sencillo como acceder a la ventana de propiedades del
diseador del formulario, y asignar un nuevo nombre en la propiedad Name. Por ejemplo, asignemos
frmPrueba como nuevo nombre al formulario de nuestro ejemplo. Ver Figura 221.



Figura 221. Cambio del nombre del formulario.


Sin embargo, esta accin tiene ms implicaciones de las que en un principio pudiera parecer, ya que si
intentamos ahora ejecutar el programa, se producir un error.

Esto es debido a que al crear el proyecto, el objeto inicial del mismo era el formulario, pero tena
como nombre Form1, al cambiar el nombre a frmPrueba, el IDE no puede encontrarlo y
genera el error.

Para solucionarlo, debemos abrir la ventana del Explorador de soluciones; hacer clic en el nombre del
proyecto, y despus clic en el ltimo botn de esta ventana, que abrir la ventana correspondiente a las
propiedades del proyecto. En dicha ventana, abriremos la lista desplegable Objeto inicial, y
seleccionaremos el nombre del nuevo formulario. Ver Figura 222.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
47



Figura 222. Cambio del objeto inicial del proyecto.


Al volver a ejecutar, el programa funcionar correctamente mostrando el formulario.

Un detalle a destacar consiste en que cuando cambiamos el nombre del formulario, el archivo que
contiene el cdigo fuente del mismo no cambia, ya que como sabemos, un archivo de cdigo puede
ahora albergar ms de una clase o cualquier otro tipo de elemento de la aplicacin: enumeracin,
mdulo, estructura, etc. Por ese motivo, el archivo que contiene el formulario seguir con el nombre
FORM1.VB, independientemente del nombre que le hayamos dado al formulario.


Creacin de Formularios desde Cdigo

En el ejemplo anterior hemos visto que a raz de los valores que asignbamos a las propiedades del
formulario, se generaba el cdigo correspondiente, que es el que mostrar el formulario al ser
ejecutado.


Aunque en la mayor parte de las ocasiones, sino en todas, utilizaremos el diseador de formularios
para crear el interfaz de usuario, podemos perfectamente prescindir de este diseador, y construir
nuestro formulario escribiendo todo su cdigo. A continuacin, mostramos el modo de hacerlo.
(Ejemplo FormCodigo).


Despus de haber creado un proyecto de tipo aplicacin Windows, eliminaremos el formulario que por
defecto nos proporciona el IDE, abriendo la ventana Explorador de soluciones, haciendo clic en dicho
formulario, y pulsando la Tecla [SUPR].


Seguidamente, aadiremos una clase al proyecto utilizando el men del IDE, Proyecto + Agregar
clase, y daremos el nombre frmManual a dicha clase, escribiendo en ella el cdigo mostrado en el
Cdigo fuente 434.




Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
48


Publ i c Cl ass f r mManual
I nher i t s Syst em. Wi ndows. For ms. For m

Publ i c Sub New( )
Me. Name = " f r mManual "
Me. Text = " f or mul ar i o cr eado desde cdi go"
Me. St ar t Posi t i on = For mSt ar t Posi t i on. Cent er Scr een
Me. Cl i ent Si ze = New Syst em. Dr awi ng. Si ze( 300, 50)
End Sub

End Cl ass

Cdigo fuente 434


Como puede comprobar el lector, lo que hacemos en esta clase es heredar de Form, y mediante un
mtodo constructor, asignamos valores a las propiedades del formulario que ser creado cuando se
instancie un objeto de nuestra clase frmManual.

Antes de poder ejecutar este proyecto, debemos, al igual que en el ejemplo anterior, abrir la ventana de
propiedades de proyecto, y establecer como objeto inicial esta clase. Nuestro formulario en ejecucin
tendr el aspecto mostrado en la Figura 223.



Figura 223. Formulario creado sin utilizar el diseador de formularios.


La posibilidad de manipular el formulario mediante cdigo de esta manera, abre la puerta a un elevado
nmero de posibilidades, que hasta la fecha, estaban vetadas a los programadores de VB. De esta
forma, podemos construir la base principal del formulario con el diseador, y dinmicamente, en
ejecucin, modificar sus propiedades, aadir y quitar controles, etc.


Iniciar el Formulario desde Main( )

En todos los ejemplos con formularios Windows realizados hasta el momento, la aplicacin comienza
su ejecucin directamente por el formulario, lo cual resulta una comodidad, ya que no tenemos que
preocuparnos de configurar el arranque del programa, a no ser que cambiemos el nombre del
formulario, como hemos visto en los ltimos apartados.

A pesar de todo, este es un escenario, que en muchas ocasiones no ser vlido, puesto que
necesitaremos realizar alguna tarea antes de la visualizacin del formulario, como cambiar ciertas
propiedades del mismo.

Podemos crear un procedimiento Main( ), bien en un mdulo o en una clase, y configurarlo
como punto de entrada de la aplicacin, codificando en dicho procedimiento la instanciacin del
formulario a mostrar. A continuacin mostramos los pasos a dar para conseguirlo. (Ejemplo
FormIniciar).

Creamos un nuevo proyecto Windows, y abrimos la ventana de propiedades del proyecto; en la
lista Objeto inicial, elegimos esta vez el elemento Sub Main. Ver Figura 224.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
49




Figura 224. Configurar un proyecto Windows para comenzar por un procedimiento Main( ).


Despus aadimos un mdulo al proyecto, empleando la opcin de men Proyecto + Agregar mdulo,
de VS.NET, y en dicho mdulo codificamos un procedimiento Main( ), que se encargue de instanciar
un objeto del formulario. Si escribimos algo parecido a lo que muestra el Cdigo fuente 435, el
programa, en efecto, se iniciar, crear el formulario, pero inmediatamente lo cerrar.



Module Entrada
Public Sub Main()
' instanciar un objeto de la clase del formulario
Dim frmVentana As New Form1()
frmVentana.Text = "probando desde cdigo"
frmVentana.Show()
End Sub
End Module

Cdigo fuente 435


El cdigo anterior, aunque vlido, tiene un problema: un formulario, al tratarse de una ventana
Windows, necesita lo que se denomina un bucle de mensajes, que le permita detectar los
mensajes que le enva el sistema operativo, y actuar en consecuencia.

En .NET, para conseguir que un formulario disponga de un bucle de mensajes, debemos utilizar
la clase Application, entre cuyos miembros compartidos, se encuentra el mtodo Run( ). Cuando a
dicho mtodo, le pasemos un objeto formulario como parmetro, crear un bucle de mensajes para
dicho formulario y lo mantendr en ejecucin hasta que el usuario de la aplicacin lo cierre.

Modificando pues, el cdigo anterior, por el mostrado en el Cdigo fuente 436, conseguiremos que el
formulario permanezca en ejecucin una vez creado. Como detalle adicional, y a efectos meramente
estticos, asignamos un color de fondo a la ventana, de modo que el lector compruebe lo sencillo que
resulta mediante el uso de la propiedad BackColor, y la estructura Color.



Modul e Ent r ada
Publ i c Sub Mai n ( )
' i nst anci ar un obj et o de l a cl ase del f or mul ar i o
Di mf r mVent ana As New For m1( )
f r mVent ana. Text = " pr obando desde cdi go"

' asi gnamos el col or de f ondo al f or mul ar i o
' ut i l i zando uno de l os mi embr os de l a
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
50


' est r uct ur a Col or de l a pl at af or ma
f r mVent ana. BackCol or = Col or . Aquamar i ne

' ut i l i zamos el obj et o Appl i cat i on y su
' mt odo Run( ) par a cr ear un bucl e de
' mensaj es par a el f or mul ar i o y
' poner l o en ej ecuci n
Appl i cat i on. Run( f r mVent ana)
End Sub
End Modul e

Cdigo fuente 436


La Figura 225 muestra el formulario resultante al ejecutar el proyecto.



Figura 225. Formulario puesto en ejecucin mediante el objeto Application.


Trabajo con Controles

Los controles proporcionan al usuario el medio para comunicarse con nuestro formulario, y
en definitiva, con la aplicacin. Por ello, en los siguientes apartados, mostraremos los
principales aspectos que debemos tener en cuenta a la hora de su creacin, manipulacin y
codificacin.

Tambin realizaremos una revisin de los principales controles, mostrando algunas de sus
caractersticas ms destacadas.


El Cuadro de Herramientas

Una vez creado un proyecto, o despus de aadir un nuevo formulario, para utilizar controles en el
mismo, tendremos que tomarlos de la ventana Cuadro de herramientas disponible en el IDE de
VS.NET, y aadirlos al formulario. Ver Figura 226.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
51




Figura 226. Cuadro de herramientas de Visual Studio .NET.


Insertar un Control en el Formulario

Para aadir un control en el formulario, proceso que tambin se conoce como dibujar un control,
debemos seleccionar primeramente el control a utilizar de la lista que aparece en el cuadro de
herramientas.

Una vez localizado el control, haremos doble clic sobre l, o pulsaremos [INTRO], lo que aadir una
copia del mismo en el formulario, que despus, mediante el ratn o teclado, situaremos en la posicin
adecuada.

Otra tcnica, est ms habitual, consiste en hacer clic sobre el control, situar el cursor del ratn en la
superficie del formulario y hacer clic en l, arrastrando hasta dar la forma deseada; de esta manera,
proporcionamos al control en un solo paso la ubicacin y tamao iniciales.

Dibujemos, a modo de prctica, un control Button sobre el formulario, con un aspecto similar al
mostrado en la Figura 227.



Figura 227. Control Button dibujado sobre el formulario.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
52


Un control, al igual que un formulario, dispone a su alrededor de un conjunto de guas de redimensin,
de modo que si despus de situarlo en el formulario, queremos modificar su tamao, slo tenemos que
hacer clic sobre alguna de estas guas, y arrastrar modificando las dimensiones del control.

Adems de utilizando el ratn, podemos desplazar un control, manteniendo pulsada la tecla
[CONTROL], y pulsando adems, algunas de las teclas de direccin.


Ajuste de la Cuadrcula de Diseo del Formulario

La cuadrcula de diseo del formulario, consiste en el conjunto de lneas de puntos que surcan la
superficie del formulario, y nos sirven como ayuda, a la hora de realizar un ajuste preciso de un
control en una posicin determinada.

Si el lector ya ha realizado algunas prcticas situando controles en el formulario, se percatar de que
cuando movemos un control con el ratn, dicho control se ajusta a la cuadrcula obligatoriamente, por
lo que no podemos ubicarlo entre dos lneas de puntos de la cuadrcula.

Para solventar este problema tenemos algunas soluciones que proponemos a continuacin:

La ms simple y directa, consiste en acceder a la ventana de propiedades del formulario, y en la
propiedad GridSize, cambiar los valores de espaciado de puntos que tiene la rejilla. Cuanto menor sea
ese valor, ms junta estar la trama de puntos de la rejilla, con lo que podremos ajustar de forma ms
exacta el control. Este ajuste es vlido slo para el formulario sobre el que lo aplicamos. Probemos por
ejemplo, a introducir 5 en cada valor, como muestra la Figura 228.



Figura 228. Cambiando el tamao de la cuadrcula de diseo del formulario.



El otro modo consiste en asignar en el formulario, a la propiedad SnapToGrid, el valor False; esto
deshabilita el ajuste a la cuadrcula automtico de los controles, con lo que perdemos en precisin de
ajuste, pero ganamos en libertad de ubicacin para el control. Si no queremos que la cuadrcula se
visualice, asignaremos False a la propiedad DrawGrid del formulario.

Los anteriores ajustes los podemos realizar tambin de modo genrico para todos los formularios.
Seleccionaremos para ello, la opcin de men del IDE Herramientas + Opciones, y en la ventana
Opciones, haremos clic sobre el elemento Diseador de Windows Forms. En el panel derecho de esta
ventana, podremos configurar estas propiedades de modo general para todo el IDE. Ver Figura 229.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
53




Figura 229. Ajuste general de las propiedades para la cuadrcula de diseo de formularios.


Organizacin-formato mltiple de controles

Cuando tenemos un grupo numeroso de controles en el formulario, que necesitamos mover de
posicin, o cambiar su tamao, para redistribuir el espacio; podemos optar por cambiar uno a uno los
controles, tarea pesada y nada aconsejable; o bien, podemos seleccionar todos los controles a
modificar, y realizar esta tarea en un nico paso, mediante las opciones del men Formato del IDE.

Supongamos que en el formulario tenemos dos controles Button y un ListBox distribuidos como
muestra la Figura 230.



Figura 230. Controles para redistribuir dentro del formulario.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
54


En primer lugar, para seleccionarlos todos, debemos hacer clic sobre el formulario y arrastrar, de
modo que el rectngulo de seleccin que aparece, abarque a los controles, que quedarn con sus
correspondientes marcas de redimensin visibles, seal de que estn seleccionados.

En este punto, podemos hacer clic en uno de los controles y desplazarlos todos conjuntamente por el
formulario, o bien, hacer clic en una de las guas de redimensin y cambiar su tamao, lo que afectar
a todos los controles seleccionados. Si necesitamos de alguna accin especial, utilizaremos las
opciones del men Formato del IDE.

Por ejemplo, podemos ejecutar la opcin Formato + Alinear + Lados izquierdos, de modo que todos
los controles se alinearn por la izquierda, tomando como referencia el control que tiene las marcas de
redimensin negras. Ver Figura 231.



Figura 231. Alineacin de controles por su lado izquierdo.


Despus ejecutaremos la opcin de men Formato + Igualar tamao + Ambos, que ajustar tanto el
ancho como el alto de todos los controles seleccionados. Ver Figura 232.



Figura 232. Igualando tamao de controles.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
55


Para evitar que, una vez completado el diseo y ajuste de todos lo controles, accidentalmente podamos
modificar alguno, seleccionaremos la opcin de men Formato + Bloquear controles, que bloquear
los controles seleccionados, impidiendo que puedan ser movidos o modificado su tamao. Para
desbloquear los controles del formulario, debemos seleccionar al menos uno y volver a utilizar esta
opcin de men, que desbloquear todos los controles.

Una caracterstica interesante del bloqueo de controles, consiste en que una vez que tengamos
bloqueados los controles del formulario, si aadimos un nuevo control, este no estar inicialmente
bloqueado, lo que facilita su diseo. Una vez que hayamos finalizado de disear el ltimo control, lo
seleccionaremos en el formulario y seleccionaremos la opcin de bloqueo de controles, de modo que
ya estarn bloqueados todos de nuevo.

El men Formato de VS.NET consta de un numeroso conjunto de opciones. Acabamos de ver una
muestra de sus posibilidades, por lo que recomendamos al lector, que realice pruebas con el resto de
opciones, para ver todas las posibilidades en cuanto a la disposicin de los controles dentro del
formulario.


Anclaje de Controles

La propiedad Anchor, existente en un gran nmero de controles, nos permite anclar dicho control a
uno o varios bordes del formulario.

Cuando un control es anclado a un borde, la distancia entre el control y dicho borde ser siempre la
misma, aunque redimensionemos el formulario.

Para establecer esta propiedad, debemos pasar a la ventana de propiedades del control, y en Anchor,
pulsar el botn que dispone, y que nos mostrar una representacin de los bordes para anclar. Ver
Figura 233.



Figura 233. Propiedad Anchor de un control.


Las zonas de color gris oscuro representan los bordes del control que ya estn anclados a los bordes
del formulario. Debemos marcar y desmarcar respectivamente estos elementos segn los bordes que
necesitemos anclar. Por defecto, los controles se encuentran inicialmente anclados a los bordes
superior e izquierdo (Top, Left), como hemos comprobado en la anterior figura.

La Figura 234 muestra un ejemplo en el que vemos dos controles que tienen distintos tipos de anclaje.
Button1 tiene el anclaje normal: Top-Left, mientras que Button2 tiene slo Right, por ello, su borde
derecho siempre mantendr la misma distancia con ese borde del formulario.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
56




Figura 234. Controles con diferentes valores en la propiedad Anchor.


Acople de Controles

A travs de la propiedad Dock de los controles, podremos acoplar un control a uno de los bordes
de un formulario, consiguiendo que dicho control permanezca pegado a ese borde del formulario en
todo momento.

Para seleccionar el tipo de acople, haremos clic en el botn que tiene la propiedad Dock en la ventana
de propiedades, y que nos mostrar un gua de los tipos de acople disponibles. Ver Figura 235.



Figura 235. Propiedad Dock, tipos de acople disponibles.


Por defecto, los controles no se encuentran acoplados al insertarse en el formulario, y slo es posible
establecer un tipo de acople en cada ocasin. La Figura 236 muestra un control Button acoplado a la
izquierda del formulario.


Figura 236. Control acoplado a la izquierda del formulario.
Ing. CIP Herberth Aranda Rojas 10. Formularios Windows
57


Si pulsamos en la propiedad Dock el botn central de los indicadores de acoplamiento, la propiedad
tomar el valor Fill, es decir, el control llenar la superficie del formulario. Veamos en la Figura
237, el mismo control con este valor de acople.



Figura 237. Control con el valor Fill en la propiedad Dock.




Controles Windows




Controles ms Habituales

Como habr comprobado el lector, el nmero de controles del cuadro de herramientas es muy
numeroso, por lo que en los prximos apartados, vamos a trabajar con los que se consideran controles
bsicos o estndar, dada su gran frecuencia de uso.

La Tabla 30 relaciona este conjunto de controles bsico, junto a una breve descripcin.

Control Descripcin
Button Botn de pulsacin
Label Etiqueta de literal
TextBox Cuadro de texto
ListBox Lista de valores

ComboBox
Lista de valores
desplegable, y cuadro
de texto
CheckBox Casilla de verificacin
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
59



RadioButton Botn autoexcluyente

GroupBox
Caja de agrupacin de
controles

Tabla 30. Controles bsicos de formularios Windows.


Button

Este control representa un botn de pulsacin, conocido en versiones anteriores de VB como
CommandButton. Entre el nutrido conjunto de propiedades de este control, destacaremos las
siguientes.

Text. Cadena con el ttulo del botn.

TextAlign. Alineacin o disposicin del ttulo dentro del rea del botn; por defecto aparece
centrado.

BackColor. Color de fondo para el botn.

Cursor. Permite modificar el cursor del ratn que por defecto tiene el botn.

Image. Imagen que podemos mostrar en el botn como complemento a su ttulo, o bien, en el
caso de que no asignemos un texto al botn, nos permitir describir su funcionalidad.

ImageAlign. Al igual que para el texto, esta propiedad nos permite situar la imagen en una
zona del botn distinta de la central, que es en la que se ubica por defecto.

BackgroundImage. Imagen de fondo para el botn.

FlatStyle. Tipo de resaltado para el botn. Por defecto, el botn aparece con un cierto relieve,
que al ser pulsado, proporciona el efecto de hundirse y recuperar nuevamente su estado, pero
podemos, mediante esta propiedad, hacer que el botn se muestre en modo plano, con un
ligero remarcado al pulsarse, etc.

Font. Cambia el tipo de letra y todas las caractersticas del tipo elegido, para el texto del
botn.

La Figura 238 muestra un ejemplo de control Button, sobre el que se han modificado algunos valores
por defecto de sus propiedades. (Ejemplo ButtonPru).


Figura 238. Control Button.
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
60


Codificacin de los Eventos de Controles

Windows es un sistema operativo orientado a eventos, por lo que cualquier mnima interaccin que
realicemos sobre un formulario o control, generar el oportuno evento, para el que si estamos
interesados, deberemos responder.

Prosiguiendo con el control Button, cuando pulsamos sobre el mismo, se origina el evento Click de
dicho control. Si dibujamos un Button en un formulario y pulsamos en l, no ocurrir nada, ya que
aunque el evento se produce, no existe cdigo que le proporcione respuesta.

Para dar oportuna respuesta a un evento emitido por un control, debemos escribir un procedimiento
manipulador del correspondiente evento. La creacin de manipuladores de evento es un aspecto que ya
hemos visto en detalle en el tema Delegacin de cdigo y eventos. De igual modo, los aspectos bsicos
de la escritura de cdigo para un evento se comentaron en el tema Una aplicacin con funcionalidad
bsica; sugerimos por lo tanto al lector, la consulta de estos temas para cualquier referencia bsica que
necesite al respecto.

No obstante, en el presente apartado, y para reforzar conceptos, realizaremos un repaso del proceso de
creacin del manipulador de evento para un control.

Como ejemplo, insertaremos en un formulario un control Button, al que daremos el nombre
btnMensaje, y en su propiedad Text asignaremos la cadena Mostrar mensaje. (Ejemplo
ButtonEventPru).

Seguidamente haremos doble clic sobre el Button; esta accin abrir la ventana del editor de cdigo,
creando al mismo tiempo, la declaracin o esqueleto del procedimiento manipulador de evento Click
del botn, listo para ser codificado.

Ya que necesitamos que se muestre un mensaje al ser pulsado este control, utilizaremos el objeto
MessageBox de la plataforma, llamando a su mtodo compartido Show( ), para visualizar el mensaje.
En definitiva, el manipulador de este evento quedara como muestra el Cdigo fuente 437.



Private Sub btnMensaje_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnMensaje.Click

MessageBox.Show("Se acaba de pulsar el botn del formulario")

End Sub

Cdigo fuente 437


El resultado en ejecucin, sera el que muestra la Figura 239.

Observando con ms detalle el procedimiento del evento, vemos que al final de su declaracin,
aparece la palabra clave Handles, que como vimos en el tema sobre eventos, nos sirve para asociar
esta rutina de cdigo con un evento de un objeto. En el ejemplo que nos ocupa, asociamos el
procedimiento btnMensaje_Click( ), con el evento Click del objeto btnMensaje, perteneciente a la
clase Button.
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
61




Figura 239. Resultado de la ejecucin del evento Click de un control Button, al ser pulsado.


Como ya sabemos, el enlace procedimiento-evento de objeto mediante la palabra Handles, se
produce de modo esttico. Esto requiere que en el cdigo, el identificador que contenga el objeto del
control, deba ser declarado con mbito a nivel de clase, y utilizando adems la palabra clave
WithEvents. Dicha tarea es realizada automticamente por el diseador del formulario cuando genera
el cdigo del mismo. Veamos en el Cdigo fuente 438, el fragmento de cdigo generado por el
diseador que realiza esta labor.



' esta declaracin es situada a nivel del cdigo
' de la clase del formulario, es decir,
' fuera de cualquier mtodo
Friend WithEvents btnMensaje As System.Windows.Forms.Button

Cdigo fuente 438


Codificando otros Eventos de un Control

En un control Button, el evento por defecto es Click; esto supone, como acabamos de ver, que al hacer
doble clic sobre el control en el formulario, el procedimiento de evento sobre el que nos situar el
editor ser precisamente este. Sin embargo, un control Button, al igual que el resto de controles de los
formularios Windows, disponen de un gran nmero de eventos que podemos codificar para adaptar a
nuestras necesidades.

Por ejemplo, el evento MouseEnter, se produce cuando se detecta que el ratn entra en el rea de un
control, en este caso Button. Como este no es el evento por defecto, debemos buscar su declaracin
vaca manualmente en el editor. Para ello, abriremos la lista desplegable Nombre de clase, situada en
la parte superior izquierda del editor de cdigo, y seleccionaremos el nombre de nuestro control:
btnMensaje. Ver Figura 240.



Figura 240. Lista de clases del editor de cdigo.
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
62


A continuacin, abriremos la otra lista desplegable del editor de cdigo: Nombre de mtodo, situada en
la parte superior derecha del editor. En ella aparecern los nombres de todos los eventos de que
dispone el control. Localizaremos el evento MouseEnter, y lo seleccionaremos. Ver Figura 241.



Figura 241. Lista de eventos de una clase-control en el editor de cdigo.


De igual modo que sucedi con el evento Click en el apartado anterior, el editor de cdigo crear el
procedimiento manipulador de evento vaco, para el evento que acabamos de seleccionar. Lo que
vamos a hacer a continuacin, es escribir el cdigo que permita cambiar el color del botn cuando
el ratn entre al mismo. Veamos el Cdigo fuente 439.



Private Sub btnMensaje_MouseEnter(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnMensaje.MouseEnter

Me.btnMensaje.BackColor = Color.Cyan

End Sub

Cdigo fuente 439


Cuando al ejecutar, situemos el ratn en el botn, este cambiar su color, mostrando el aspecto de la
Figura 242.



Figura 242. Resultado de la ejecucin del evento MouseEnter sobre un Button.
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
63


Escritura del manipulador de evento sin usar el nombre
proporcionado por el editor

El nombre del procedimiento manipulador de evento, que crea automticamente el editor de cdigo,
por ejemplo: btnMensaje_MouseEnter( ), se basa en una convencin establecida por el editor con el
siguiente formato: nombre del objeto-guin bajo-nombre del evento.

Sin embargo, esta forma de crear la rutina manipuladora de evento no es obligatoria, ya que
podemos crear un procedimiento de evento con el nombre que queramos, siempre y cuando,
asociemos el procedimiento con el evento necesario utilizando la palabra clave Handles.

Siguiendo con el ejemplo que estamos desarrollando, una vez que el ratn entra en el rea del botn,
este cambia de color, pero al salir, no se devuelve el botn a su color inicial; esto es lo que vamos a
hacer a continuacin.

El evento que se produce cuando el ratn abandona el rea de un control es MouseLeave.
Conociendo este dato, vamos a escribir un procedimiento con el nombre Salimos( ), que
conectaremos con el mencionado evento utilizando Handles. Dentro de esta rutina, haremos una
llamada al mtodo ResetBackColor( ) del control, que devuelve el color del botn a su estado
original.

Como requerimiento adicional, y ya que los manipuladores de evento de control, internamente estn
construidos mediante un delegado de tipo EventHandler, debemos incluir dos parmetros en la lista de
nuestro procedimiento: uno de tipo Object, y otro de tipo SystemEventArgs. Para seguir el mismo
esquema que el resto de eventos, llamaremos a estos parmetros sender y e respectivamente, aunque
ello no sera necesario. Al producirse el evento, el control ser el encargado de depositar en estos
parmetros los objetos correspondientes, de modo transparente para el programador.

Veamos el cdigo de este manipulador de evento en el Cdigo fuente 440.




Private Sub Salimos(ByVal sender As Object, ByVal e As System.EventArgs)
Handles btnMensaje.MouseLeave

Me.btnMensaje.ResetBackColor()

End Sub

Cdigo fuente 440


A partir de ahora, cuando ejecutemos el programa, al quitar el ratn de la superficie del botn, el
control volver a tomar su color original.


Respondiendo a los Eventos de un Formulario


El modo de escribir los manipuladores de eventos para un formulario es igual que para un control. El
proyecto de ejemplo EventosForm ilustra este aspecto. En el Cdigo fuente 441 vemos los
manipuladores de dos eventos de formulario.



Ing. CIP Herberth Aranda Rojas
11. Controles Windows
64


Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
Me.Text = "Coordenadas ratn: X:" & e.X & " Y:" & e.Y

End Sub

Private Sub Form1_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

If MessageBox.Show("Cerrar la ventana?",
_ "Atencin", MessageBoxButtons.YesNo,
_ MessageBoxIcon.Hand) =
DialogResult.No Then

e.Cancel = True

End If

End Sub

Cdigo fuente 441


El evento MouseMove se produce al mover el ratn por el formulario, mientras que
Closing se produce cuando el formulario est en proceso de cierre. Este ltimo evento tiene la
caracterstica de que nos permite cancelar el proceso de cierre del formulario, mediante la
manipulacin del parmetro que contiene los argumentos de evento, en concreto se trata de los
argumentos de cancelacin. La Figura 243 muestra este evento en ejecucin.



Figura 243. Ejecucin del evento Closing de un formulario.


Label

El control Label o Etiqueta, muestra un texto informativo al usuario. Podemos utilizar este control
como complemento a otro control, por ejemplo, situndolo junto a un TextBox, de modo que
indiquemos al usuario el tipo de dato que esperamos que introduzca en la caja de texto.


Ing. CIP Herberth Aranda Rojas
11. Controles Windows
65


Se trata de un control esttico; esto quiere decir que el usuario no puede interaccionar con l, a
diferencia, por ejemplo, de un control Button, sobre el que s podemos actuar pulsndolo; o de un
TextBox, en el que podemos escribir texto.

Una de sus propiedades es BorderStyle, que permite definir un borde o recuadro alrededor del
control, o que dicho borde tenga un efecto 3D; por defecto se muestra sin borde. Veamos unos
ejemplos en la Figura 244. (Ejemplo LabelPru).



Figura 244. Controles Label.


Foco de Entrada

Para que las pulsaciones de teclado puedan ser recibidas por un determinado control, dicho control
debe tener lo que se denomina el foco de entrada.

El modo de dar a un control el foco de entrada, consiste en hacer clic sobre l, o bien, pulsar la tecla
[TAB], pasando el foco hasta el control deseado. Cuando un control recibe el foco, el sistema
operativo lo remarca visualmente o en el caso de controles de escritura, muestra el cursor de escritura
en su interior.


TextBox

Un control TextBox muestra un recuadro en el que podemos introducir texto. Para poder escribir
texto en un control de este tipo, debemos darle primeramente el foco, lo que detectaremos cuando el
control muestre el cursor de escritura en su interior.

Entre las propiedades disponibles por este control, destacaremos las siguientes.

Text. Cadena con el texto del control.

Multiline. Permite establecer si podemos escribir una o varias lneas. Por defecto contiene
False, por lo que slo podemos escribir el texto en una lnea.

WordWrap. En controles multilnea, cuando su valor es True, al llegar al final del
control cuando estamos escribiendo, realiza un desplazamiento automtico del cursor de
escritura a la siguiente lnea de texto.

Enabled. Contiene un valor lgico mediante el que indicamos si el control est o no
habilitado para poder escribir texto sobre l.

Ing. CIP Herberth Aranda Rojas
11. Controles Windows
66


ReadOnly. Permite indicar si el contenido del control ser de slo lectura o bien, podremos
editarlo.

CharacterCasing. Esta propiedad, permite que el control convierta automticamente el texto
a maysculas o minsculas segn lo estamos escribiendo.

MaxLength. Valor numrico que establece el nmero mximo de caracteres que podremos
escribir en el control.

PasswordChar. Carcter de tipo mscara, que ser visualizado por cada carcter que escriba
el usuario en el control. De esta forma, podemos dar a un cuadro de texto el estilo de un
campo de introduccin de contrasea.

AutoSize. Cuando esta propiedad tenga el valor True, al modificar el tamao del tipo de letra
del control, dicho control se redimensionar automticamente, ajustando su tamao al del tipo
de letra establecido.

La Figura 245 muestra un formulario con varios controles TextBox, a los cuales se han aplicado
diferentes efectos mediante sus propiedades. (EjemploTextBoxPru).



Figura 245. Pruebas con controles TextBox.


Al comenzar a ejecutar el programa, observaremos que el foco de entrada no est situado en el
primer TextBox del formulario. Para asignar por cdigo el foco a un determinado control,
disponemos del mtodo Focus( ). En este caso, al pulsar el botn Foco nombre, desviamos el foco al
primer TextBox del formulario. Ver Cdigo fuente 442.



Private Sub btnFoco_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnFoco.Click

Me.txtNombre.Focus()

End Sub

Cdigo fuente 442


Observe el lector, que en el botn Foco nombre, que acabamos de mencionar, la letra F se encuentra
subrayada, actuando de acelerador o hotkey. De este modo, no es necesario pulsar con el ratn sobre
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
67


ese botn para ejecutarlo, basta con pulsar la tecla [CONTROL] junto a la letra subrayada para
conseguir el mismo efecto.

Para definir una tecla aceleradora en un control, debemos anteponer el carcter & a la letra que vamos
a definir como acelerador, en este ejemplo se ha logrado con &Foco nombre.

Por otro lado, mediante el botn btnSoloLectura conseguimos activar/desactivar la propiedad
ReadOnly del TextBox txtNombre, cambiando el estado de dicha propiedad en cada pulsacin del
botn. Ver Cdigo fuente 443.



Private Sub btnSoloLectura_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnSoloLectura.Click

If (Me.txtNombre.ReadOnly) Then
Me.txtNombre.ReadOnly = False
Else

Me.txtNombre.ReadOnly = True
End If

End Sub

Cdigo fuente 443


Sin embargo, hay otro modo mucho ms eficiente de cambiar el estado de una propiedad que contiene
un tipo Boolean: utilizando el operador Not.

Con el botn btnActivar, cambiamos el valor de la propiedad Enabled del cuadro de texto que
contiene los apellidos. Para ello, aplicamos el operador Not a dicha propiedad, y el resultado lo
asignamos a esa misma propiedad. Ver Cdigo fuente 444.



Private Sub btnActivar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnActivar.Click

' utilizando operador Not simplificamos
Me.txtApellidos.Enabled = Not (Me.txtApellidos.Enabled)

End Sub

Cdigo fuente 444


Finalizando con este ejemplo, y aunque no tiene relacin directa con el control TextBox, el formulario
se muestra con un tipo de borde especial que no permite su redimensin. La propiedad del formulario
con la que podemos establecer el tipo de borde es FormBorderStyle, y en este caso, su valor es
Fixed3D. Alterando los valores de esta propiedad, conseguiremos distintos bordes y tipos de
redimensin para el formulario.


Orden de Tabulacin de Controles

Los controles disponen de la propiedad TabIndex, que contiene un nmero que ser utilizado para
pasar el foco entre ellos al pulsar la tecla [TAB] durante la ejecucin del programa.
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
68


Segn vamos aadiendo nuevos controles, el IDE va asignando automticamente nuevos nmeros a
esta propiedad; de forma que, cuando comencemos la ejecucin, el primer control que tomar el foco
ser el que tiene el menor nmero en su TabIndex.

En el ejemplo anterior, el primer control que tomaba el foco era el TextBox de la contrasea, lo cual
no era nada lgico, ya que dicho control era el ltimo en el formulario para el que debamos introducir
datos.

Para solucionar este problema, simplemente tenemos que cambiar los valores de la propiedad
TabIndex de los controles, de modo que el orden de tabulacin sea el que mejor se adapte a nuestras
necesidades.

Podemos obtener un mapa del orden de tabulacin de los controles del formulario seleccionando el
men del IDE Ver + Orden de tabulacin; esto mostrar los controles con el nmero de TabIndex que
les hemos asignado. Como ventaja adicional, en esa situacin, podemos hacer clic en los controles y
cambiar tambin el nmero de tabulacin. Ver Figura 246.



Figura 246. Diseador del formulario mostrando el orden de tabulacin de controles.


Si por el contrario, no queremos dar el foco a un control pulsando [TAB], debemos asignar a la
propiedad TabStop de dicho control el valor False. Por defecto, TabStop vale True, permitiendo de
esta el paso de foco entre controles mediante la tecla [TAB].


Seleccin de Texto en un TextBox

La seleccin de texto en un control TextBox es un proceso que funciona de modo transparente al
programador, en el sentido en que este no necesita aadir cdigo adicional para las operaciones de
seleccin, cortar, copiar, etc., al ser tareas integradas en el sistema operativo.

Sin embargo, podemos necesitar en un determinado momento, tener informacin acerca de las
operaciones de seleccin que est realizando el usuario en nuestros controles de texto. Para ello, el
control TextBox dispone de las siguientes propiedades.

SelectionStart. Posicin del texto del control, en la que comienza la seleccin que hemos
realizado.

SelectionLength. Nmero de caracteres seleccionados en el control.
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
69


SelectedText. Cadena con el texto que hemos seleccionado en el control.

Mediante estas propiedades, no slo averiguamos la seleccin que pueda tener un control TextBox,
sino que tambin podemos utilizarlas para establecer por cdigo una seleccin; teniendo el mismo
efecto que si la hubiera efectuado el usuario con el ratn o teclado.

Para comprobar el funcionamiento de las propiedades de seleccin del TextBox, crearemos un
proyecto Windows, y en su formulario aadiremos varios controles para manipular la seleccin de
texto que hagamos en un TextBox. (Ejemplo TextBoxSelection). La Figura 247 muestra el formulario
del ejemplo.



Figura 247. Formulario para realizar seleccin en el control TextBox.


El control de este formulario, que vamos a emplear para las operaciones de seleccin es txtOrigen. En
primer lugar, y aunque no se trata de una seleccin de texto, veremos su evento TextChanged, el cual
se produce cada vez que cambia el contenido del cuadro de texto; lo usaremos por tanto, para contar la
cantidad de caracteres escritos y mostrarlos en un Label. Ver Cdigo fuente 445.



' al cambi ar el t ext o del cont r ol se pr oduce
' est e event o
Pr i vat e Sub t xt Or i gen_Text Changed( ByVal sender As Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es t xt Or i gen. Text Changed

' cal cul amos l a l ongi t ud del t ext o escr i t o
Me. l bl Cont ador . Text = Me. t xt Or i gen. Text Lengt h

End Sub

Cdigo fuente 445


Los eventos MouseMove y KeyDown del TextBox, se producen respectivamente, cuando movemos el
ratn sobre el control, o cada vez que pulsamos una tecla para escribir texto. Detectaremos en este
caso, si existen teclas o botones especiales presionados, que nos indiquen que se est realizando una
seleccin de texto, y mostraremos en el formulario el texto seleccionado, el nmero de caracteres y la
posicin del carcter de inicio de la seleccin. Veamos los procedimientos manipuladores de estos
eventos en el Cdigo fuente 446.
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
70



' al mover el r at n por el Text Box se pr oduce
' est e event o
Pr i vat e Sub t xt Or i gen_MouseMove( ByVal sender As Obj ect , ByVal e As
Syst em. Wi ndows. For ms. MouseEvent Ar gs) Handl es t xt Or i gen. MouseMove

' compr obamos si al mover el r at n
' est pul sado su bot n i zqui er do

' en caso af i r mat i vo es que se est
' sel ecci onando t ext o, por l o que obt enemos
' l a i nf or maci n de sel ecci n con l as
' pr opi edades de sel ecci n del Text Box
I f e. But t on. Lef t Then
Me. l bl Text oSel ec. Text = Me. t xt Or i gen. Sel ect edText
Me. l bl Longi t ud. Text = Me. t xt Or i gen. Sel ect i onLengt h
Me. l bl Posi ci on. Text = Me. t xt Or i gen. Sel ect i onSt ar t
End I f

End Sub

' est e event o se pr oduce cuando se pul sa
' una t ecl a en el Text Box
Pr i vat e Sub t xt Or i gen_KeyDown( ByVal sender As Obj ect , ByVal e As
Syst em. Wi ndows. For ms. KeyEvent Ar gs) Handl es t xt Or i gen. KeyDown

' compr obamos l as t ecl as pul sadas

' si est pul sada l a t ecl a mayscul as,
' y adems se est pul sando l a t ecl a
' f l echa der echa, qui er e deci r que se
' est sel ecci onando t ext o;
' obt ener l a i nf or maci n de l as pr opi edades
' de sel ecci n del cont r ol Text Box
I f e. Shi f t Then
I f e. KeyCode. Ri ght Then
Me. l bl Text oSel ec. Text = Me. t xt Or i gen. Sel ect edText
Me. l bl Longi t ud. Text = Me. t xt Or i gen. Sel ect i onLengt h
Me. l bl Posi ci on. Text = Me. t xt Or i gen. Sel ect i onSt ar t
End I f
End I f

End Sub

Cdigo fuente 446

Finalmente, tras introducir un valor en los controles txtPosicion y txtLongitud, pulsaremos el botn
btnSeleccionar. Con ello conseguiremos realizar una seleccin de texto en el TextBox txtOrigen, y
pasar el texto seleccionado al control txtDestino. El efecto ser el mismo que si lo hubiera realizado el
usuario, pero en este caso sin su intervencin. Veamos en el Cdigo fuente 447, el evento Click del
botn btnSeleccionar.


' al pul sar est e bot n, sel ecci onar por cdi go t ext o
' del cont r ol t xt Or i gen y pasar l o al cont r ol t xt Dest i no
Pr i vat e Sub bt nSel ecci onar _Cl i ck( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es bt nSel ecci onar . Cl i ck


Me. t xt Or i gen. Sel ect i onSt ar t = Me. t xt Posi ci on. Text
Me. t xt Or i gen. Sel ect i onLengt h = Me. t xt Longi t ud. Text
Me. t xt Dest i no. Text = Me. t xt Or i gen. Sel ect edText
End Sub

Cdigo fuente 447

Ing. CIP Herberth Aranda Rojas
11. Controles Windows
71



La Figura 248 muestra este ejemplo en ejecucin.



Figura 248. Pruebas de seleccin de texto con el control TextBox.


CheckBox
Este control muestra una casilla de verificacin, que podemos marcar para establecer un estado.
Generalmente el estado de un CheckBox es marcado (verdadero) o desmarcado (falso), sin embargo,
podemos configurar el control para que sea detectado un tercer estado, que se denomina
indeterminado, en el cual, el control se muestra con la marca en la casilla pero en un color de tono
gris.

Las propiedades remarcables de este control son las siguientes.

Checked. Valor lgico que devuelve True cuando la casilla est marcada, y False cuando est
desmarcada.

CheckState. Valor del tipo enumerado CheckState, que indica el estado del control. Checked,
marcado; Unchecked, desmarcado; e Indeterminate, indeterminado.

ThreeState. Por defecto, un control de este tipo slo tiene dos estados, pero asignando True a
esta propiedad, conseguimos que sea un control de tres estados.

CheckAlign. Permite establecer de modo visual la ubicacin de la casilla de verificacin
dentro del rea del control.

Como detalle destacable de las propiedades Checked y CheckState, si modificamos desde cdigo sus
valores, conseguiremos alterar el estado de la casilla del control.

El ejemplo CheckBoxPru , muestra un formulario con dos controles CheckBox. El control
chkPonColor asigna un color de fondo al formulario o restablece el color original. Esto lo
conseguimos codificando el evento CheckedChanged del control. Ver Cdigo fuente 448.






Ing. CIP Herberth Aranda Rojas
11. Controles Windows
72


' est e event o se pr oduce cuando se hace cl i c
' en el CheckBox y cambi a el cont eni do de l a casi l l a
Pr i vat e Sub chkPonCol or _CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es chkPonCol or . CheckedChanged

I f Me. chkPonCol or . CheckSt at e = CheckSt at e. Checked Then
Me. BackCol or = Col or . Li ght Bl ue
El se
Me. Reset BackCol or ( )
End I f
End Sub

Cdigo fuente 448


Por su parte, el control chkMostrar, definido con tres estados, muestra, al estar marcado, una cadena
en un control Label; elimina la cadena al desmarcarlo; y muestra la mitad al entrar en el estado
indeterminado. El evento CheckStateChanged es el que debemos de utilizar para detectar el estado del
CheckBox en cada ocasin. Para mantener el valor de la cadena a mostrar, utilizamos una variable a
nivel de la clase que inicializamos en el constructor del formulario. Ver Cdigo fuente 449.



Publ i c Cl ass For m1
I nher i t s Syst em. Wi ndows. For ms. For m

Pr i vat e sCadenaOr i gi nal As St r i ng
Publ i c Sub New( )
' . . . .
' i ni ci al i zar l a var i abl e que cont i ene l a cadena
' a most r ar en el l abel y asi gnar l a
sCadenaOr i gi nal = " Est amos vi sual i zando una cadena"
Me. l bl Muest r a. Text = sCadenaOr i gi nal
End Sub
' . . . .

' est e event o se pr oduce cuando cambi a el est ado
' de l a casi l l a
Pr i vat e Sub chkMost r ar _CheckSt at eChanged( ByVal sender As Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es chkMost r ar . CheckSt at eChanged

Sel ect Case Me. chkMost r ar . CheckSt at e
Case CheckSt at e. Checked
Me. l bl Muest r a. Text = sCadenaOr i gi nal

Case CheckSt at e. Unchecked
Me. l bl Muest r a. Text = " "

Case CheckSt at e. I ndet er mi nat e
Me. l bl Muest r a. Text = sCadenaOr i gi nal . Subst r i ng( 0,
( sCadenaOr i gi nal . Lengt h / 2) )

End Sel ect

End Sub

Cdigo fuente 449
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
73


La Figura 249 muestra este ejemplo en ejecucin.



Figura 249. Controles CheckBox en ejecucin.


RadioButton y GroupBox

Los controles RadioButton nos permiten definir conjuntos de opciones autoexcluyentes, de modo que
situando varios controles de este tipo en un formulario, slo podremos tener seleccionado uno en cada
ocasin.

Vamos a crear un proyecto de ejemplo con el nombre RadioButtonPru, en el que situaremos dentro de
un formulario, una serie de controles RadioButton y un TextBox, de modo que mediante los
RadioButton cambiaremos el tipo de fuente y color del cuadro de texto. La Figura 250 muestra un
diseo inicial del formulario.



Figura 250. Pruebas con el control RadioButton.


Al ejecutar el proyecto, sin embargo, no podemos conseguir establecer simultneamente un tipo de
letra y color, puesto que al pulsar cualquiera de los botones de radio, se quita el que hubiera
seleccionado previamente.

Para solucionar este problema, disponemos del control GroupBox, que nos permite, como indica su
nombre, agrupar controles en su interior, tanto RadioButton como de otro tipo, ya que se trata de un
control contenedor.
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
74


Una vez dibujado un GroupBox sobre un formulario, podemos arrastrar y soltar sobre l, controles ya
existentes en el formulario, o crear nuevos controles dentro de dicho control. De esta forma, podremos
ya, en este ejemplo, seleccionar ms de un RadioButton del formulario, como vemos en la Figura 251.



Figura 251. Seleccin de varios RadioButton en un formulario.


El evento CheckedChanged, al igual que ocurra con los controles CheckBox, ser el que tendremos
que escribir para ejecutar el cdigo en respuesta a la pulsacin sobre un control RadioButton. El
Cdigo fuente 450 muestra los eventos correspondientes a los controles de radio de este ejemplo. Para
cambiar el tipo de fuente, instanciamos un objeto Font y lo asignamos a la propiedad Font del
TextBox; mientras que para cambiar el color, utilizamos la estructura Color y la propiedad BackColor,
tambin del TextBox.



Pr i vat e Sub r bt Tahoma_CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es r bt Tahoma. CheckedChanged

Me. t xt Nombr e. Font = New Font ( " Tahoma" , 12)

End Sub

Pr i vat e Sub r bt Gar amond_CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es r bt Gar amond. CheckedChanged

Me. t xt Nombr e. Font = New Font ( " Gar amond" , 8)

End Sub

Pr i vat e Sub r bt Comi c_CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es r bt Comi c. CheckedChanged

Me. t xt Nombr e. Font = New Font ( " Comi c Sans MS" , 15)

End Sub

Pr i vat e Sub r bt Ver de_CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es r bt Ver de. CheckedChanged

Me. t xt Nombr e. BackCol or = Col or . Gr een

End Sub

Pr i vat e Sub r bt Azul _CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es r bt Azul . CheckedChanged
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
75


Me. t xt Nombr e. BackCol or = Col or . Bl ue

End Sub

Pr i vat e Sub r bt Amar i l l o_CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es r bt Amar i l l o. CheckedChanged

Me. t xt Nombr e. BackCol or = Col or . Yel l ow

End Sub

Cdigo fuente 450


ListBox

Un control ListBox contiene una lista de valores, de los cuales, el usuario puede seleccionar uno o
varios simultneamente. Entre las principales propiedades de este control, podemos resaltar las
siguientes.

Items. Contiene la lista de valores que visualiza el control. Se trata de un tipo
ListBox.ObjectCollection, de manera que el contenido de la lista puede ser tanto tipos
carcter, como numricos y objetos de distintas clases. Al seleccionar esta propiedad en la
ventana de propiedades del control, y pulsar el botn que contiene, podemos introducir en una
ventana elementos para el control. Ver Figura 252.



Figura 252. Introduccin de valores para un ListBox en tiempo de diseo.


El control quedara por lo tanto con valores asignados en la etapa de diseo, como muestra la
Figura 253.
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
76




Figura 253. ListBox en diseo con valores en su lista.

Sorted. Cuando esta propiedad contiene el valor True, ordena el contenido de la lista. Cuando
contiene False, los elementos que hubiera previamente ordenados, permanecen con dicho
orden, mientras que los nuevos no sern ordenados.

IntegralHeight. Los valores de la lista son mostrados al completo cuando esta propiedad
contiene True. Sin embargo, al asignar el valor False, segn el tamao del control, puede que
el ltimo valor de la lista se visualiza slo en parte. La Figura 254 muestra un ListBox con
esta propiedad a False.



Figura 254. ListBox mostrando parte del ltimo elemento debido a la propiedad IntegralHeight.


MultiColumn. Visualiza el contenido de la lista en una o varias columnas en funcin de si
asignamos False o True respectivamente a esta propiedad.

SelectionMode. Establece el modo en el que vamos a poder seleccionar los elementos de la
lista. Si esta propiedad contiene None, no se realizar seleccin; One, permite seleccionar los
valores uno a uno; MultiSimple permite seleccionar mltiples valores de la lista pero debemos
seleccionarlos independientemente; por ltimo, MultiExtended nos posibilita la seleccin
mltiple, con la ventaja de que podemos hacer clic en un valor, y arrastrar, seleccionando en la
misma operacin varios elementos de la lista.

SelectedItem. Devuelve el elemento de la lista actualmente seleccionado.

Selecteditems. Devuelve una coleccin ListBox.SelectedObjectCollection, que contiene los
elementos de la lista que han sido seleccionados.

SelectedIndex. Informa del elemento de la lista seleccionado, a travs del ndice de la
coleccin que contiene los elementos del ListBox.

Para mostrar algunas de las funcionalidades de este control, utilizaremos el proyecto de ejemplo
ListBoxPru. La Figura 255 muestra esta aplicacin en ejecucin.
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
77




Figura 255. Ejemplo de uso del control ListBox.


El ejemplo, como puede comprobar el lector, consiste en un formulario que contiene un ListBox
principal, con el nombre lstValores, que dispone de una serie de valores asignados en tiempo de
diseo.

Cada vez que hacemos clic en alguno de los valores, se produce el evento SelectedIndexChanged, que
utilizamos para mostrar en este caso, el nombre del elemento en el ttulo del formulario, como muestra
el Cdigo fuente 451, de la clase frmListas, correspondiente al formulario.



' decl ar amos est a const ant e a ni vel de cl ase, par a poner como t t ul o
' del f or mul ar i o j unt o al el ement o sel ecci onado de l a l i st a
Publ i c Const TI TULO As St r i ng = " El ement o sel ecci onado: "

' est e event o se pr oduce cada vez que se cambi a el
' ndi ce sel ecci onado del Li st Box
Pr i vat e Sub l st Val or es_Sel ect edI ndexChanged( ByVal sender As Syst em. Obj ect , ByVal e
As Syst em. Event Ar gs) Handl es l st Val or es. Sel ect edI ndexChanged

' most r ar en el t t ul o del f or mul ar i o el val or
' act ual ment e sel ecci onado de l a l i st a
Me. Text = TI TULO & Me. l st Val or es. Sel ect edI t em

End Sub

Cdigo fuente 451


A travs de los RadioButton, cambiamos el tipo de seleccin que podemos efectuar en el control
lstValores. Ver Cdigo fuente 452.



Pr i vat e Sub r bt Uno_CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es r bt Uno. CheckedChanged

' est abl ecer t i po de sel ecci n en el Li st Box a un el ement o
Me. l st Val or es. Sel ect i onMode = Sel ect i onMode. One

End Sub
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
78



Pr i vat e Sub r bt Mul t i pl e_CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es r bt Mul t i pl e. CheckedChanged

' est abl ecer t i po de sel ecci n en el Li st Box a un ml t i pl es
' el ement os
Me. l st Val or es. Sel ect i onMode = Sel ect i onMode. Mul t i Si mpl e

End Sub

Pr i vat e Sub r bt Ext endi da_CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es r bt Ext endi da. CheckedChanged

' est abl ecer t i po de sel ecci n en el Li st Box a ml t i pl es
' el ement os de modo ext endi do
Me. l st Val or es. Sel ect i onMode = Sel ect i onMode. Mul t i Ext ended

End Sub

Cdigo fuente 452


Mediante los controles chkOrdenar y chkColumnas, ordenaremos y mostraremos en columnas
respectivamente el ListBox. Ver Cdigo fuente 453.



Pr i vat e Sub chkOr denar _CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es chkOr denar . CheckedChanged

' segn el val or del CheckBox, or denamos o qui t amos
' l a opci n de or denar del Li st Box
Me. l st Val or es. Sor t ed = Me. chkOr denar . Checked

End Sub

Pr i vat e Sub chkCol umnas_CheckedChanged( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es chkCol umnas. CheckedChanged

' segn el val or del CheckBox, most r amos el Li st Box
' en var i as col umnas o en una
Me. l st Val or es. Mul t i Col umn = Me. chkCol umnas. Checked

End Sub

Cdigo fuente 453


El TextBox de este formulario lo usaremos para aadir nuevos elementos al ListBox lstValores, y
buscar tambin elementos existentes, pulsando los botones btnAgregar y btnBuscar en cada caso.
Observemos el miembro NoMatches del ListBox, mediante el que averiguamos si la bsqueda tuvo
xito. Ver el Cdigo fuente 454.



Pr i vat e Sub bt nAgr egar _Cl i ck( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es bt nAgr egar . Cl i ck

' aadi mos el cont eni do del Text Box como
' un el ement o a l a l i st a
Me. l st Val or es. I t ems. Add( Me. t xt Val or . Text )

End Sub
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
79


Pr i vat e Sub bt nBuscar _Cl i ck( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es bt nBuscar . Cl i ck

Di mi Posi ci on As I nt eger
' el mt odo Fi ndSt r i ng( ) de l a l i st a busca un val or
i Posi ci on = Me. l st Val or es. Fi ndSt r i ng( Me. t xt Val or . Text )

' el campo NoMat ches i ndi ca si no exi st e el val or buscado
I f i Posi ci on = Me. l st Val or es. NoMat ches Then
MessageBox. Show( " No exi st e el val or " )
El se
' si encont r amos el val or en l a l i st a,
' l o sel ecci onamos por cdi go
Me. l st Val or es. Sel ect edI ndex = i Posi ci on
End I f

End Sub

Cdigo fuente 454


La seleccin de los elementos de un ListBox no es competencia exclusiva del usuario. El programador
puede tambin, si lo necesita, seleccionar valores de la lista mediante el cdigo del programa. Al
pulsar el botn btnSelecCod, utilizaremos el mtodo SetSelected( ) del ListBox para realizar esta tarea.
En este mtodo pasamos como parmetro el ndice de la lista con el que vamos a operar, y el valor
True para seleccionarlo, o False para quitarle la seleccin. Ver el Cdigo fuente 455.



Pr i vat e Sub bt nSel ecCod_Cl i ck( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es bt nSel ecCod. Cl i ck

' par a sel ecci onar el ement os de un Li st Box por cdi go
' podemos ut i l i zar el mt odo Set Sel ect ed( )
Me. r bt Mul t i pl e. Checked = Tr ue
Me. l st Val or es. Set Sel ect ed( 1, Tr ue)
Me. l st Val or es. Set Sel ect ed( 3, Tr ue)
Me. l st Val or es. Set Sel ect ed( 5, Tr ue)

End Sub

Cdigo fuente 455


El botn btnTraspasarSelec lo usaremos para tomar los elementos seleccionados de lstValores, y
pasarlos al otro ListBox del formulario. La propiedad SelectedItems del control lstValores, devuelve
una coleccin con sus elementos seleccionados. Por otra parte, podemos eliminar los elementos de un
ListBox llamando al mtodo Clear( ) de la coleccin de valores del control, cosa que hacemos
pulsando el botn btnLimpiar. Ver Cdigo fuente 456.



Pr i vat e Sub bt nTr apasar Sel ec_Cl i ck( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es bt nTr apasar Sel ec. Cl i ck

Di moSel ecci on As Li st Box. Sel ect edObj ect Col l ect i on
' obt enemos con Sel ect edI t ems l os el ement os sel ecci onados
' de un Li st Box
oSel ecci on = Me. l st Val or es. Sel ect edI t ems

' si exi st en el ement os sel ecci onados,
' l os t r aspasamos a ot r o Li st Box del f or mul ar i o
I f oSel ecci on. Count > 0 Then
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
80


Di moEnumer ador As I Enumer at or
oEnumer ador = oSel ecci on. Get Enumer at or ( )
Whi l e oEnumer ador . MoveNext ( )
Me. l st Tr aspaso. I t ems. Add( oEnumer ador . Cur r ent )
End Whi l e
End I f
End Sub

Pr i vat e Sub bt nLi mpi ar _Cl i ck( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es bt nLi mpi ar . Cl i ck

' con el mt odo Cl ear ( ) de l a col ecci n de el ement os
' de un Li st Box, bor r amos l os el ement os del cont r ol s
Me. l st Tr aspaso. I t ems. Cl ear ( )

End Sub

Cdigo fuente 456


ComboBox

El ComboBox es un control basado en la combinacin (de ah su nombre) de dos controles que ya
hemos tratado: TextBox y ListBox.

Un control ComboBox dispone de una zona de edicin de texto y una lista de valores, que podemos
desplegar desde el cuadro de edicin.

El estilo de visualizacin por defecto de este control, muestra el cuadro de texto y la lista oculta,
aunque mediante la propiedad DropDownStyle podemos cambiar dicho estilo. La Figura 256 muestra
un formulario con diversos ComboBox, cada uno con diferente estilo. Este proyecto de ejemplo,
ComboBoxPru.



Figura 256. Controles ComboBox de distintos estilos.


La propiedad DropDownStyle tambin influye en una diferencia importante de comportamiento entre
el estilo DropDownList y los dems, dado que cuando creamos un ComboBox con el mencionado
estilo, el cuadro de texto slo podr mostrar informacin, no permitiendo que esta sea modificada.

En el caso de que la lista desplegable sea muy grande, mediante la propiedad MaxDropDownItems,
asignaremos el nmero de elementos mximo que mostrar la lista del control.
Ing. CIP Herberth Aranda Rojas
11. Controles Windows
81


El resto de propiedades y mtodos son comunes con los controles TextBox y ListBox. En el
Cdigo fuente 457 se muestra el cdigo del botn btnAgregar, mediante el que llenamos de
valores los controles de este ejemplo.



Pr i vat e Sub bt nAgr egar _Cl i ck( ByVal sender As Syst em. Obj ect , ByVal e As
Syst em. Event Ar gs) Handl es bt nAgr egar . Cl i ck

Me. cboCol or es. I t ems. AddRange( New St r i ng( ) {" AZUL" , " VERDE" , " AMARI LLO" ,
" ROJ O" , " BLANCO" , " MARRN" , " GRANATE" })

Me. cboNombr es. I t ems. AddRange( New St r i ng( ) {" ELENA" , " J OSE" , " ANA" ,
" ALFREDO" , " LUI S" , " ANGEL" , " RAQUEL" })


Me. cboCi udades. I t ems. AddRange( New St r i ng( ) {" SEVI LLA" , " VALENCI A" ,
" ALI CANTE" , " TOLEDO" , " SEGOVI A" })

End Sub

Cdigo fuente 457

EJ EMPLOS DE APLI CACI N.



Desarrolle los Ejemplos del Captulo 11 del Manejo y uso de Controles,
Luego desarrolle los Ejemplos del Laboratorio Dirigido:
Caso N 01: Notas.
Caso N 02: Semforo.

También podría gustarte