Vous êtes sur la page 1sur 77

GUIAS DE APRENDIZAJE LENGUAJE DE PROGRAMACION VISUAL BASIC .

NET
ANALISIS Y DESARROLLO DE SISTEMAS DE INFORMACION ADSI
CENTRO PARA LA INDUSTRIA DE LA COMUNICACIN GRAFICA CENIGRA
Ficha: 660893
Instructor: Ivan Daniel Vela Montenegro

Qu ES .NET?
Visual Studio es la "suite" o conjunto de aplicaciones de desarrollo de Microsoft. Incluye Visual
Basic.Net, C#, desarrollo en Web y otras utilidades. De todo el paquete nos centramos en la parte
de Visual Basic.Net versin 2012.
Visual Basic .NET y el entorno .NET Framework
Visual Basic .NET usa una jerarqua de clases que estn incluidas en el .NET Framework, por tanto
conocer el .NET Framework nos ayudar a conocer al propio Visual Basic .NET, aunque tambin
necesitars conocer la forma de usar y de hacer del VB.NET ya que, aunque en el fondo sea lo
mismo, el aspecto sintctico es diferente para cada uno de los lenguajes basados en .NET
Framework.
El verdadero ncleo de todo es .NET Framework un entorno con multitud de clases y objetos
disponibles para trabajar con ellos. Sobre este ncleo tendremos los lenguajes de programacin
y uno de ellos es Visual Basic .NET. Por eso es muy importante conocer que es el .NET
Framework
Qu es el .NET Framework?
Literalmente .Net Framework es:
".NET Framework es un entorno para construir, instalar y ejecutar servicios Web y otras
aplicaciones.
Se compone de tres partes principales: el Common Language Runtime, las clases Framework y
ASP.NET"
"El .NET Framework es un entorno multi-lenguaje para la construccin, distribucin y ejecucin de
Servicios Webs y aplicaciones."
"El .NET Framework es una nueva plataforma diseada para simplificar el desarrollo de
aplicaciones en el entorno distribuido de Internet."
.NET es entonces una nueva filosofa en cuanto a entornos de desarrollo. Este entorno puede
utilizar varios lenguajes diferentes para escribir programas y todos se apoyarn en las
herramientas que ofrece para conseguir aplicaciones .NET. El alma de este entorno es el .NET
Framework. Ya habrs tenido ocasin de comprobarlo porque al instalar algn programa
seguramente te ha pedido como requisito que instales el "runtime de .Net Framework", es decir la
aplicacin est hecha en este entorno pero hay que instalar en tu ordenador el soporte para esta
tecnologa.

.Net Framework permite el desarrollo de aplicaciones a travs del uso de un conjunto de


herramientas y servicios que proporciona y que se agrupan en tres bloques:

El entorno de ejecucin comn Common Languaje Runtime (CLR)


Jerarqua de clases de .NET
Motor de generacin de formularios, para crear nuestras aplicaciones
El Common Lenguage Runtime (CLR) se compone de una serie de libreras dinmicas (DLLs),
tambin llamadas assemblies (o ensamblados),
Como sabemos, cualquier ejecutable depende de una forma u otra de una serie de libreras, ya sea
en tiempo de ejecucin como a la hora de la compilacin. CLR es exactamente esto, una serie de
libreras utilizadas en tiempo de ejecucin para que nuestros ejecutables o cualquier programa
basado en .NET puedan funcionar. Se acab eso de que existan dos tipos de ejecutables: los que
son autosuficientes y no dependen de libreras externas o los que necesitan de libreras en tiempo
de ejecucin para poder funcionar, tal es el caso de las versiones anteriores de Visual Basic. (Esto
lo entendern mejor los antiguos programadores de VB)
Es decir, podamos tener un fichero ejecutable nico que no dependiese de ninguna librera,
bastaba por lo tanto copiarlo a otro equipo y poda funcionar sin problemas. Por otro lado estn
los que necesitan libreras externas o ficheros DLL que se instalan en nuestro equipo ayudndose
de programas de instalacin. Estas libreras se copian normalmente en nuestra
carpeta \Windows\System32 o \Windows\sysWOW64 si se trata de Windows de 64 bits.
Si decimos que ahora que con este CLR ya no necesitamos esas libreras, perfecto, slo tendremos
que instalar este componente y nuestros programas .NET funcionarn en cualquier equipo.
Por otro lado, la biblioteca de clases de .NET Framework proporciona una jerarqua de clases
orientadas a objeto disponibles para cualquiera de los lenguajes basados en .NET, incluido el
Visual Basic. Esto quiere decir que a partir de ahora Visual Basic ya no ser la "oveja negra" de los
lenguajes de programacin, sino que tendr a su disposicin todas las clases disponibles para el
resto de los lenguajes basados en .NET, (o casi), con lo cual slo nos diferenciar del resto de
programadores en la forma de hacer las cosas: ms fciles!
Los poco flexibles modelos de programacin actuales impiden al programador contemplar la idea
de un proyecto para Internet que le permita crear aplicaciones distribuidas ms potentes. Estos
sistemas utilizaban distintas tecnologas como COM, ASP, ADO, ... que individualmente son buenas
pero que no estn pensadas para ser ejecutadas en la red. Estos elementos definan la
arquitectura Windows DNA (Distributed Internet Architecture) que hasta ahora era el modelo de
programacin para Internet. Esta tecnologa queda ahora desplazada completamente por la
arquitectura .NET
Microsoft .NET ofrece una visin orientada a objeto del sistema operativo Windows e incluye
cientos de clases que encapsulan los objetos ms importantes del ncleo de Windows. ms
adelante veremos y definiremos las clases pero de una forma resumida digamos que son plantillas
para crear objetos, por ejemplo: la clase "botn" me permite crear botones de comando y trabajar
con ellos.

En este curso nos centraremos en la parte de Visual Basic.NET pero no debemos olvidar que .NET
es ms que este lenguaje, por ejemplo ASP.NET es una potente plataforma de desarrollo para
Internet, permite crear complejas aplicaciones basadas en Web.
La primera versin popular fue la .net Framework 1.1 que se programaba con el complejo Visual
Basic 2003. Tena tantas cosas nuevas y diferentes que era complejo de utilizar. Con la versin 2.0
lleg la tranquilidad y la facilidad con Visual Studio 2005. La interfaz era ms amigable y el modelo
de objetos se simplificaba haciendo todo mucho ms coherente. Finalmente la versin 3.5 es la
culminacin del trabajo bien hecho porque al incremento de potencia se le suma una interfaz ms
sencilla de utilizar y un modelo de objetos ms extenso pero ms coherente e intuitivo de utilizar
que se plasmaban en Visual Studio 2008. La versin 4 trajo muchas novedades y mejoras con
Visual Basic .Net 2010. Finalmente trabajaremos con la 4.5 que es la que incorpora nuestro Visual
Basic.Net 2012. La versin express es muy limitada ya que las versiones de pago incorporan
muchas novedades y funcionalidades.
Comenzar con .NET
Por ahora nos estamos convenciendo de que .NET es la mejor plataforma de desarrollo y que
compite muy de cerca con Java. Al igual que las anteriores versiones de Visual Basic, ste se
encuentra dentro del paquete Visual Studio .NET, que incorpora varios lenguajes, herramientas y
tecnologas. En nuestro caso nos centraremos en Visual Basic .NET.
Los requisitos en cuanto al equipo adecuado para desarrollas con Vb.Net 2012 son, como siempre,
los mximos que podamos. Estos programas son grandes consumidores de memoria, as que
cuanta ms tengamos mejor. En Visual Studio .NET y como ya es habitual en el resto de las
aplicaciones de Microsoft, debemos ser generosos con el equipo para desarrollar en .NET. Por
ejemplo, como veremos ms adelante, el entorno de desarrollo tiene tanta informacin que
trabajar con una resolucin menor que 1027x768 es imposible, y sta se queda limitada y no
podremos desplegar todas las pantallas. Para el desarrollo es recomendable un monitor que
disponga de al menos una resolucin de 1.200 x 1.024 que es la que actualmente proporcionan los
monitores TFT de 17" y 19". Una pantalla "full hd" con 1.920 x 1.080 con 23" sera la opcin
perfecta.

La mejor forma de comprender cmo funciona .NET es analizar las capas en las que se divide .NET
Framework. Vamos a fijarnos en la siguiente figura:

Como hemos comentado antes .NET Framework constituye la base sobre la que se asienta .NET.
Para nosotros es la pieza fundamental de esta nueva tecnologa y es la que nos va a proporcionar
las herramientas y servicios que necesitaremos en nuestros desarrollos. Podemos agrupar en tres
bloques el conjunto de herramientas y servicios:

El runtime de lenguaje comn o entorno de ejecucin comn (CLR)

Biblioteca de clases base de la plataforma .NET (.NET Framework Base Classes)

Motor de generacin de la interfaz para crear formularios e interfaces de usuario.

Estas son tres de las capas del esquema anterior. Esta jerarqua me indica que en el nivel ms alto
estn los lenguajes que vamos a utilizar en nuestro desarrollo con .NET que pueden ser varios (en
nuestro caso Visual Basic). Posteriormente traduce esas instrucciones al estndar .NET y as poder
trabajar con esas instrucciones de una forma independiente al lenguaje con que se escribieron. El
siguiente paso es la generacin de formularios para Windows o Web (ASP.NET ).
Posteriormente se realiza el enlace con bases de datos, si las hay. Por fin llegamos a todos los
objetos disponibles y por ltimo al "runtime de lenguaje comn" (CLR) que es el que va a ejecutar
la aplicacin.
Veamos ahora ms tcnicamente de abajo hacia arriba:

Runtime del lenguaje comn


El runtime del lenguaje comn es la primera capa que pertenece a .NET Framework. Esta capa es
la responsable de los servicios bsicos de .NET, tales como la administracin de memoria, la
recoleccin de los elementos no utilizados, el control estructurado de excepciones y del
subprocesamiento mltiple. Si .NET se transporta a otras arquitecturas que no estn basadas en
Windows el primer paso sera escribir un runtime del lenguaje para el nuevo equipo. El CLR tiene
estas caractersticas:

Proporciona mejoras para el programador que antes tena que elaborar

Administra el cdigo en tiempo de ejecucin: carga en memoria, liberacin de memoria, ...

Gestiona la seguridad del cdigo ejecutado

Abre posibilidades a otros fabricantes para incorporar sus lenguajes

Facilita la distribucin e instalacin de aplicaciones. Elimina los temibles conflictos de DLL's


y versiones de ellas

Es la interfaz entre nuestro cdigo y el sistema operativo, de ah que si maana Microsoft hace un
CLR en lugar de para Windows, para Macintosh se puedan ejecutar nuestras aplicaciones .NET en
este sistema. Es exactamente la misma filosofa que las mquinas virtuales de Java, en la que cada
plataforma: Linux, Windows, ... tiene su mquina virtual para ejecutar el cdigo escrito en Java.
Biblioteca de clases
La biblioteca de clases base (BCL) es la parte de .NET Framework que define todos los tipos de
datos bsicos, tales como System.Object (raz de la jerarqua de objetos .NET), tipos numricos y
de fechas, tipo string, matrices y colecciones. La BCL contiene tambin clases que administrarn
las caractersticas centrales de .NET: entrada/salida de archivos, subprocesamiento, serializacin y
seguridad. La forma en la que los tipos se implementan en la BCL siguen las especificaciones
llamadas Common Type System (CTS). Por ejemplo, estas especificaciones dicta la forma en la que
un tipo .NET expone campos, propiedades, mtodos y sucesos, tambin cmo un tipo puede
heredar otro tipo.
A lo largo del curso veremos estas clases y por fuerza trabajaremos con ellas porque todo en .NET
son clases: desde un grfico, un botn hasta nuestro programa.
Capa de datos
La capa de datos y XML contienen las clases .NET que trabajan con bases de datos y con XML.
Anteriormente el soporte XML era una compatibilidad proporcionada por un componente externo.
En .NET vemos cmo est integrado en su mismo ncleo. Podemos decir que XML es el formato
que utiliza .NET para almacenar cualquier tipo de informacin. La parte de datos es la que se
conoce como ADO.NET y es el equivalente en .NET a la tecnologa ActiveX Data Object (ADO),
ampliamente conocida por los programadores de Visual Basic, Intranets,
Capa de formularios y ASP.NET
Las dos capas siguientes son ASP.NET y Windows Forms. Aqu se sitan todas las clases que
podremos utilizar para generar las pginas Web en el primer caso y las ventanas estndares o

formularios en las aplicaciones de Windows en el segundo caso. Las aplicaciones en Windows se


basan en formularios.
Nota:
ASP.NET es la parte de .NET encargada del desarrollo en Web. Una evolucin muy ampliada de las
pginas ASP y comprende los Web forms y los servicios Web XML.
Aunque estn en el mismo nivel las tecnologas son muy distintas. Web Forms se ejecuta en el
servidor y produce HTML y es la base de las conocidas Intranets donde estas pginas devuelven
otras pginas Web con conjuntos de resultados u otros datos. Windows Forms se ejecuta en el
cliente en un equipo con Windows.
La biblioteca de clases de .NET Framework est formada por una coleccin de ensamblados (o
Assembly), cada uno de los cuales comprende una o ms DLL. Veamos que esto de un
"ensamblado"...
Un ensamblado consiste en un conjunto de tipos y recursos reunidos para formar la unidad ms
elemental de cdigo que puede ejecutar el entorno .NET Framework. Estos ensamblados son los
elementos con los que construiremos una aplicacin: una aplicacin .NET se compone de varios
ensamblados. Podemos llamar tambin a un ensamblado como una DLL lgica (recordamos que
una DLL es una biblioteca de vnculos dinmicos). Decimos lgica porque se trata de una lista de
ficheros que se referencian en tiempo de ejecucin pero que no se compilan para producir un
fichero fsico, a diferencia de las DLL's tradicionales. Un ensamblado va mucho ms all ya que
puede contener otros recursos adems de clases, como imgenes.
Capas de CLS y lenguajes
En esta capa se encuentran las especificaciones de los lenguajes y su sincronizacin con el entorno
.NET. Ya queda menos pero importante, ahora nos encontramos con que podemos seleccionar
distintos lenguajes para escribir una aplicacin .NET ya que utilizarn los objetos de ste.
Los dos principales lenguajes de Microsoft son C# y VB. Cual es mejor? Pues los dos, al trabajar en
el mismo entorno tienen la misma potencia porque los dos tienen el mismo entorno de desarrollo
y los mismos objetos o componentes para trabajar. por cual me decido? Pues nos decidiremos
por Visual Basic (VB) ya que es de sintaxis ms sencilla. C# lo acogern con gusto los
programadores del lenguaje C. Esta sintaxis es ms compleja pero ms potente que la de VB en el
sentido de que se pueden realizar operaciones ms complejas en una sola instruccin, pero nada
que no se pueda hacer con VB. Al final el resultado es el mismo. Veamos este esquema:

Estas son las fases por las que pasa nuestro cdigo antes de ejecutarse. Como ves, son distintas
etapas en las que primero se traducen al lenguaje comn y por fin realiza la ejecucin. Por tanto,
el CLR (common languaje runtime) es el motor que soporta todos los lenguajes de .NET. Las
bondades de esta arquitectura ya las hemos comentado as que vamos a instalar ya nuestro Visual
Basic.NET
Nota: Se a dicho que el CLR ejecuta el programa traduciendolo a nuestro Windows. Entonces... si
alguien hace una CLR para Linux...nuestro cdigo se ejecutara en Linux sin tocarlo.
Versin de Visual Basic
Qu versin instalaremos? Hay varias versiones de Visual Basic 2.012. Algunas de ellas son de
pago pero tambin hay una versin gratuita: p. ej. la versin Visual Basic 2.012 Express Edition.
La primera aplicacin con Vb.NET
Vamos rpidamente a poner en marcha nuestro primer proyecto para ir conociendo el entorno de
desarrollo integrado que llamaremos a partir de ahora IDE y que nos proporcionar ilimitada

ayuda para nuestros programas. Nos vamos al men inicio y ejecutamos el programa "Microsoft
Visual Basic 2012":

Este es el aspecto general del entorno de desarrollo integrado o IDE. Tenemos una serie de atajos
para los ltimos proyectos desarrollados y un canal de ayuda y novedades en lnea que nos
muestra en la zona central. Podemos cerrar esta ventana pulsando en la "x" de arriba a la derecha:

As tendremos nuestra pantalla ms despejada para trabajar. Vamos cuanto antes a crear nuestra
primera aplicacin para conocer por fin el funcionamiento de .NET.
La disposicin de los elementos en pantalla que recuerda ms al Visual C que la de Visual Basic. De
hecho este es el primer obstculo para los programadores de Visual Basic: el nuevo IDE aunque en
cuanto lo conozcamos no ser un obstculo sino una imprescindible ayuda para desarrollar y
depurar programas.
Primera aplicacin de consola.
Sigamos con nuestro primer programa... para esto pulsamos en la opcin de "Nuevo" y luego
"Proyecto" desde el men de archivo:

Nos mostrar los diferentes tipos de proyectos que se pueden crear:

Tenemos varios lenguajes a nuestra disposicin pero nos centraremos en "Visual Basic" para
Windows. En la parte derecha tenemos los distintos proyectos disponibles. En este caso vamos a
crear una "aplicacin de consola". Le indicamos un nombre y la ubicacin.
Si tuviramos la versin de pago de VB veramos muchos ms tipos de proyectos, pero para
nuestro curso tenemos ms que de sobra con los que nos ofrece aqu. Vamos a crear una
aplicacin de consola. Sigue los pasos y luego veremos el resultado. Seleccionamos el icono que
hemos marcado y le indicamos un nombre al proyecto para luego poder cargarlo o identificarlo.
El objetivo de este ejemplo es crear una bsica aplicacin de consola que se ejecutar en una
ventana MS-DOS en lugar del habitual Windows.
Si nos fijamos en la pantalla central y en la derecha podemos ver varias cosas:

Por una parte a la derecha vemos en el explorador de soluciones que ha creado un fichero llamado
Module1.vb, con el cdigo necesario para empezar a escribir. Vemos tambin que ha creado un
"procedimiento" Sub Main, que se utilizar como punto de entrada de nuestro programa, tambin
ha creado una "definicin" llamada Module Module1 con su respectivo End Module, que indica
dnde termina la definicin del mdulo.
Un proyecto de consola se compone de un fichero "module1.vb" y unas etiquetas "Module
Module1" y "End Module". Dentro de estas etiquetas tenemos otras que pone "Sub Main/End
Sub", que son donde pondremos las instrucciones que queremos que ejecute. Ms adelante
conoceremos el porqu de estos mdulos y nombres...
Nota: Estamos creando es una aplicacin tipo consola, es decir, no se crear ninguna ventana
grfica, sino que el ejecutable que vamos a crear funcionar desde una ventana de consola. Lo
comprobaremos ahora cuando ejecutemos el proyecto.
Lo que queremos hacer en este ejemplo es un sencillo programa que diga "Hola mundo .NET".
Para mostrar un texto en la "consola" usaremos una funcin, mtodo o instruccin,... como
veremos ms tarde, todo esto es posibles gracias a los assemblies o a las clases incluidas en el .NET
Framework. De momento sigamos este ejemplo...
La instruccin que vamos a utilizar es Console.Write y se usa de la siguiente forma:
Console.Write("Hola mundo .NET")
Incluiremos dentro de parntesis lo que queremos que se muestre en la consola, en este caso
queremos mostrar un texto, que escribiremos dentro de unas comillas dobles.
Ponemos esta instruccin entre el Sub Main() y el End Sub. Comprobaremos que cuando
escribimos la palabra "Console" y el punto, se mostrarn las funciones que "Console" puede
realizar, as como una pequea ayuda, en modo de ToolTip, una ventana amarilla con el texto que
describe la sintaxis.

Y terminamos de escribir el comando:

Bien, ya tenemos todo lo que necesitamos. Ahora tendremos que indicarle al "Entorno Integrado"
(IDE) que compile el proyecto y lo ejecute. Despus de este proceso de compilacin, nos mostrar
mostrar el texto en una consola de comando. Una vez escrito pulsamos en el botn que se
muestra en esta pantalla:

Antes de pulsar para ejecutar la aplicacin vamos a realizar un pequeo aadido. Si lo ejecutamos
no veremos nada en pantalla porque se ejecutar muy rpidamente. Para ver el programa
correctamente aadiremos debajo una instruccin para que haga una pausa y podamos
comprobar que el programa funciona:

Ahora si, ejecutamos la aplicacin y despus de unos segundos nos aparecer una pantalla de
consola con:

Al ejecutarse hemos visto una pantalla en modo texto con el mensaje que hemos escrito de "Hola
Mundo!". Lo que hemos hecho ha sido ejecutar el programa desde nuestro entorno de desarrollo
de una forma controlada o en el llamado "modo de depuracin". Para hacer el programa final
tendramos que compilarlo, generando el programa ejecutable, lgicamente con extensin .exe.
Cmo escribir el primer programa
Con lo que tenemos terminada nuestra primera y "til" aplicacin en MS-DOS realizada en .NET.
Ahora pulsaremos en el botn siguiente para detener la ejecucin:

De esta forma volveremos a tener el control del IDE. Si no aparecen estos botones, pulsaremos en
el men de "Ver" y en la seccin de "Barras de herramientas" indicaremos que muestre "Depurar".
Ahora vamos a realizar otro programa as que guardaremos primero nuestro proyecto pulsando en
el botn de guardar:

Finalmente cerramos el proyecto desde la opcin de "Archivo" y luego "Cerrar proyecto":

Primera aplicacin de Windows


Ahora vamos a elegir crear una aplicacin Windows. Volvemos a indicar que queremos un "Nuevo
proyecto", indicamos que sea de Windows y le ponemos un nombre:

El aspecto del IDE ahora ser distinto ya que ahora partimos de un formulario Windows:

En la parte de la izquierda tenemos dos solapas verticales: "Cuadro de herramientas" y "Orgenes


de datos". La primera contiene los controles de Windows que podremos utilizar en nuestras
aplicaciones Windows. Haremos clic en esa pestaa y luego en la "chincheta" que aparece para
que se quede fija en la pantalla:

En nuestro entorno de desarrollo para la aplicacin Windows, tenemos una serie de controles a la
izquierda, en el centro un formulario para nuestra aplicacin y la derecha dos ventanas: el
explorador de soluciones y la ventana de propiedades. Luego veremos con detalle todas estas
partes, sigamos con nuestro ejemplo. Vamos a hacer doble clic en el centro del formulario que
tiene de ttulo "Form1" en el centro de la ventana. Nos mostrar una ventana con este aspecto:

Si nos fijamos, veremos el cursor activo en el editor. Nos est indicando que es ah donde
debemos introducir el cdigo cuando se produzca el evento "Load" de "Form1", es decir, cuando
se cargue el formulario. Vamos a escribir ahora este cdigo:

Ejecutaremos la aplicacin como hicimos antes y nos mostrar el mensaje que le hemos indicado:

Al pulsar en "Aceptar" nos mostrar el formulario vaco, ya que no hemos puesto nada ms que
ese mensaje que nos ha mostrado.

Paramos la ejecucin con el botn que vimos antes y grabamos el proyecto.


Ya tenemos nuestra primera aplicacin Windows, ahora veremos los ficheros que ha creado al
generar el proyecto.
Ficheros del proyecto
En Visual Basic .NET a diferencia de lo que ocurra en las versiones anteriores de Visual Basic, slo
existe un tipo de fichero de cdigo, con la extensin .vb. En este tipo de fichero pueden coexistir
distintos tipos de elementos, por ejemplo: un mdulo de clase, un formulario, un mdulo de
cdigo, un control, etc.; mientras que en las versiones anteriores de Visual Basic, cada uno de
estos elementos tenan su propio tipo de fichero con su respectiva extensin. Como cometamos al
principio del curso, no es necesario ningn conocimiento de anteriores versiones de Visual Basic
pero veremos algunos de los cambios ms importantes para aquellos que ya conocais versiones
anteriores y as os podis ir adaptando a todos estos nuevos conceptos.
En nuestra aplicacin anterior, un programa de Windows con un formulario, podamos ver los
ficheros en los que se compone el proyecto en la parte derecha:

Como ves, hay uno con extensin ".vb" que es el que contiene la definicin y cdigo del
formulario, un fichero "My Project" con la definicin del proyecto completo y un fichero
"App.config" con la configuracin del proyecto. Para los antiguos programadores, esta tabla
muestra la extensin que tienen los diferentes tipos de ficheros de VB.NET y su comparacin con
los de VB.NET:
Recurso

Visual Basic 6.0

Visual Basic .NET

Formulario (Form)

.frm

.vb

Mdulo (Module)

.bas

.vb

Mdulo de clase (Class


Module)

.cls

.vb

Tipos de ejecutables
Con Visual Basic .NET podemos crear muchos tipos de proyectos pero los ms importantes son los
destinados a crear aplicaciones ejecutables en Windows, stas pueden ser de dos tipos:
-

De consola, al estilo del viejo MS-DOS. Es decir, se abrir una consola de texto donde se
ejecuta el programa.
Grficos, como los que normalmente estamos acostumbrados a ver en Windows. Es decir,
compuesta de formularios donde podremos interactuar con el programa.

Existen otros tipos de aplicaciones que se pueden crear con Visual Basic .NET: aplicaciones
ASP.NET, (que no genera un ejecutable sino una pgina Web con programacin...), servicios Web,

servicios Windows, etc. Excepto los proyectos Web, que se generan desde el "Visual Studio
Express Web", los dems los tenemos como plantillas en nuestro entorno de desarrollo:

En este curso nos centraremos en los dos tipos de aplicaciones que hemos comentado.
Nota: La cantidad de proyectos distintos que podemos crear depende de la versin de VB.NET
instalada. En nuestro caso tenemos la gratuita "Express" que es muy limitada y slo permite un
pequeo nmero de proyectos. Las versiones ms profesionales tienen multitud de ellos,
incluyendo herramientas auxiliares como la creacin de proyectos para la instalacin de
aplicaciones en los equipos.
Ms conceptos de Visual Basic .NET.
Sigamos con ms conceptos bsicos sobre .NET. Una aplicacin .NET se compone, como hemos
dicho antes, de uno o ms ensamblados, cada uno de los cuales estar formado por uno o ms
archivos. La aplicacin por tanto puede ser tan simple como un slo archivo .EXE o un conjuntos
de varios archivos de cdigo y elementos externos.
Las aplicaciones .NET se ejecutan en lo que se llama "dominio de la aplicacin" que es como un
espacio donde se ejecuta nuestra aplicacin y est aislada del resto de las aplicaciones que se
estn ejecutando en Windows. Perfecto para la seguridad y para que un fallo de aplicacin no
afecte a los dems...
Antes de continuar con otro sencillo ejemplo, vamos a conocer un poco sobre el entorno de
desarrollo de Visual Basic .NET para que podamos configurar algunos aspectos. Por ejemplo, para
indicar cmo se comportar el compilador e intrprete sobre el cdigo que escribamos o para
configurar los ensamblados (assemblies) que utilizaremos en nuestras aplicaciones. (Recuerda que
Visual Basic .NET utiliza una serie de bibliotecas (de clases) con las funciones que necesitemos en
cada momento...)
IMPORTANTE!
Es muy importante seguir estos ejemplos para conocer un poco el concepto y nomenclatura de
VB.NET, as que es muy recomendable hacer una pausada lectura de esta parte del captulo.

VB.NET dispone entonces de distintas bibliotecas con funciones. Por ejemplo para poder mostrar
un texto en la consola necesitamos tener disponible la librera en la cual est declarada la clase
Console y as podremos acceder a las funciones que dicha clase pone a nuestra disposicin, (por
ejemplo Write o Read). En este caso la librera o biblioteca en la que est la clase Console es
System. System realmente es un Namespace o espacio de nombres, no es una librera o assembly.
As que aadiremos distintas bibliotecas a nuestro proyecto para que ste pueda trabajar con
bases de datos, grficos, ...
Que es un Namespace (o espacio de nombres)?
"Un espacio de nombres es un esquema lgico de nombres para tipos en el que un nombre de tipo
simple aparece precedido por un nombre jerrquico separado por puntos. [...]"
As es como lo definen en el eBook de .NET Framework de Microsoft. Pero ms claro... un
Namespace es una forma de agrupar clases, funciones, tipos de datos, etc. que estn relacionadas
entre s. Por ejemplo, entre los Namespaces que podemos encontrar en el .NET Framework
encontramos uno con funciones relacionadas con Visual Basic: Microsoft.VisualBasic.
Si nos fijamos, Microsoft y VisualBasic estn separados por un punto, esto significa que Microsoft a
su vez es un Namespace que contiene otros "espacios de nombres", tales como el mencionado
VisualBasic, CSharp y Win32 con el cual podemos acceder a eventos o manipular el registro del
sistema...
Para saber que es lo que contiene un Namespace, simplemente escribiremos el nombre con un
punto y nos mostrar una lista desplegable con los miembros que pertenecen a dicho espacio de
nombres. Hagamos la prueba y en el cdigo escribimos la palabra "Microsoft." (Con el punto al
final). Veremos que se despliega los posibles Namespaces disponibles y si seguimos y escribimos, o
seleccionamos VisualBasic con un punto al final, veremos otra vez los Namespaces de esta otra
clase llamada VisualBasic.

Y si escribimos un punto despus tendremos acceso a todos los comandos disponibles en este
espacio de nombres:

De momento no nos vamos a complicar demasiado, simplemente que sepamos que podemos
utilizar como una especie de grupos de instrucciones y otros componentes aadiendo o utilizando
"namespaces" a nuestros programas. De esta forma mantenemos los recursos de las aplicaciones
en diferentes sitios reduciendo los conflictos.
Por regla general se agrupan en un Namespace funciones o clases que estn relacionadas entre s.
De esta forma, ser ms fcil saber que estamos trabajando con funciones de la misma familia.
Hay espacios de nombres especficos por ejemplo para los grficos y otros para trabajar con bases
de datos, as los tenemos organizados de una forma ms cmoda para localizarlo y referirnos a
ellos en el cdigo.
Pero de esto no debemos preocuparnos, ya que el IDE de Visual Studio .NET se encarga de "saber"
en que assembly est el Namespace que necesitamos.
Dos de los "spacenames" ms importantes, de los que luego heredan otros o pertenecen los
dems son:
-

System. Contiene clases fundamentales y clases base que definen los valores y tipos de
datos de referencia, eventos y controladores de eventos, interfaces, atributos y
excepciones de procesamiento comnmente utilizados.
Microsoft.VisualBasic. Contiene clases que admiten la compilacin y generacin de cdigo
mediante el lenguaje Visual Basic .NET.

Otro detalle importante. Si para poder utilizar las instrucciones de Visual Basic debo importar el
espacio de nombres correspondiente... porque me han funcionado los ejemplos anteriores? Muy
sencillo, porque por defecto ya se encuentran incorporados a los proyectos los espacios de
nombres ms comunes. Hacemos doble clic en el explorador de soluciones:

Nos mostrar las propiedades del proyecto y, si nos fijamos en la opcin "Referencias", veremos la
siguiente informacin:

En la parte inferior, tenemos por defecto todos estos espacios de nombres importados a nuestro
proyecto. Por lo tanto no hace falta que los incluyamos con instrucciones especiales. Sin embargo,
otros espacios de nombres, como los de acceso a bases de datos no lo estn por defecto y ms
adelante tendremos que "importarlos".
Que es un assembly (o ensamblado)?
"Los ensamblados componen la unidad fundamental de implementacin, control de versiones,
reutilizacin, mbito de activacin y permisos de seguridad en una aplicacin basada en .NET. Los
ensamblados adoptan la forma de un archivo ejecutable (.exe) o un archivo de biblioteca de
vnculos dinmicos (.dll), y constituyen unidades de creacin de .NET Framework. Proporcionan a
Common Language Runtime la informacin que necesita para estar al corriente de las
implementaciones de tipos. Un ensamblado puede entenderse como una coleccin de tipos y
recursos que forman una unidad lgica de funcionalidad y que se generan para trabajar
conjuntamente"
Para que nos entendamos, podramos decir que un assembly es una librera dinmica (DLL) o
programa ejecutable en la cual pueden existir distintos espacios de nombres. Aunque esto es
simplificar mucho, por ahora nos vale.
Un ensamblado o assembly puede estar formado por varios ficheros DLLs y EXEs. Pero lo ms
importante es que todos los ensamblados contienen un manifiesto (o manifest), gracias al cual se
evitan muchos de los quebraderos de cabeza a los que Windows nos tiene acostumbrados, al
menos en lo referente a las distintas versiones de las libreras y ejecutables. Este manifiesto es una
tabla de contenido del Assembly que lo identifica y dice su versin y otros datos. Esta informacin
elimina lo que en otras versiones se llamaba "infierno de las DLL" por los enormes problemas de
versiones y conflictos que generaban.
Por ejemplo, supongamos que tenemos una librera DLL que en su primera versin contena X
funciones. Al tiempo, se crea la segunda versin de dicha librera en la que se cambian algunas
funciones y se aaden otras nuevas, para mejorar el rendimiento de las funciones contenidas en
esa librera se usa otra DLL que es usada por algunas de las funciones contenidas en esa segunda
versin. Esa otra librera puede ser una librera del sistema, la cual a su vez se actualiza con nueva
funcionalidad y puede que dicha funcionalidad dependa a su vez de una tercera librera.
Resulta que instalamos un programa que usa las ltimas versiones de todas estas libreras. Todo va
bien, el programa funciona a las mil maravillas y nosotros estamos muy satisfechos de ese
programa que no se cuelga ni una sola vez... Ahora llega a nuestras manos otra aplicacin que
necesitamos instalar y la instalamos, pero resulta que esa aplicacin usa la primera versin de
nuestra famosa librera. Si el programa de instalacin est bien hecho, no ocurrir nada malo, ya
que al descubrir que tenemos una versin ms reciente de la librera, deja la que ya est instalada.
Probamos el programa de todo funciona bien. Probamos el maravilloso programa anterior y
tambin funciona bien. Cual es el problema? Por ahora ninguno, pero espera...
Despus instalamos un programa que usa una de las libreras del sistema u otra que tambin usa
nuestra "flamante" librera, pero ese programa se ha instalado de "mala manera", bien porque el
programa de instalacin sea malo o bien porque simplemente se ha instalado mal... como quiera
que ha instalado una librera anterior a la que nuestros dos maravillosos ejecutables usan, se
puede dar el caso de que ninguno de los dos programas funcionen correctamente... esto ocurri

en alguna versin de Internet Explorer y caus no pocos problemas... aunque tambin ha ocurrido
con otros programas que no han tenido en cuenta a la hora de instalar que ya existe una versin
ms reciente de la librera. Por suerte, esto ya es menos comn que hace unos aos, sobre todo si
los programas de instalacin estn creados con el Windows Installer o estamos utilizando la
ltimas versiones de Windows.
Adems, .NET mejora an esa "imposibilidad" de equivocarnos ya que cada assembly contiene un
manifiesto en el cual se indica:

Nombre y la versin del assembly


Si este assembly depende de otros ensamblados, con lo cual se indica hasta la
versin de dichos ensamblados
Los tipos expuestos por el assembly (clases, etc.)
Permisos de seguridad para los distintos tipos contenidos en el assembly.
Datos del copyright, etc.
Nuevamente hay que comentar que no hay que preocuparse mucho de esto, ya que es el propio
.NET el que se encarga de que todo funcione correctamente (al menos a priori)
La ventaja de los ensamblados es que "realmente" no necesitan de una instalacin y un registro
correcto en el registro del sistema de Windows, ya que es el "intrprete" de .NET el que se encarga
de hacer las comprobaciones cuando tiene que hacerlas. Por tanto podramos distribuir una
aplicacin sin necesidad de crear un programa de instalacin. Pero, (por qu siempre hay un
pero?), si la aplicacin usa ensamblados compartidos, puede que sea necesario usar una
instalacin.
Los ensamblados compartidos se pueden usar por varias aplicaciones diferentes y deben estar
"debidamente" instalados en el directorio asignado por el propio .NET Framework.
Ejemplo de ensamblados compartidos son los que definen las clases (tipos) usados por el propio
.NET Framework. Fsicamente todos los ensamblados y componentes de .NET se almacenan en la
carpeta "Windows":

Podemos ver las distintas versiones del "framework", cada una con sus componentes y
ensamblados.
Puedo utilizar otros lenguajes con .NET?
Pues si, como hemos dicho antes el CLR, o el entorno de ejecucin comn admite por encima de l
cualquier tipo de lenguaje. Actualmente hay ms de lenguajes en los que podremos utilizar el
modelo de objetos de .NET
- VB .NET
- C#
- C ++
- ASP.NET
- Jscript.NET
- Perl
- Python
- Delphi
Bases de la POO
En esta introduccin general a .NET (este captulo puede ser un poco espeso por todos los
conceptos nuevos pero enseguida empezamos a trabajar con ejemplos) debemos comentar
algunos conceptos bsicos de esta tecnologa y que iremos ampliando a lo largo del curso. No van
a ser explicaciones tcnicas sino ms bien una toma de contacto de la filosofa .NET. Todo lo que
trataremos en .NET se basa en clases y objetos. Es un concepto muy sencillo pero que pudiera
desconcertar al principio
Veamos que son esos conceptos y la base de la programacin orientada a objetos.
LAS CLASES
Todo lo que tiene .NET Framework son clases. Una clase no es ni ms ni menos que cdigo para
crear objetos.
Cuando definimos una clase, realmente estamos definiendo dos cosas diferentes: los datos que
dicha clase puede manipular o contener y la forma de acceder a esos datos.
Por ejemplo, si tenemos una clase de tipo Cliente, por un lado tendremos los datos de dicho
cliente y por otro la forma de acceder o modificar esos datos. En el primer caso, los datos del
Cliente, como por ejemplo el nombre, domicilio etc., estarn representados por una serie de
campos o propiedades, mientras que la forma de modificar o acceder a esa informacin del
Cliente se har por medio de mtodos. Esas propiedades o caractersticas y las acciones a realizar
son las que definen a una clase.
Un coche tiene unas propiedades: color, marca, modelo, ... y unos mtodos para trabajar con l:
arrancar, frenar, cambiar de marcha. La definicin de estas partes es lo que llamamos clase. Los
antiguos programadores de VB son los que menos acostumbrados estn a trabajar con clases
porque se podan prescindir de ellas pero en VB.NET no. Por eso es una ventaja para los que
comenzis la programacin ya que los conceptos os quedarn ms claros sin tener que cambiar la
filosofa de cmo trabajaban las versiones anteriores.

LOS OBJETOS
Por un lado tenemos una clase que es la que define un "algo" con lo que podemos trabajar. Pero
para que podamos trabajar con ese "algo", tendremos que poder convertirlo en "algo tangible", es
decir, tendremos que tener la posibilidad de que exista. Aqu es cuando entran en juego los
objetos, ya que un objeto es una clase que tiene informacin real. Por fin podemos crear un coche
del cual ya tenemos su definicin en la clase Coche
Digamos que la clase es la "plantilla" a partir de la cual podemos crear un objeto en la memoria.
Por ejemplo, podemos tener varios objetos del tipo Cliente, uno por cada cliente que tengamos en
nuestra cartera de clientes, pero la clase slo ser una.
En nuestros formularios: tenemos 10 botones y ... han sido creados a partir de la clase "Botn".
Otro ejemplo es que tenemos una clase que se llama "Coches" donde describe que es y cmo
funciona un coche pues bien, podemos crear diferentes coches a partir de la clase "Coches", cada
uno puede tener sus propias propiedades: color, ... pero funcionan todos igual porque parten de la
misma plantilla o "clase".
Quedan claros estos dos conceptos? Vale, pues ahora slo comentar que existen objetos de ms
categora que otros y que esta relacin se llama jerarqua de objetos. Por ejemplo un objeto Coche
puede tener a su vez varios objetos ms pequeos: motor, carrocera, ...
En .NET tenemos varias clases principales y debajo de ellas todas las instrucciones del lenguaje.
Por ejemplo habr una clase para los formularios (ventanas de Windows) que a su vez tendrn
otras clases dentro: botones, textos, imgenes. Otra clase sera la coleccin de funciones
matemticas que podemos utilizar. Para hacernos una idea, esta es la jerarqua de objetos para
desarrollo en Web:

Con esto terminamos este pequea introduccin al mundo .NET. Veremos a lo largo del curso
ejemplos de todo lo que estemos aprendiendo, aplicando siempre tcnicas sencillas. En el
siguiente captulo empezaremos a conocer el IDE y a crear nuestras primeras aplicaciones que
funcionarn ya de verdad. As que nimo y seguir...
El IDE o Entorno Integrado de Desarrollo
Lo primero que tenemos que aprender antes de meternos de lleno conla programacin es
aprender a manejarnos con el entorno de desarrollo (IDE) de Visual Studio .NET. Como ves hemos
dicho de Visual Studio y no de Visual Basic. Como comentamos en el primer captulo Visual Studio
se trata de un nico entorno para todo lo referente al desarrollo con Microsoft y su .NET. Por
tanto, si adems de usar el VB.NET queremos pasar a otros lenguajes como el C# o ASP.NET, no
tendremos que utilizar otro programa. Incluso podremos trabajar con varios proyectos en el
mismo IDE aunque sean de lenguajes diferentes.
Lo primero que vamos a hacer es cargar el entorno de desarrollo del Visual Studio .NET, as que lo
volvemos a ejecutar y nos vamos a crear un nuevo proyecto de tipo "Aplicacin para Windows":

En el proyecto, se habr creado un formulario que nos mostrar de forma automtica. Si no se


mostrara nada y siguiera estando la pantalla de inicio... dale un respiro ya que seguramente lo
estar cargando... ya comentamos que es un entorno que consume muchos recursos y puede ser
lento en la carga de determinadas partes... en caso de que despus de un rato no lo mostrara
tampoco... fjate en el lado derecho de la pantalla, vers que hay un "panel" o ventana en la que se
indica el proyecto actual y se muestran los ficheros que lo componen. Ese panel es el "Explorador
de Soluciones":

Una vez cargado el formulario, la pantalla tendr un aspecto similar a este:

Donde distinguimos en la parte izquierda el cuadro de herramientas, en el centro el formulario


principal y en la parte derecha las ventanas de propiedades y el explorador de soluciones.

Cambiar propiedades del IDE


En un principio hemos visto el formulario en blanco. Los que vens de versiones anteriores echaris
en falta seguramente la cuadrcula que nos permita colocar los controles. Ahora el editor es
bastante cmodo a la hora de construir los formularios, pero para practicar, vamos activar esta
cuadrcula. Para mostrarla vamos a la pantalla de opciones en el men herramientas:

En esta pantalla configuraremos el funcionamiento general de nuestro entorno y del lenguaje


Visual Basic.NET:

Hemos cambiado la propiedad del modo de diseo a "SnapTOGrid". Pulsamos en aceptar y


volvemos al IDE. Para que esta opcin se haga efectiva debemos cerrar el formulario y volver a
abrirlo. Para cerrarlo, basta con pulsar en:

Lo volvemos a abrir en con el panel derecho del "explorador de soluciones", haciendo doble clic en
"Form1":

Al volver al formulario veremos que ahora tiene una cuadrcula que nos ayudar a la hora de
colocar los controles. En la ejecucin de la aplicacin son invisibles. Slo es una ayuda para poder
colocar bien alineados los controles:

Vamos a modificar ahora una propiedad de esta cuadrcula. Seleccionamos el formulario haciendo
clic en l y vamos a ver sus propiedades. En el panel de la derecha, junto al explorador de
soluciones, est la ventana de propiedades del elemento que actualmente est seleccionado, en
nuestro caso con las propiedades del formulario "Form1". Vamos a buscar el elemento GridSize
para poder cambiar el tamao de separacin.
Veremos que se muestran dos valores separados por punto y coma, pero tambin hay una cruz a
la izquierda de la palabra GridSize, si pulsamos en esa cruz, se mostrarn los tamaos a lo que se
refiere esos valores separados por punto y coma:

Nos posicionamos en cualquiera de ellos y asgnale el valor 4, de esta forma, tendremos un


formulario con una cuadrcula ms pequea, en la que ser ms fcil posicionar los controles que
queramos aadir al formulario en cuestin. Adems hemos visto debajo de las propiedades que
cuando seleccionamos una nos aparece una descripcin de ella: Gridsize, Determina el tamao de
la cuadrcula de posicin.
Lo que hemos modificado forma parte de las propiedades del formulario. En esta caso los
formularios tienen todas las propiedades que aparecen en esta ventana y que hacen referencia a
su aspecto y comportamiento, en nuestro caso hemos modificado la propiedad Gridsize para
cambiar la distancia entre puntos del formulario.

Despus de haber cambiado esos valores, ahora aparecen en la lista de propiedades en "negrita",
indicndonos de esta forma que son valores que nosotros hemos asignado. Tambin hemos
observado como ahora la cuadrcula tiene ms densidad de puntos.
El IDE de estas versiones de .NET es suficientemente amigable en la elaboracin de los formularios
que ya no es necesario este tipo de ayudas grficas. As que pero vamos a desactivarla otra vez
dejando la opcin de "SnapLines":

Cerramos el formulario y lo volvemos a abrir para que ya no nos muestre la cuadrcula que
acabamos de desactivar. Prueba ahora a colocar varios controles, vers como nos muestra unas
lneas que hacen de gua para dejar los controles alineados o a la misma distancia. Para colocarlos
los arrastraremos directamente de la barra de controles:

Lo mejor es que nos vayamos acostumbrando a la edicin sin la cuadrcula, es ms cmodo y


visualmente ms fcil que con la cuadrcula de puntos.
Insertar controles
Los controles son los elementos que insertamos dentro de un formulario y que nos va a permitir
interactuar entre el usuario y el cdigo. Controles son: botones, cuadros de texto, etiquetas,
cuadros desplegables, cuadrculas de datos, ... en definitiva todos y cada uno de los elementos que
vemos en los formularios de todas las aplicaciones. La lista de controles bsicos disponibles la
tenemos a la izquierda:

Para aadir controles al formulario utilizaremos esta barra, por ejemplo para aadir una etiqueta
(Label) y una caja de texto (TextBox), simplemente haremos doble-clic sobre esos elementos de la
barra de herramientas, o los arrastramos y se aadirn al formulario.

Tenemos entonces varias formas de aadir estos controles:


-

Haciendo doble clic sobre el icono del control. Se colocar un control en la parte izquierda
superior del formulario.
Haciendo clic sobre el icono del control y despus clic sobre el formulario. El control se
insertar en el punto que hemos indicado y se extender hacia la derecha y abajo segn su
tamao predeterminado
La tercera forma es la ms utilizada. Hacemos clic sobre el control y luego en el formulario.
Pero esta vez sin soltar el botn izquierdo, vamos dibujando con el ratn la posicin y
tamao del control.
Arrastrando desde la barra de controles.

Para nuestro ejemplo aadiremos un botn (Button) y lo situaremos debajo del cuadro de texto
(Textbox). Luego aadimos una etiqueta (Label) para que quede de esta forma:

Como vemos por defecto el IDE poner unos nombres genricos a los controles: label1, textbox1,
button1, es decir utiliza el tipo de control y lo va numerando: label1, label2, label3, ...
Todos los controles deben tener un nombre nico, as que hasta que se los asignemos, el IDE le
pone este genrico. En nuestros proyectos cambiaremos esos nombres de controles por otros
nombres ms descriptivos, por ejemplo: txt_nombre, txt_apellidos, txt_telefono en lugar de los
puestos por el IDE: textbox1, textbox2, textbox3, ...
Ahora vamos a cambiar el texto que contiene el botn "Button1". Para cambiarle este texto hay
que utilizar la ventana de propiedades, en esta ocasin el elemento que nos interesa de esa
ventana de propiedades es Text, escribimos en esta propiedad la palabra "Mostrar" y cuando
pulses "Intro" o el tabulador veremos que el texto del botn se ha actualizado:

En la versin anterior...
Para los usuarios de versiones anteriores de VB: La propiedad Caption no existe en ningn control,
ahora se llama Text. Por lo tanto hemos modificado la propiedad Text y no Caption en el botn

Hacemos lo mismo con la etiqueta. Recordemos que hay que seleccionarla primero haciendo clic
para que se muestren las propiedades de la etiqueta, escribimos "Nombre:" y pulsamos intro o el
tabulador:

Debemos fijarnos siempre en la parte superior de la ventana, para comprobar que pone el
nombre del control que estamos editando y de que tipo es:

En este caso es una etiqueta (label) que la ha creado a partir de la clase


"System.Windows.Forms.Label"
Al principio, y para asegurarnos de que vamos escribiendo bien estas propiedades nos fijaremos
bien que tenemos seleccionado el control adecuado. En la pantalla anterior podemos ver en el
ttulo superior el nombre del control: "Label1" as sabemos que estamos escribiendo la propiedad
en el control adecuado. Es normal al principio que escribamos o modifiquemos alguna propiedad y

no veamos el resultado. Esto es porque nos hemos equivocado y no estaba correctamente


seleccionado el control
Ahora vamos a escribir cdigo para que se ejecute cada vez que se haga clic en el botn que
hemos aadido. Para ello, selecciona el botn Mostrar y hacemos doble clic en l, se mostrar una
nueva ventana. En este caso ser la ventana de cdigo asociada con el formulario que tenemos en
nuestro proyecto. Nos mostrar:

Aqu empieza la programacin. Que nosotros pulsemos doble clic en el botn y que aparezca este
fragmento de cdigo significa lo siguiente. VB .NET interpreta que queremos poner cdigo para
realizar alguna accin cuando se haga clic sobre el botn, por lo tanto te muestra ya el
"procedimiento" o parte de cdigo que se va a ejecutar cuando suceda esto. A esta forma de
trabajar se le llama programacin orientada a eventos. Es decir, cuando se produzcan el evento de
pulsar el botn (clic) ejecutas este cdigo. Por lo tanto vemos que los controles adems de tener
propiedades (que modifican su aspecto) tambin atienden a una serie de eventos (clic, doble clic).
Tranquilos, estamos en el comienzo... Los eventos a los que atienden los controles los podemos
ver en la ventana de propiedades, seleccionando:

De momento aparenta ser un poco complejo pero veremos enseguida que es bastante ms
sencillo que lo que parece. Hay otra forma de acceder a los eventos de los controles y es esta: nos
vamos a la vista del cdigo del formulario pulsando en:

Llegaremos otra vez a la ventana del cdigo de antes. Hacemos clic en el desplegable de arriba a la
izquierda y veremos:

En esta lista podemos ver los objetos que hemos aadido en nuestro formulario (botn, etiqueta y
cuadro de texto). Seleccionamos el botn "Button1" y nos fijamos ahora en el desplegable de la
derecha:

Esta lista tiene todos los eventos a los que puede atender nuestro objeto, en este caso el botn.
Por tanto cuando necesitemos acceder al "evento tal" del objeto iremos a la vista de cdigo,
seleccionaremos el objeto en la lista de la izquierda y el evento en la derecha.
Volvemos a la pantalla del cdigo para el evento clic del botn:

Esta pantalla nos muestra mucha ms informacin de lo que parece en principio. Nos est
indicando en la parte superior que estamos trabajando con "Form1.vb". Debajo nos indica a la
izquierda que estamos con el control llamado "Button1" y a la derecha trabajando con el evento
clic. Pero no le hemos dado doble clic para que aparezca esto? no sera ms coherente que nos
presentase el evento "doble clic" en lugar del "clic"?. Pues siendo estrictos es cierto, pero como la
propiedad ms importante de los botones es el "clic", ser sta la que nos mostrar de forma
predeterminada, (adems no existe la accin del doble clic en los botones).
Sigamos con la pantalla... y este fragmento de cdigo:
Private Sub Button1_Click(sender As Object, e As EventArgs)
Handles Button1.Click
End Sub

Recordamos que lo que queremos hacer ahora es escribir cdigo para que se ejecute hacer clic en
el botn, lo cual producir el evento clic asociado con dicho botn. Este evento se disparar al
hacer clic con el ratn, o bien porque se pulse la tecla intro o la barra espaciadora cuando el botn
tenga el enfoque.
Nota: El foco o enfoque es cuando un determinado control est seleccionado. Cuando pulsamos la
tecla tabulador para pasar a otro control lo que estn haciendo es activar el enfoque (getfocus). El
anterior control lgicamente deja de estar seleccionado, luego, pierde el enfoque (lostfocus).
La nomenclatura, (forma de llamar a los elementos), para los eventos de Visual Basic siguen el
siguiente esquema:
[nombre del control] [guin bajo] [nombre del evento]
button1_click ' ejecuta el cdigo cuando se hace clic en el elemento button1
Pero esto slo es una sugerencia que VB.Net nos hace, en las versiones anteriores no era una
sugerencia, era una imposicin. Podemos dejar el nombre que nos sugiere o podemos poner el
nombre que nosotros queramos. Lo importante aqu es la parte final de la lnea de declaracin del
procedimiento: Handles Button1.Click, con esto es con lo que el compilador/intrprete de VB sabe
que este procedimiento (fragmento de programa) es un evento y que dicho evento es el evento
clic del objeto Button1. (Alivio para los programadores de Visual Basic 6 que se habrn
escandalizado al ver esta declaracin)
Un detalle: el nombre Button1 es porque hemos dejado el nombre que por defecto el IDE de
Visual Studio asigna a los controles que se aaden a los formularios. Si queremos que se llame de
otra forma, simplemente mostramos el formulario, seleccionamos el control al que quieres
cambiarle el nombre, seleccionamos la propiedad Name en la ventana de propiedades y
cambiamos el nombre que indica por defecto por el que nosotros queramos... o casi, ya que para
los nombres de los controles, as como para otras cosas que utilicemos en Visual Basic hay que
seguir ciertas normas:
-

El nombre debe empezar por una letra o un guin bajo.


El nombre slo puede contener letras, nmeros y el guin bajo.
Es buena tcnica poner las iniciales del tipo de control que es: lb_nombre (label de un
nombre), btn_aceptar (botn de aceptar), chk_estado (casilla de verificacin de estado),
txt_nombre (cuadro de texto)

As que, si queremos cambiar el nombre al evento que se produce cuando se hace clic en el botn,
escribiremos ese nombre despus de Private Sub, aunque no es necesario cambiar el nombre del
evento, ya que, al menos por ahora, nos sirve tal y como est.
Lo que si importa es lo que escribamos cuando ese evento se produzca, en este caso vamos a
hacer que se muestre un cuadro de dilogo mostrndonos el nombre que previamente hemos
escrito en el cuadro de texto.
Escribimos el siguiente cdigo en el hueco dejado por Visual Basic entre las lneas que hay entre
Private Sub... y End Sub

Antes de explicar que estamos haciendo, pulsamos F5 para que se ejecute el cdigo que hemos
escrito o pulsa en el botn "play" que est en la barra de botones.

Cuando aparezca el formulario, probemos a escribir algo en el cuadro de texto y pulsaremos en el


botn "Mostrar". Veremos que se muestra un cuadro de dilogo con el texto "Hola" y a
continuacin lo que hayamos escrito en el cuadro de texto (TextBox):

Ya tenemos otra aplicacin Windows funcionando creada con Visual Basic .NET. Para terminar
pulsamos en la "x" del formulario principal o en el botn de terminar de la barra de tareas

.
Ahora vamos a aadir otro botn que llamaremos cmd_cerrar con el texto "Cerrar". (el nombre es
por "cmd" de comando y Cerrar de la accin: cmd_cerrar). Para esto primero vamos el IDE para
aadir otro botn. Ahora cambiaremos dos propiedades: Name para ponerle cmd_cerrar y Text
para ponerle Cerrar:
Nota: Si estamos con el editor de cdigo y queremos pasar al diseador del formulario haremos
doble clic en el formulario en la parte derecha en el "Explorador de soluciones".
Seguimos con el ejemplo, pintamos un nuevo botn y cambiamos las dos propiedades comentadas
anteriormente:

Obviamente al ponerle esta vez un nombre al control, en lugar de llamarse Button2 se llamar
como le hemos indicado cmd_cerrar y as lo veremos en el cdigo. Pulsamos doble clic en l para
escribir el cdigo que queremos que ejecute:

y escribimos la instruccin
Me.Close()
Nota: Para buscar ms fcilmente las propiedades en la ventana de propiedades, puedes hacer
que se muestren por orden alfabtico, simplemente pulsando en el botn AZ:

Pulsamos F5 para ejecutar el programa y la diferencia respecto al programa anterior es que ahora
al pulsar este botn el programa termina, cierra el formulario y nos devuelve el entorno de
desarrollo. De esta forma el programa est un poco ms completo.
Ahora veamos con detalle el cdigo que hemos usado en los dos eventos (clic del botn Mostrar y
clic del botn Cerrar):
MsgBox("Hola " & TextBox1.Text)
MsgBox que es una funcin o mtodo, (realmente es una clase, como casi todo en .NET), cuya
tarea es mostrar en un cuadro de dilogo lo que le indiquemos en el primer parmetro, tambin
tiene otros parmetros opciones, pero por ahora usemos slo el primero que es obligatorio.
Tenemos por un lado una instruccin MsgBox que escribe un texto en pantalla y que admite
parmetros. Estos parmetros le proporcionan los datos de que debe hacer, en este caso le
proporcionamos un texto para que lo escriba: Msgbox ("Hola"). Los parmetros opcionales sirven
para aadirle ms funcionalidad o simplemente para que modifique su aspecto... en nuestro
ejemplo podra tener un ttulo el cuadro de texto o el mensaje podra ir acompaado de un icono.
En Visual Basic.NET todos los procedimientos que reciban parmetros deben usarse con
parntesis. Esto no era as en las versiones anteriores de VB, por tanto, para indicarle que es lo
que queremos que muestre, tendremos que hacerlo dentro de los parntesis, en este caso,
queremos que se muestre la palabra "Hola " y lo que haya en la caja de texto.
La palabra "Hola" (seguida de un espacio) es una constante. Es decir, siempre ser la palabra
"Hola" seguida de un espacio, una vez que el programa est compilado (listo para ejecutarse por

otros usuarios), siempre ser lo mismo, por eso se llama constante ya que no cambia. En este caso
es una constante alfanumrica o de cadena, y que, como todos los literales o cadenas que
queramos usar en nuestros proyectos, deben ir dentro de comillas dobles.
Por otro lado "TextBox1.Text" representa el texto que hay en el cuadro de texto y por tanto
devolver lo que en l hayamos escrito. Estamos haciendo referencia a la propiedad "Text" de un
control llamado "TextBox1". En nuestro ejemplo pintamos un cuadro de texto y VB .NET le asign
el nombre genrico de TextBox1, si modificamos su propiedad Text (recordemos el botn Cerrar o
la etiqueta por ejemplo) cambiar el contenido de texto que contiene.
Por ltimo, para que esas dos cadenas de caracteres, la constante "Hola" y el contenido de la
propiedad "Text" del control "TextBox1", se puedan unir para usarla como una sola cadena,
utilizaremos el signo & (ampersand) que sirve para concatenar cadenas de caracteres y hacer que
Visual Basic entienda que es una sola.
Por tanto, si la propiedad "Text" del control "TextBox1" contena la cadena "Jose", al unir las dos
cadenas resultar una nueva con el siguiente contenido: "Hola Jose" que no es ni ms ni menos
que la "suma" de las dos cadenas que tenamos.
En el mtodo del evento "clic" del botn cerrar hemos escrito: Me.Close(). Me representa al
objeto o clase "Form1" (el formulario).El mtodo "Close" es una accin (como todos los mtodos)
cuyo resultado es cerrar el formulario. La sintaxis para llamar a un mtodo es sencilla:
elemento.accin
MS SOBRE EL CDIGO VB .NET
Volvamos a revisar algunos elementos ms tericos del cdigo que tenemos en pantalla, vamos
explicar el porqu del resto de las lneas de cdigo. As iremos conociendo trminos que luego en
temas posteriores acabaremos de encajar y entender. Partimos de nuestro cdigo de ejemplo:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MsgBox("Hola " & TextBox1.Text)
End Sub
End Class
ANLISIS DEL CDIGO FUENTE DEL FORMULARIO
La clase formulario
Todos los formularios son objetos y el cdigo de un objeto se escribe con una clase. Recordemos
un poco estos trminos, un objeto es cada uno de los elementos de programacin de que
disponemos: formularios, botones, bases de datos, ... y una clase es la plantilla para crear ese
elemento. Es decir con la clase "botn" podemos crear y manipular botones.
Como el formulario es una clase, y debemos crear este formulario hay que utilizar las palabras
clave "Class" y "End Class" y heredar esta clase de la clase "Form". Tranquilo... esto significa que
tenemos que crear un formulario nuevo con el nombre por defecto "Form1". Veamos ahora el
cdigo:

Public Class Form1


...
...
End Class
Que significa crea un formulario llamado Form1 y si vemos el editor y marcamos el formulario:

Form1 es un objeto creado a partir de la clase "System.Windows.Forms.Form"


Nota: El "spacename" ms importante dijimos en el primer captulo que era System. De ste
parten otros agrupados segn sus acciones: acceso a bases de datos: System.Data, para dibujar:
System.Drawing, para trabajar con los elementos de Windows: System.Windows y de ah uno de
los componentes de los entornos que son los formularios: System.Windows.Forms.
Este spacename contiene todos los elementos de los formularios: cuadros de texto, botones, lista,
.... y obviamente el propio formulario. Recordemos como antes vimos que el botn perteneca a la
clase "Button" que pertenece al mismo espacio de nombres que el formulario:

Pues si lo habis entendido hemos avanzado ms de lo que parece, nimo. Sigamos con el cdigo
Cdigo oculto del programa
Vamos a ver la carpeta donde tenemos almacenado nuestra aplicacin Visual Basic donde nos
encontraremos con estos archivos:

Aunque en el captulo anterior dijimos que solo existan ficheros con extensin .vb no es del todo
cierto, internamente tiene algunos ficheros ms. Vamos a leer uno de ellos para comprender las
tripas de nuestro programa. Abre con el editor de textos el fichero "Form1.Designer.vb". El cdigo
que vers aqu antes estaba dentro de los mismos ficheros .vb. Pero a partir de la versin 2.005 se
separaron y estn ahora en ficheros con esta extensin: nombre_del_formulario.Designer.VB.
Nota: Si queremos abrir un proyecto en nuestro IDE tendremos que buscar los ficheros con
extensin "sln" de solucin o "vbproj" de proyecto de VB.NET. En la pantalla anterior vemos el
proyecto llamado "WindowsApplication3.vbproj" si le damos doble clic se abrir el entorno de
desarrollo con el proyecto. Ojo porque si pulsamos en los otros ficheros se abrirn de forma

individual y no como parte del proyecto, as que ten cuidado si los abres desde el explorador de
archivos. Si lo haces desde el IDE no hay problemas ya que por defecto intentar abrir ficheros
de tipo:

Volvamos con nuestros ficheros de extensin .VB. stos contienen todo lo necesario para crear la
aplicacin y los controles que hemos pintado. En lugar de abrirlo con el bloc de notas, vamos a
indicar en el IDE que nos muestre todos estos ficheros ocultos:

Mostrar ahora un rbol de carpetas ms extenso:

Si expandimos el formulario "Form1.vb" podemos ver su diseador, es decir, el cdigo necesario


para crearlo. Hacemos doble clic sobre este fichero para ver su contenido y nos fijamos en en las
tres primeras lneas:
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form

Por un lado tenemos en la segunda lnea el nombre del formulario "form1" y debajo le indica que
Inherits System.Windows.Forms.Form

Que significa "hereda" de la clase System.Windows.Forms.Form. Por tanto ya sabe cmo debe
crear el objeto llamado "Form1". Si bajamos un poco veremos un cdigo parecido a:
Me.Label1 = New System.Windows.Forms.Label
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.Button1 = New System.Windows.Forms.Button
Me.cmd_cerrar = New System.Windows.Forms.Button

"Me" es una palabra clave que indica que son objetos del propio formulario. Por tanto est
diciendo que "Me.Label1", es decir la etiqueta "Label1" del formulario "Form1" (Me) se va a crear
a partir de la clase "New System.Windows.Forms.Label". A esto se le llama el mtodo constructor
Todas las clases deben tener un mtodo constructor que es el primero que se ejecuta cuando es
instanciado un objeto de la clase y dentro se escribe el cdigo para inicializar el objeto. Instanciar
es una palabra que hace referencia a la creacin del objeto.
Ahora veremos qu son estos trminos. El mtodo constructor es la propia accin de crear el
objeto a partir de su clase. Es decir creamos el coche (objeto) a partir de su definicin (clase). El
termino instanciado equivale a hacer referencia al objeto. Resumiendo, decimos que un objeto es
instanciado cuando hacemos uso de l, por lo tanto, debe crearse si no lo est.
El mtodo constructor para una clase en Vb.NET es New(), por tanto la forma de crear un objeto a
partir de una clase es utilizar el mtodo New.
Puesto que nuestra clase Form1 (formulario del programa de ejemplo) hereda de la clase Form, en
el mtodo constructor de Form1 llamamos al mtodo constructor de la clase base.
Formulario y creacin de controles
Repetimos un poco la creacin de los controles . Aqu tenemos los controles que insertamos:
botones, cuadro de texto y etiqueta, veamos como lo gestiona esta parte del cdigo.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Label1 = New System.Windows.Forms.Label
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.Button1 = New System.Windows.Forms.Button
Me.cmd_cerrar = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(16, 32)
Me.Label1.Name = "Label1"
Me.Label1.TabIndex = 0
Me.Label1.Text = "Nombre"

Si nos fijamos, la primera parte crea los controles que vamos a utilizar en el formulario. Y los crea a
partir de su clase, por ejemplo: Me.Label1 = New System.Windows.Forms.Label. Sabemos que la
palabra clave ME hace referencia al propio formulario por tanto crea en este formulario un
elemento que se va a llamar Label1 y lo crea a partir de la plantilla o clase
System.Windows.Forms.Label. Nos fijamos en el ltimo control que creamos "cmd_cerrar", puesto
que le pusimos ese nombre a la hora de crear el formulario, para crearlo Vb.NET debe hacer: crea
en este formulario un control que se llame "cmd_cerrar" y lo va a crear a partir de la plantilla
System.Windows.Forms.Button. Por lo tanto ser un botn.
Hasta ahora bastante lgico no? Vale una vez creados tenemos que ponerles todas las
propiedades que le ha asignado el programador: color, etiqueta de texto, tipo de letra... de eso se

encargan las siguientes instrucciones por ejemplo Me.Label1.Text = "Nombre" le asigna la cadena
de texto "Nombre" a una etiqueta que se llama Label1, creada arriba.
Como hemos dicho antes dentro del cdigo de InitializeComponent la palabra clave Me nos
permite referirnos a cualquier elemento del formulario actual desde dentro del propio formulario.
Para terminar decir que las instrucciones Me.SuspendLayout() y Me.ResumeLayout(False) que
estn entre la asignacin de las propiedades de los controles lo que permiten es detener por un
momento la visualizacin de los elementos o controles en pantalla para evitar efectos extraos en
la visualizacin. Digamos que se pintan ocultos con todas sus propiedades y luego se hacen todos
visibles a la vez, as evitamos problemas en su visualizacin.
Todo esto es una toma de contacto con toda la nomenclatura. Si repasamos esto dentro de unos
captulos lo entenders perfectamente y es muy interesante porque es la forma de crear el propio
formulario.
FINALIZAR EL FORMULARIO Y LIBERAR RECURSOS
Cuando ya no necesitemos el formulario debemos liberar sus recursos (un eterno problema en
Windows, los programas cogen recursos y luego no los liberan correctamente). El mtodo
Dispose() indica a VB.NET que el formulario ya no se va a utilizar y que todos los recursos que ha
estado usando quedan a disposicin del entorno, para que el recolector de basura de la
plataforma los recupere cuando considere necesario. Esto se hace con el formulario y sus
elementos:
'Form reemplaza a Dispose para limpiar la lista de componentes.
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
Y de momento es suficiente. Slo queramos ver que podemos declarar objetos de un
determinado tipo, luego crearlos y por fin despus de utilizarlos, eliminarlos. Tambin hemos visto
que ese cdigo oculto contiene toda la informacin necesaria para crear el formulario con sus
controles: botones, etiquetas, ... y con todas las propiedades de stos.
Ahora vamos a grabar el proyecto para ver de qu partes se compone...
FICHEROS DE UN PROYECTO
Al crear un proyecto ste crea unas carpeta con varios ficheros que todos conforman el proyecto.
En nuestro ejemplo:

Los programadores de versiones anteriores habris observado que no se parece prcticamente en


nada en esta versin .NET. Veamos un poco los ficheros que lo componen segn su extensin:
-

VB. Es el cdigo fuente Visual Basic. A diferencia de Visual Basic 6 estos ficheros pueden
contener mdulos, mdulos de clase, formularios, ... es decir ya no se distinguen entre
.bas .fmr sino que todos son .vb
VBPROJ. Fichero del proyecto. Tiene toda la informacin de los elementos que forman
parte del proyecto
SLN. solucin. Una solucin es el medio que utiliza .NET para agrupar varios proyectos.
Estos pueden estar escritos en el mismo lenguaje o distintos (bastante tenemos con VB
como para escribir fragmentos en distintos lenguajes no?).
VBPROJ.USER. Informacin sobre las opciones de usuario de proyecto.
RESX. Plantilla de recursos en formato XML
EXE. Aplicacin ejecutable
PDB. Informacin sobre la depuracin de la aplicacin
Designer.vb. Asociado a cada formulario contiene el cdigo necesario para la generacin
de los formularios.

En la carpeta "bin" del proyecto se genera el fichero ejecutable que es lo nico que necesitamos
para ejecutar nuestro programa en otros equipos.
Dentro de la carpeta "bin" y "obj" hay dos carpetas ms: "debug" y "release". Seguramente
todava tienes en tu equipo slo la carpeta "debug". Esto es porque todava no hemos generado el
programa en su versin final (release), sino que lo hemos hecho en el modo de depuracin
(debug). En ste ltimo modo, el IDE introduce multitud de cdigo de control en el programa para
que podamos hacer una ejecucin controlada y as poder depurar minuciosamente el
funcionamiento.
Para activar que el programa se ejecute en un modo y otro, utilizaremos la opcin:

Si lo ponemos en modo "release" para generar el programa final, veremos como si nos crea ahora
las carpetas adecuadas. Una vez probado, dejaremos la opcin de depuracin "Debug".
Y con esto finalizamos esta pequea introduccin a una aplicacin Windows realizada con .NET.
Esta explicacin nos ha servido para tener una primera toma de contacto seria con la base de .Net
Framework que son las clases y su uso. De hecho, una vez entendido es algo realmente sencillo y
fcil de utilizar, as que esto nos ha acercado un poco a su filosofa. Pasemos ahora a conocer y
practicar un poco con el IDE y los formularios.

EL IDE. FORMULARIOS
Vamos a seguir practicando con el entorno de desarrollo integrado. Por ejemplo vamos a hacer
que los controles que tengamos en un formulario se adapten de forma automtica al nuevo
tamao de la ventana as como a los distintos tamaos de fuentes. No todo el mundo usa la misma
resolucin de pantalla que nosotros en la edicin del programa ni los mismos tamaos de letras.
Ya habris visto en algunas aplicaciones cmo al maximizar la ventana se descolocan los controles
o simplemente se quedan en una esquina de la ventana. Veamos como hacer solucionar esto.
Redimensionar los controles en un formulario
Si queremos realizar este ajuste de los controles de un formulario con las versiones anteriores de
Visual Basic tenamos muchas dificultades por las limitaciones que tena, era un trabajo duro y
bastante engorroso, que requera bastante cdigo y casi nunca se lograba el objetivo.
Veamos un caso tpico: el tamao de una ventana de Windows, (que al fin y al cabo es un
formulario), se puede hacer redimensionable, es decir que el usuario puede cambiar de tamao.
Lo normal es que los controles que dicho formulario contiene se adapten al nuevo tamao de la
ventana, con la idea de que no queden huecos vacos al cambiar el tamao de la ventana.
Por ejemplo, si tenemos esta ventana (o formulario):

y la agrandamos, por ejemplo para que tenga este otro aspecto:

Comprobaremos que la ventana se ha agrandado, pero los controles que hay en ella siguen
teniendo el mismo tamao y la misma posicin que en la ventana anterior, es decir, que cuando se
dise el formulario.
Pues bien, la idea de lo que queremos hacer aqu es que al cambiar el tamao de la ventana se
ajusten los controles al nuevo tamao, para que tuviesen este otro aspecto:

Para que esto sea posible de forma automtica, hay que hacer unas cuantas asignaciones a los
controles, de forma que podamos indicarle qu tienen que hacer cuando el tamao de la ventana
vare. En este ejemplo, lo correcto sera que:
-

La caja de texto superior se agrandase hacia el lado derecho.


El botn Aadir se moviese hacia el extremo derecho del formulario.
La lista se ajustara al ancho y tambin al alto de la ventana.

Todo esto lo podemos hacer en tiempo de diseo, es decir cuando tenemos el formulario en el
entorno integrado o bien lo podemos codificar dentro del propio formulario. Dnde hacerlo queda
a tu criterio, veamos cmo hacerlos en los dos casos y queda a tu eleccin cual de los dos
mtodos quieres utilizar.
Antes de empezar vamos a crear un nuevo proyecto. Creamos un proyecto del tipo Windows,
(aplicacin Windows o Windows Application), y le ponemos como nombre WinApp3.
Aadimos una etiqueta (Label), un cuadro de texto (TextBox), un botn (Button) y un cuadro de
lista (ListBox). Dejamos los nombres que el IDE ha puesto, salvo para el botn, el cual se llamar
cmdAdd. Colcalos como hemos visto en la figura de arriba en el primer caso:

Ejemplo 1. Utilizando el IDE


Comenzamos: selecciona el cuadro de texto (TextBox1) y en la ventana de propiedades, selecciona
Anchor, vers que por defecto estarn los valores Left y Top, esto quiere decir que la caja de
textos estar "anclada" a la izquierda y arriba, pero ahora vamos a seleccionar tambin la derecha.
Cuando pulses en la lista desplegable vers que se muestra una imagen con cuatro lneas:

Inicialmente slo estaban marcadas la superior y la izquierda con color ms oscuro. Pulsamos
ahora la lnea de la derecha, para que se ponga gris, de esta forma estaremos indicndole que
tambin se "ancle" a la derecha.
Vamos a comprobar que esto funciona... Pulsamos en el botn de ejecucin o en la tecla F5,
cuando tengamos el formulario en ejecucin, ampliamos el tamao de la ventana y podremos ver
lo siguiente:

Perfecto, el cuadro de texto se ha adaptado al nuevo tamao. Ahora encojemos la ventana e


incluso hacemos que no se vea el botn, podremos comprobar que el cuadro de texto sigue
estando proporcionalmente igual de separado de los extremos superior, derecho e izquierdo y se
adapta al tamao de la ventana.
Incluso si intentamos hacer la ventana muy pequea, el ancho se quedar justo en la parte
izquierda de la caja de texto, con el alto podemos hacer que casi desaparezca, (salvo el ttulo de la
ventana, la barra de arriba, que se mantiene).
Ahora vamos a "anclar" el botn. Seleccionamos el botn y en la ventana de propiedades
selecciona la propiedad "Anchor". En este caso, lo que nos interesa es que el botn se desplace a
la derecha, pero que no se haga ms grande. Para ello, debes seleccionar las lneas de la derecha y
la de arriba.
Es decir: nclate en la parte de arriba y en la derecha, de forma que si cambiamos el tamao del
formulario, el botn se desplazar a la derecha o a la izquierda, pero no cambiar de tamao,
como le ocurre al cuadro de texto:

Si pulsamos F5 veremos que el botn llegar casi a tocar el lado izquierdo del formulario y all se
quedar, no permitiendo que se haga ms pequeo.
Por ltimo vamos a anclar el cuadro de lista... en este caso debe hacerse grande tanto hacia la
derecha como hacia la izquierda e incluso cuando se estira el formulario desde la parte inferior,
pero en la parte superior debe mantenerse en la misma posicin. Simplemente debemos marcar
las cuatro posiciones y har que se ajuste siempre en la parte inferior y derecha:

Vamos a complicar un poco ms la cosa y vamos a aadirle otro botn. En este caso, el botn
estar en la parte inferior derecha del formulario, ser el botn cerrar y al pulsarlo hay que cerrar
el formulario.

Utilizaremos el mtodo "close" del formulario en el evento clic del botn. Es decir Me.Close en el
evento Clic de botn, que vamos a llamar cmdCerrar. Como decamos antes, este botn se debera
anclar en la parte inferior derecha, por tanto los valores que hay que asignar en Anchor son
precisamente esos: Right y Botton (derecha y abajo).
Como habrs notado, con el Label1 no hay que hacer nada, ya que por defecto el tamao se ajusta
por la derecha y por abajo, por tanto se quedar en la misma posicin... aunque realmente est
anclada arriba y a la izquierda, que son los valores por defecto de la propiedad Anchor, por eso no
es necesario asignarle nada. Practica tu para resolverlo y luego comprubalo con el siguiente
vdeo.
Los programadores de Visual Basic 6 vern que este entorno ha mejorado considerablemente y
que merece la pena este reciclaje. El mismo cdigo para hacer el caso anterior era realmente
complicado y laborioso. Ahora vamos a ver cmo hacerlo mediante cdigo. Siendo tan sencillo de
forma grfica... para que complicarnos la vida hacindolo por cdigo? La respuesta es sencilla:
para practicar!. La mejor forma de aprender es practicando as que veremos como utilizar estas
propiedades desde el cdigo as aprenderemos ms cosas.
Ejemplo 2. Por cdigo
Volvamos a nuestro IDE y hacemos doble clic en el formulario, dentro de l. Ten cuidado en no
hacerlo en algunos de los controles (botones, cuadro de lista, ..) debe ser en el formulario, se debe
mostrar el evento Form_Load:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


End Sub

Este cdigo es el que se va a ejecutar cuando se cargue el formulario. Vimos cuando hicimos doble
clic en el botn que nos presentaba el cdigo para ese evento. Si lo hacemos en el formulario se
presenta el cdigo que ejecutar al cargar (Load) el formulario Form1: Form1.Load. Adems
aparecen una serie de parmetros de entrada, que ya aparecan antes (sender AsObject, e As
EventArgs) y que ya veremos ms adelante. Esto se ejecuta pues cuando el formulario "se carga"
en la memoria, justo antes de mostrarse, por tanto aqu es un buen sitio para hacer algunas
"inicializaciones" o asignaciones que nuestro formulario necesite. De hecho es muy utilizado para
podemos limpiar el contenido de la lista, el del cuadro de texto, etc. e incluso hacer las
asignaciones para que los controles se queden "anclados" en la posicin que nosotros le
indiquemos.
Vamos a ver primero cmo se "declara" este evento, aunque el VB lo hace automticamente por
nosotros, es conveniente verlo para ir aclarando conceptos... que tal vez ahora no necesites, pero
en un futuro casi seguro que te hubiese gustado haberlo sabido.
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.TextBox1.Text = ""
Me.ListBox1.Items.Clear()
End Sub

Lo primero que hay que entender es que la palabra "Handles" es la palabra que le indica al
compilador de Visual Basic .NET qu evento es el que "manipula" o maneja este procedimiento.
Esto, (la declaracin del Sub), se encarga de manejar el evento Load del objeto MyBase.
Resumiendo: es el cdigo que se va a ejecutar cuando (handles) se inicie el formulario
(mybase.load).
El objeto "Mybase" se refiere al objeto base del que se deriva el formulario, recuerda que en .NET
todo est basado en objetos y en programacin orientada a objetos y todo objeto se deriva de un
objeto bsico o que est ms bajo en la escala de las clases... es decir, un formulario se basa en la
clase System.Windows.Forms.Form y a esa clase es a la que hace referencia el objeto MyBase,
mientras que "Me" se refiere a la clase actual, la que se ha derivado de dicha clase Form o por
extensin a cualquier clase, como veremos en futuras ocasiones. Tranquilo, veremos como ms
adelante entenders esto mejor...
Veamos ahora el cdigo para que los controles se anclen al formulario de forma que se adapten al
nuevo tamao del mismo:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.TextBox1.Text = ""
Me.ListBox1.Items.Clear()
' Asignar los valores para "anclar" los controles al formulario
' El TextBox1 se anclar a Arriba, Izquierda y Derecha
TextBox1.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or AnchorStyles.Right
' El botn Aadir lo har Arriba y a la derecha:
cmd_add.Anchor = AnchorStyles.Top Or AnchorStyles.Right
' El listbox lo har en los cuatro vrtices:
ListBox1.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or _
AnchorStyles.Right Or AnchorStyles.Bottom
' El botn cerrar slo lo har a la derecha y abajo
cmd_cerrar.Anchor = AnchorStyles.Right Or AnchorStyles.Bottom
End Sub

Cuando se inicie el formulario se realizarn las siguientes operaciones: limpiamos el contenido del
cuadro de texto, simplemente asignndole una cadena vaca a la propiedad que almacena el texto
que se escribe en pantalla Text: Me.Textbox1.Text="". Muchas veces los objetos se leen al revs
para interpretarlos mejor en este caso sera: asignamos una cadena vaca a la propiedad Text del
cuadro de texto llamado "Textbox1" del formulario actual "Me".
"Listbox" es un cuadro de lista, es decir es una lista de elementos. Inicialmente cuando se ejecute
el programa quiero borrar todos los elementos as que los borro llamando al mtodo "Clear" de la
coleccin de elementos, as la dejo en blanco (ya la veremos con ms detalle). El resto del cdigo
asigna a la propiedad Anchor (anclaje) los valores que queremos y que luego condicionarn su
funcionamiento. Por ejemplo .

TextBox1.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or AnchorStyles.Right


Har que el cuadro de texto se ancle arriba a la izquierda y a la derecha. Los "Or" que se estn
utilizando sirven para "sumar" y el resultado sera el mismo que si usramos el signo de suma,
pero la razn de usar "Or" es porque lo que queremos hacer es una suma de bits... Realmente da
lo mismo usar la suma que "Or" en este caso, pero dejemos el "Or" que es lo apropiado ya que no
estamos sumando nmeros sino concatenando propiedades.
El efecto es el mismo que en tiempo de diseo. Pero de esta forma sabemos como modificar el
comportamiento del anclaje de los controles en la ejecucin del programa. Por ejemplo, en
algunas ocasiones has viso un formulario que tiene un botn de "mas informacin". Al pulsarle la
ventana o formulario se ampla poniendo ms informacin en pantalla: se han modificado la
colocacin y tamao de algunos de los controles del formulario en tiempo de ejecucin.
REDIMENSIONAR EL TIPO DE LETRA EN UN FORMULARIO
Sigamos ajustando nuestro formulario. Esta vez que los controles se adapten tambin a otros
tamaos de fuentes, no a los que nosotros tenemos en nuestro equipo... ya que hay gente que por
necesidades tienen que poner tamaos de fuentes ms grandes e incluso ms pequeas... que
tambin hay quin tiene un monitor de 19 o 21 pulgadas y lo mismo tienen que usar letras de
tamaos ms pequeos...
La propiedad que hace eso posible es AutoScaleMode, esta propiedad slo est disponible en los
formularios y por defecto tiene el valor True (verdadero), por tanto los formularios, sin necesidad
de que hagamos nada, se autoajustarn al tamao de las fuentes.
Otro tema interesante que tienen los formularios es la propiedad AutoScroll. Si asignamos el valor
True (verdadero) a esta propiedad, hacemos que cuando el formulario se haga muy pequeo o
muy estrecho, se muestren unas barras de desplazamiento (scrolls) para que pulsando en ellas
podamos ver el contenido del mismo.

Por ejemplo si no hubisemos "anclado" nuestros controles, al hacer el formulario ms estrecho


se mostraran unas barras de desplazamiento para que podamos ver los controles que estn
contenidos en el formulario como en esta figura:

Sigamos escribiendo algunos ejemplos de cdigo para seguir familiarizndonos con el IDE de .NET.
Queremos hacer lo siguiente en nuestro programa:
1. Al pulsar en el botn Aadir, se aadir a la lista lo que hayamos escrito en la caja de textos.
2. Al pulsar Intro ser como si hubisemos pulsado en el botn Aadir.
3. Al pulsar Esc es como si hubisemos pulsado en el botn Cerrar.
4. Al pulsar en uno de los elementos de la lista, ste se mostrar en la caja de textos.
5. Al seleccionar un elemento de la lista y pulsar la tecla Supr (o Del si el teclado est en ingls),
dicho elemento se borrar de la lista, pero se quedar en la caja de textos, ya que al seleccionarlo
para poder pulsar la tecla suprimir se habr mostrado...
Veamos cmo hacer esto...
Lo de pulsar en Aadir y hacer algo, est claro: simplemente ponemos el cdigo que necesitemos
en el evento "clic" del botn cmdAdd. Para que nos muestre ese evento, simplemente haremos
doble-clic en el botn y VB nos mostrar el evento "amdAdd.Click" donde aadiremos el cdigo:
Private Sub cmdAdd_Click(sender As Object, e As EventArgs) Handles cmdAdd.Click
ListBox1.Items.Add(TextBox1.Text)
End Sub

Veamos que hace este cdigo en ejecucin:

Veamos que hay en esta instruccin del procedimiento que se va a ejecutar cuando se haga clic
(evento clic) del botn. Antes, recordemos el cdigo que vimos en el evento Form_Load, tenamos:
Me.ListBox1.Items.Clear()
-

Me hace referencia a la clase actual, es decir al formulario.


Items son los elementos que tiene el objeto ListBox
Clear es un mtodo de Items que se encarga de limpiar los elementos de la lista. Es decir,
los borra.

Por tanto esa lnea lo que hace es borrar los elementos del listbox. Veamos si lo leemos de
derecha: borra (clear) los elementos (items) del cuadro de lista (listbox1) del formulario actual
(me) -> Me.listbox1.Items.Clear ()
Ahora, en el evento clic del botn, lo que necesitamos no es borrarlos, sino aadir nuevos
elementos a la lista. Como ya sabemos que "Items" es el contenedor donde se guardan los
elementos de la lista, lo nico que tenemos que saber es cmo aadir nuevos elementos a las lista.
La respuesta es mediante la utilizacin del mtodo "Add" que aade elementos a la lista de un
"ListBox".
Nota: Por ahora estamos viendo algunos elementos de los controles: propiedades, mtodos y
eventos para ilustrar unos ejemplos de introduccin. Ms adelante veremos una referencia
completa de cada uno de los controles y cmo utilizarlos.

En la coleccin "Items" aadimos el contenido del nuestro cuadro de texto de pruebas "TextBox".
Pondremos esta instruccin:
Items.Add(TextBox1.Text)
El resultado es que se aade "add" a la lista de elementos "items" el texto "text" que contiene el
cuadro de texto "Textbox1", con lo que nos aparece reflejado inmediatamente en el cuadro de
lista.
QU ES UNA COLECCIN?
Una coleccin es una forma de agrupar y administrar objetos relacionados. En el caso anterior un
objeto coleccin "Items" es una coleccin de elementos, es decir los elementos estn guardados
en una "lista" de datos. Normalmente trabajaremos con muchos tipos de colecciones: los iconos
de la barra de herramientas es una coleccin de objetos de tipo botn, las impresoras instaladas
en nuestro ordenador es una coleccin de objetos impresora, un libro de trabajo de Excel es una
coleccin de hojas de clculo...
Ya hemos aadido un elemento a la lista, si seguimos pulsando en aadir vemos como vamos
creando la lista con todos estos elementos... Veamos ahora cmo saber cual es el elemento que se
ha seleccionado de la lista y cmo asignarlo al TextBox. Es decir, el usuario selecciona un elemento
y queremos que se escriba en el cuadro de texto. Mira este cdigo
Private Sub ListBox1_SelectedIndexChanged(sender As Object, _
e As EventArgs) Handles ListBox1.SelectedIndexChanged
' Cuando pulsamos en un elemento de la lista...
With ListBox1
TextBox1.Text = listbox1.SelectedItem
End With
End Sub

Fjate que en este caso no es el evento "clic", como caba esperar (y como es en las versiones
anteriores de VB) sino que el evento en cuestin es "SelectedIndexChanged". Que es un evento
que se activa cuando se selecciona un elemento: cambia el ndice del elemento seleccionado.
Lo que hacemos en este evento es asignar al contenido del cuadro de texto (su propiedad "Text")
el elemento de la lista seleccionado: la propiedad "SelectedItem" representa al elemento
seleccionado. Tranquilo lo veremos ms adelante... adems qu esto del With... End With? Esto si
que lo explico porque es sencillo. Cuando estamos trabajando con varias propiedades de un
control u objeto (cuadro de lista en este caso) podemos hacerlo de esta forma:
TextBox1.Text = Listbox1.SelectedItem
Es decir, le indicamos el mtodo o propiedad de control separado por un punto. Pero en ocasiones
escribiremos muchas instrucciones sobre ese cuadro de lista... para evitar escribir tantas veces el
objeto con el que estamos trabajando podemos utilizar la instruccin with...end with

With ListBox1
TextBox1.Text = .SelectedItem
End With
Que significa: "con el cuadro de lista Listbox1" haz lo siguiente... y cuando se encuentre una
propiedad con el punto delante .SelectedItem sabe que debe ser del control que se indic en el
with. Es un poco para simplificar la sintaxis, la utilidad no va ms all de hacer el cdigo ms
legible y puede omitirse tranquilamente su utilizacin y escribir en su lugar el objeto completo.
Mas cosas... y de dnde hemos sacado este evento?... "ListBox1_SelectedIndexChanged"
Muy sencillo, hemos explorado la lista de eventos del cuadro de lista para escribir el cdigo que
quiero que se ejecute cuando se seleccione un elemento, es decir, cuando el ndice del elemento
seleccionado cambie: "SelectedIndexChanged". Los controles tienen muchos eventos, la mayora
son comunes pero luego hay algunos particulares segn su tipo: seleccin de un elemento, icono
de un botn, activar una casilla de verificacin... siempre se utilizan los mismos, as que con un
poco de prctica los podremos identificar rpidamente. Veamos cmo buscar estos eventos.
Cmo hacemos para escribir cdigo en otros eventos?
Para poder usar otros eventos de un objeto, debemos realizar esto en la ventana de cdigo.
Primero seleccionamos de la lista desplegable de la izquierda el objeto con el que queremos
trabajar, en nuestro caso el cuadro de lista. Automticamente se actualiza un desplegable a la
derecha con los eventos disponibles para este objeto:

Vemos en esta pantalla que a la izquierda est seleccionado el cuadro de lista "ListBox1" y a la
derecha aparecen todos los eventos disponibles para este cuadro de lista.
Nota: Cada control tiene sus propios eventos. Muchos son comunes, por ejemplo el evento clic
est disponible en casi todos y luego tiene los propios que dan funcionalidad distinta a cada
control.
Para trabajar con el evento que queremos desplegaremos la lista de la derecha y seleccionamos el
adecuado. No te preocupes nunca tendremos que aprender esta lista de eventos. En general
nunca hay que aprenderse nada, hay que conocer las cosas y luego tener una buena referencia o
ejemplos para utilizarlos. Adems de toda esa lista de eventos no utilizaremos ms que un par de
ellos, y eso con todos los controles.
CMO MANEJAR EVENTOS DE TECLADO.
En el ejemplo anterior hemos controlado que hacer cuando el usuario hace clic con el ratn en un
elemento de la lista, ahora vamos a controlar que hacer con determinadas teclas. Para esto vamos
a utilizar el evento que controla cuando se pulsan las teclas: el evento KeyPress,
Seguimos con el ejemplo anterior, vamos a la pantalla del cdigo, arriba a la izquierda
seleccionamos el cuadro de lista y a la derecha buscamos el evento Keydown:

El procedimiento que nos escribir debajo es:


Private Sub ListBox1_KeyDown(sender As Object, e As _

KeyEventArgs) Handles ListBox1.KeyDown


End Sub
Pero si hemos dicho de utilizar el Keypress porqu he cogido ahora el KeyDown?. Bien, veamos
los eventos que tenemos para manejar el teclado:
-

Keypress: Se produce cuando el usuario presiona y suelta una tecla


KeyDown: Se producen cuando el usuario presiona una tecla
KeyUp: Se producen cuando el usuario suelta una tecla

Y para que tanto control sobre las teclas? Pues para poder tener controladas todas las situaciones
posibles, cada uno de estos eventos tiene su utilidad. Por ejemplo "Keypress" es el evento
"normal", cuando se presiona una tecla normalmente y se suelta, pero y si queremos utilizar dos
teclas simultneas? Debemos saber si est la primera tecla pulsada y en esa situacin "KeyDown"
ser la opcin adecuada. Adems existen muchas teclas especiales que slo funcionan con
"KeyDown" como es el caso de la tecla Supr (suprimir) es una tecla especial y no se detecta en el
evento "KeyPress". Poda haber usado KeyUp tambin, pero ese evento se produce cuando se
suelta la tecla... (que sera lo lgico), pero es otra forma de hacer las cosas: interceptando las
pulsaciones en el evento "KeyDown" (cuando se empieza a pulsar la tecla) .
Con esto, ya sabemos cmo detectar cuando se pulsa la tecla suprimir (Del), ahora debemos
borrar el elemento de la lista que est activo o seleccionado:
Private Sub ListBox1_KeyDown(sender As Object, e As _
KeyEventArgs) Handles ListBox1.KeyDown
If e.KeyCode = Keys.Delete Then
With ListBox1
.Items.Remove(.SelectedItem)
End With
End If
End Sub
Aunque haya unas cuantas cosas nuevas la explicacin es la siguiente: cuando se ejecuta este
procedimiento una variable llamada "e" indica el cdigo de la tecla que se ha pulsado. La
comparamos entonces para ver si la tecla de suprimir: e.KeyCode = Keys.Delete. Si es as,
eliminamos el elemento que est seleccionado.
La variable "e" est en la definicin del evento de este cuadro de lista:
Private Sub ListBox1_KeyDown(sender As Object, e As _
KeyEventArgs) Handles ListBox1.KeyDown
Cada evento nos proporcionar cierta informacin segn sea su naturaleza, est claro que si
estamos seleccionando el evento de pulsar una tecla "KeyDown" nos tendra que decir que tecla
es la pulsada. Pues si, lo dice y en el parmetro de entrada:
ByVal e As KeyEventArgs

Nos dice que nos proporciona una variable que se llama "e" que es de tipo "KeyEventArgs", es
decir, de tipo evento de teclado o tecla. Recuerda que "SelectedItem" nos indica el elemento que
actualmente est seleccionado y usando el mtodo "Remove" de la coleccin "Items", lo quitamos
de la lista.
IMPORTANTE!
El parmetro de entrada llamado "e" que veremos en los eventos tiene la informacin adecuada
al evento. Si es de tecla, cual es la que se ha pulsado. Si es de seleccin de un elemento de la
lista, el elemento que se ha seleccionado, si es la de mover un cuadro por la pantalla tendr las
coordenadas de dnde se ha desplazado.
Por tanto "e" puede tener un slo valor o varios, dependiendo del evento que est detectando.
A lo largo del curso se irn viendo ejemplos de los valores que puede tomar este parmetro
SELECCIONES MLTIPLES EN UN CUADRO DE LISTA
Para ir terminando con este captulo, vamos a manejar varias cosas ms de los eventos y de los
cuadros de lista. Ahora queremos hacer una seleccin mltiple de un cuadro de texto y suprimir
todos los que estn seleccionados. Con lo que sabemos tenemos ya una idea aproximada de cmo
hacerlo pero nos falta alguna cosa, veamos...
Una seleccin mltiple (seleccionar varios elementos a la vez de una lista) es algo habitual y que
debemos tener en cuenta en nuestros programas. Cuando permitimos mltiple seleccin en un
cuadro de lista (ListBox) , podemos seleccionar un elemento o varios, en este caso stos pueden
estar consecutivos o no. Por ejemplo, si seleccionamos un elemento de la lista y manteniendo
pulsada la tecla de maysculas, pulsamos en otro que est ms arriba o ms abajo, se seleccionan
todos los elementos intermedios, (esto es una cosa habitual de Windows). Tambin podemos
seleccionar elementos no contiguos si pulsando la tecla Control y con el ratn vamos haciendo clic
en elementos no consecutivos.
Lo primero que necesitamos saber es cmo hacer que un cuadro de lista permita mltiple
seleccin. Por defecto slo se puede seleccionar un elemento al mismo tiempo as que tendremos
que buscar en sus propiedades que indican su forma de funcionamiento para que permita esta
accin.
Para que un cuadro de lista permita mltiple seleccin de elementos hay que asignar a la
propiedad "SelectionMode" el valor "MultiExtended". Para activar esta propiedad
seleccionaremos el cuadro de lista "ListBox1" y luego nos fijamos en la ventana de propiedades.
Ah buscamos la propiedad "SelectionMode" y le indicamos que tenga el valor de "MultiExtended",
que modificar su comportamiento para permitir que podamos seleccionar varios elementos a la
vez.

Volvamos al cdigo. Ahora tendremos que realizar alguna cosa ms en la deteccin de la tecla
suprimir en el evento "KeyDown", ya que tenemos que saber qu elementos estn seleccionados
para poder borrarlos. Es decir, de alguna manera debemos saber qu elementos estn
seleccionados.
Lo primero que tenemos que hacer es recorrer todos los elementos del cuadro de lista para saber
si est o no seleccionado. Ese recorrido hay que hacerlo desde atrs hacia adelante... por qu?
porque si lo hiciramos desde el principio de la lista, al eliminar un elemento de dicha lista, el
nmero de elementos variara y tendramos problemas cuando llegsemos al final, ya que no ser
el mismo nmero de elementos despus de haber borrado alguno. Mientras que al recorrer los
elementos desde el final hacia adelante, no importar que borremos alguno del final, ya que el
siguiente que comprobaremos estar ms al principio que el recin borrado y no tendremos
problemas. Vemoslo en funcionamiento.
Veamos primero el cdigo que habra que usar y despus lo comentamos.
Private Sub ListBox1_KeyDown(sender As Object, e _
As KeyEventArgs) Handles ListBox1.KeyDown
If e.KeyCode = Keys.Delete Then
' Borrar las filas seleccionadas del listbox
Dim i As Integer
With ListBox1
For i = .SelectedItems.Count - 1 To 0 Step -1
.Items.Remove(.SelectedItems.Item(i))

Next
End With
End If
End Sub
La parte del cdigo "If e.KeyCode = Keys.Delete Then" ya la vimos antes y sirve para detectar la
pulsacin de la tecla de borrado.
"Dim i As Integer" indica al programa que vamos a usar una variable y que la guarde en con el
nombre "i", esto lo veremos con detalle ms adelante.
"With ListBox1" se utiliza para simplificarnos las instrucciones cuando escribimos varias trabajando
con el mismo objeto, tambin lo comentamos antes.
Ahora Visual Basic.Net nos indica en ese bucle los elementos que estn seleccionado gracias a la
coleccin de elementos seleccionados "SelectItemCount". Esto ser de gran ayuda, as que
devolver una coleccin (recuerda el trmino de coleccin) con los elementos que ha seleccionado
el usuario. Adems, en todas las colecciones tenemos una propiedad llamada "Count" que me dice
cuantos elementos tiene. Con todo esto si hacemos:
For i = .SelectedItems.Count - 1 To 0 Step -1

Le estamos indicando que utilice la variable "i" para ir guardando los valores que resulten de
contar desde el nmero de elementos que hay seleccionados hasta cero. El Step -1 se usa para
contar hacia atrs, (de mayor a menor), pero eso, al igual que el funcionamiento de los bucles
"For", tambin lo veremos ms adelante.
"SelectedItems" es una coleccin en la que estn los elementos que hay seleccionados en el
"ListBox". Recuerdas la coleccin "Items"? Pues en este caso, "selectedItems" son los elementos
seleccionados.
".Items.Remove(.SelectedItems.Item(i))". Es parecido a lo visto anteriormente, es decir, elimina el
elemento que est seleccionado y que ocupa la posicin "i" dentro de la coleccin de elementos
seleccionados.
"Next" indica que contine el bucle o la cuenta que estamos llevando con la variable "i". De esta
forma, al haber usado el "Step -1", lo que hacemos es contar hacia atrs. Si por ejemplo "i" vala 3,
al llegar aqu, valdr 2, es decir restamos 1, que es el valor indicado en "Step"
"End With" indica hasta dnde termina la escritura de cdigo que comenzamos con "With
ListBox1"
"End If" le dice que hasta aqu llega la comprobacin que hicimos sobre si la tecla pulsada era la de
suprimir.
Repasando un poco otra vez lo del objeto "With". Si usamos "With Objeto", podemos sustituir a
Objeto por el punto, siempre y cuando ese punto, (y la propiedad o mtodo correspondiente),
est dentro del par "With... End With"

Nos queda decirle al formulario que cuando se pulse el botn de aceptar haga lo mismo que si
pulsamos el botn de Aadir. Para esto nos vamos al diseador y buscamos la siguiente
propiedad:

Esto es qu debe hacer cuando se pulse el botn Intro. Normalmente cuando trabajamos con
formularios en cualquier programa, podemos movernos por los distintos elementos pulsando la
tecla del tabulador. Adems, la tecla de "intro" suele estar asociada a alguna accin de ese
formulario: cerrar, aadir un elemento, guardar datos...
Lo que queremos hacer en nuestro ejemplo es asociar el cdigo de aadir el elemento con un
botn que hemos colocado. Como vemos en la imagen anterior, al pinchar en este desplegable el
entorno es lo suficientemente inteligente como para mostrarme la lista botones que tengo en mi
formulario: selecciono entonces "cmd_Add".
Otro detalle ms, vamos a asociar ahora que si se pulsa la tecla de escape (Esc) terminemos el
formulario, que es una accin habitual en los formularios de Windows. Para esto cambiaremos de
igual forma que en el caso anterior la propiedad "CancelButton"
As que seleccionaremos de la lista desplegable el botn que aadimos para cerrar la aplicacin
"cmd_cerrar" y as, cuando el usuario pulse la tecla "Esc" se cerrar la aplicacin. Probemos ahora
todo el cdigo y as lo comprobars: Escribimos algo en el cuadro de texto y pulsamos Intro,
veremos que se aade a la lista. Despus pulsamos "Esc" y comprobaremos que se cierra el
formulario o ventana con lo que se da por terminada la aplicacin.
Este ejemplo lo tienes aqu para descargar. En general podremos al final del captulo todos los
ejemplos que hagamos en cada uno de ellos.

Ver Ejemplo
Este ejemplo ha sido una pequea toma de contacto con los objetos, teclado, formularios... todo
esto lo vendremos con suficiente detalle ms adelante as que tranquilo si no han quedado claras
algunas cosas. Haba que empezar de alguna forma y mejor hacerlo con un ejemplo completo
para, sobre todo, aprender a manejar el IDE.
En el siguiente captulo veremos con detalle toda el IDE de .NET para comenzar a trabajar ya con
las caractersticas del cdigo .NET.
EJERCICIOS
Ejercicio 1. La primera aplicacin en VB.NET
Crea una nueva aplicacin de Windows que muestre un mensaje de bienvenida al ejecutarse:

Ejercicio 2. Configurar el comportamiento del formulario


Crea un formulario de este tipo anclando correctamente el cuadro de lista, los botones y cuadros
de texto. Para que al cambiar de tamao mantenga las posiciones:

Nota, para el marco interior utiliza un control llamado GroupBox y borra el texto de su propiedad
Text.
Ejercicio 3. Trabajar con cuadros de lista
Haz un programa que haga estas acciones:
1. Que vaya insertando los elementos que escribimos en un cuadro de texto.
2. Cuando insertemos uno elemento debe limpiar el cuadro de texto.
3. Cuando seleccionemos un elemento debe aparecer en el cuadro de texto "Seleccionado ahora"
4. Poner dos botones, uno para borrar el elemento seleccionado y otro para borrar todos:

Vous aimerez peut-être aussi