Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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:
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:
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
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:
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.
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:
El aspecto del IDE ahora ser distinto ya que ahora partimos de un formulario Windows:
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.
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
Formulario (Form)
.frm
.vb
Mdulo (Module)
.bas
.vb
.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:
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":
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:
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:
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.
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:
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:
-
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.
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:
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:
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:
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):
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:
-
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:
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:
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:
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 .
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 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()
-
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:
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:
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: