Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NET
Al introducir la matrcula y pulsar sobre el botn ACEPTAR, se visualizar una foto con la imagen del vehculo, apareciendo su matrcula en la barra de ttulo del formulario. El botn SALIR finalizara la aplicacin.
En este cuadro de dilogo se debe elegir la plantilla APLICACIN PARA W INDOWS de la parte derecha. Adems es conveniente dar un nombre a la aplicacin para que la solucin generada no tome el nombre por omisin (WindowsApplicationXXX).
Para todas las pantallas y referencias al entorno de desarrollo, se supondr que se est utilizando la Configuracin de desa rrollo de Visual Basic. Dicha configuracin se puede cambiar mediante la opcin IMPORTAR Y EXPORTAR CONFIGURACIONES del men HERRAMIENTAS.
Tambin es posible dar un nombre a la solucin y al proyecto, as como indicar la carpeta donde se guardar cuando por primera vez se da la opcin GUARDAR TODO (CTRL+MAYS+S) del men ARCHIVO.
etiqueta. En estos controles (ocurrir lo mismo en los botones de la aplicacin), el carcter ampersand (&) antes de una letra definir la tecla de acceso al control.
De forma predeterminada, se muestra slo la parte de la imagen que cabe en el control, pero mediante la propiedad SizeMode, podemos obligar a cambiar, bien el tamao del control para que se adapta al tamao de la imagen, o bien el tamao de la imagen para que se adapte al tamao del control. El valor de SizeMode es algn miembro de la enumeracin PictureBoxSizeMode, cuyos miembros se puede ver en la tabla siguiente.
Nombre de miembro AutoSize CenterImage Descripcin El tamao de PictureBox debe ajustarse igual que el tamao de la imagen que contiene. La imagen se muestra en el centro si PictureBox es ms grande que la imagen. Si la imagen es ms grande que PictureBox, la imagen se coloca en el centro de PictureBox y se recortan los bordes exteriores. La imagen se coloca en la esquina superior izquierda de PictureBox. La imagen se recorta si es ms grande que el objeto PictureBox que la contiene. La imagen situada dentro de PictureBox se estira o encoge para ajustarse al tamao del mismo.
Normal StretchImage
El control Label no puede tomar el foco, aunque si tiene propiedad TabIndex. En este caso, la propiedad se utiliza para establecer que control tomar el foco al utilizar su tecla de acceso, que ser el siguiente en el orden de tabulacin. Podemos establecer manualmente la propiedad TabIndex, o bien utilizar la opcin ORDEN DE TABULACIN del men VER que permite establecerla de forma visual.
En cualquiera de los casos aparecer la ventana de cdigo de la que podremos seleccionar un evento predefinido (seleccionando el componente en la lista de la izquierda) y el evento de la lista de la derecha o escribir nuestros propios procedimientos, declaraciones, etc.
Cada clase tiene una lista de eventos definidos para ella (que aparece en la lista de la derecha de la pantalla de cdigo). Cada procedimiento de evento no es ms que un procedimiento Sub con una cabecera ya definida. Por ejemplo, para el evento Click de un objeto de la clase Button sera:
Private Sub btnAceptar_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnAceptar.Click End Sub
La cabecera del procedimiento de evento tiene distintas partes. Por una parte el nombre del procedimiento que, por omisin toma el nombre del control, el carcter de subrayado y el nombre del evento (Aceptar_Click). Es posible cambiar el nombre del procedimiento, ya que quien controla el evento es la clusula Handles del procedimiento. Todos los eventos tienen dos argumentos. El argumento sender es una referencia al objeto que ha enviado al evento. A partir de ella podemos acceder a los distintos miembros del objeto. Sin embargo, su nico miembro accesible es el mtodo GetType, que devuelve una instancia del objeto Type que representa el tipo exacto de la clase actual. Por ejemplo, dentro del procedimiento de evento anterior sender.GetType.Name, devolvera el nombre de la clase del objeto que ha enviado el evento (en nuestro caso, Button). Si queremos acceder a los miembros del objeto que enva el evento, deberamos convertirlo un objeto de una case concreta de forma explcita haciendo una conversin de tipos con los mtodos CType o DirectCast.
Dim obj As Button = DirectCast(sender, Button)
El segundo argumento es una referencia a una instancia de la clase EventArgs o a alguna de sus derivadas y contiene informacin sobre el evento. Dependiendo del tipo de evento, este argumento ser de una clase distinta, con distintos miembros para representar cada una de sus caractersticas. Por ltimo, la clusula Handles indicar qu evento de qu control ser el que lance el procedimiento. En el procedimiento anterior, la clusula indica Aceptar.Click, por lo que se lanzar al hacer clic sobre el botn Aceptar. Como se ha dicho ms arriba, a diferencia de otras versiones de Visual Basic, se controlar ese evento independientemente del nombre del procedimiento. En la clusula Handles pueden coexistir varios eventos de distintos controles separados por comas, con lo que un nico procedimiento de evento podr controlar varios eventos. Por ejemplo un procedimiento que incluyera la clusula Handles Button1.Click, Button2.Click, Button1.DoubleClick controlara los enventos Click y DoubleClick de Button1 y el evento Click de Button2. La lista de eventos a codificar en la aplicacin de ejemplo sera la siguiente: Al pulsar sobre el botn SALIR (evento Salir.Click), terminar la aplicacin. Al pulsar sobre el botn ACEPTAR (evento Aceptar.Click), se cargar en el control PictureBox la foto correspondiente a la matrcula introducida en el cuadro de texto. Al mismo tiempo aparecer la matrcula en la barra de ttulo del formulario. Esta misma operacin se podr realizar al pulsar la tecla ENTER en el cuadro de texto (evento Matricula.KeyPress).
pero requerira crear dicha carpeta en todas las mquinas en las que se ejecutara la aplicacin. Otra solucin sera utilizar el objeto Application que guarda informacin sobre la aplicacin que se est ejecutando. Dicho objeto tiene como miembro la propiedad StartUpPath que devuelve una cadena con el directorio de inicio de la aplicacin. Si se guardan las imgenes en una carpeta Fotos que cuelgue de, la especificacin de archivo podra ser: imagen = Application.StartupPath & "\Fotos\" & Matricula.Text & ".jpg"
Private Sub btnAceptar_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnAceptar.Click Const titulo = "Vehculos en venta" 'Ttulo base del formulario Dim imagen As String 'Especificacin del archivo que contiene la imagen imagen = Application.StartupPath & "\Fotos\" & txtMatrcula.Text & ".jpg" picCoche.Image = Image.FromFile(imagen) Me.Text = titulo & " - " & txtMatrcula.Text End Sub
Obsrvese que la aplicacin no es ni el archivo .vb ni la solucin, sino el archivo ejecutable creado en la compilacin. Dicho archivo se encuentra situado en la carpeta bin\Debug de la solucin, por lo que en nuestro caso la propiedad StartUpPath devolvera carpetaDelProyecto\bin. En nuestra aplicacin, sera esa la carpeta donde colocar los archivos grficos. Ntese tambin que la propiedad no aade la barra invertida final y (\) y la carpeta Fotos, por lo que es necesario aadirla en la expresin.
End Sub Private Sub btnAceptar_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnAceptar.Click MostrarVehculo() End Sub
Otra forma de ejecutar las mismas acciones cuando se pulsa la tecla ENTER es convertir el botn Aceptar en el botn predeterminado del formulario. Para ello habra que modificar la propiedad AcceptButton del formulario y asignarla al botn Aceptar. El botn quedara rodeado de un recuadro negro y se activara al pulsar la tecla ENTER desde cualquier parte del formulario.
5. Ejecucin y depuracin
5.1. Generacin de cdigo y control de errores sintcticos
La ejecucin del proyecto se realizar mediante la opcin INICIAR del men DEPURAR (o pulsando la tecla F5). Se generar entonces el ejecutable de la solucin y comenzar la ejecucin en modo de depuracin hasta encontrar un punto de interrupcin, un error o hasta que se detenga la ejecucin de forma manual. Tambin es posible ejecutar la solucin paso a paso (teclas F10 o F11). Si se detecta un error sintctico, no se podr generar la solucin y aparecer una ventana indicndolo.
Si se contina la ejecucin se ejecutar la ltima solucin generada. Si se interrumpe, aparecer en la ventana LISTA DE DE ERRORES informacin del error y se podr ir a la lnea que ha producido el error.
Obsrvese que la llamada dentro del procedimiento es a MostrarVehiculo() (sin acento), mientras que el procedimiento declarado se llama MostrarVehculo() (con acento).
En la ventana de cdigo aparecer sealada la lnea que ha producido el error. En la ventana del error aparecer el tipo de error que se ha producido (en este caso una excepcin del tipo FileNotFoundException, es decir, archivo no encontrado), una explicacin ms detallada de la instruccin que ha producido el error (en este caso el nombre del archivo que no se ha encontrado), algunas sugerencias para controlar el problema, y la posibilidad de ver el detalle de la excepcin.
10
Se puede modificar el valor de las variables pulsando dos veces sobre la variable, modificando su valor y pulsando la tecla ENTER. Tambin se puede modificar la ejecucin normal del programa y desplazar la lnea actual a otra posicin. Para ello hay que pulsar sobre la flecha que indica la lnea actual y desplazar la flecha a otra nueva lnea.
Mientras se est en el modo de depuracin interrumpido (y siempre antes de arrancar la depuracin), es posible ejecutar las instrucciones una a una, haciendo un seguimiento preciso del flujo del programa. Podemos avanzar paso a paso de las siguientes formas: Paso a paso por instrucciones (F11). Ejecuta la siguiente instruccin. Paso a paso por procedimientos (F10). Ejecuta la siguiente instruccin, pero si se trata de una lnea de cdigo con una llamada a una funcin, la ejecuta totalmente y salta a la siguiente instruccin dentro del mbito actual. Paso a paso para salir (SHIFT+F11). Termina la funcin actual y lleva el cursor a la ltima llamada. Otra posibilidad de depuracin es forzar la detencin de la ejecucin colocando puntos de interrupcin en las instrucciones ejecutables. Para establecer un punto de interrupcin, simplemente hay que pulsar en el margen de la ventana de edicin de cdigo en cualquier lnea que contenga una instruccin ejecutable. Aparecer entonces un punto rojo indicando el breakpoint y la ejecucin se detendr en ese punto. Al llegar la ejecucin del programa a ese punto, el programa se detendr, aparecer en el ttulo de la ventana de Visual Studio la aclaracin (Depurando) y se marcar como lnea activa la lnea donde est colocado el punto de interrupcin.
Lnea activa
Con el programa detenido, podremos analizar las variables, modificar el cdigo, cambiar la lnea activa o ejecutar paso a paso el programa tal y como se ha indicado anteriormente.
11
El bloque Try..End Try se encarga de encerrar el cdigo que puede producir una excepcin. Si se produce algn error dentro de ese bloque, Visual Basic revisar todas las instrucciones Catch del bloque para comprobar si alguna de ellas hace referencia a la excepcin que se ha producido. De ser as, ejecutar las instrucciones de la clusula Catch correspondiente. Por ltimo, la clusula Finally se ejecutar tanto si se produce como si no se produce una excepcin. Un bloque Try puede tener tantas clusulas Catch como excepciones se deseen controlar. Cuando se produce una excepcin se establece el objeto global Err y se genera una instancia de la clase Exception o de alguna de sus derivadas. Visual Basic comprobar todas las clusulas Catch hasta encontrar una que coincida con el tipo de excepcin generada, ejecutndose el cdigo asociado. De no encontrar ninguna, se pasar esa excepcin al siguiente mtodo en la pila de llamadas. El objeto Err contiene informacin sobre el error producido, como las propiedades Err.Number, con el cdigo del error que se ha producido, Err.Source con el nombre del objeto o la aplicacin donde se ha producido, o Err.Description con la descripcin del error. La clase Exception tiene, entre otras, las propiedades Source, con informacin de la aplicacin o el objeto que la ha producido, Message, con informacin sobre la excepcin o StackTrace con una lista de la pila de llamadas cuando se produjo la excepcin actual. Adems cada una de las clases derivadas de Exception tiene su propiedades caractersticas (en la ayuda de Visual Studio, aparece la jerarqua de clases de Exception con sus clases derivadas, propiedades, mtodos, etc.)
12
Un nuevo procedimiento MostrarVehiculo() con el controlador de excepciones podra quedar de la siguiente forma.
Private Sub MostrarVehculo() Const titulo = "Vehculos en venta" 'Ttulo base del formulario Dim imagen As String 'Especificacin del archivo que contiene la imagen imagen = Application.StartupPath & "\Fotos\" & txtMatrcula.Text & ".jpg" Try 'Si no hay errores, se carga la imagen 'y se establece el ttulo del formulario picCoche.Image = Image.FromFile(imagen) Me.Text = titulo & " - " & txtMatrcula.Text Catch e As System.IO.FileNotFoundException 'Si no se encuentra el archivo aparece un cuadro de dilogo 'indicndolo, se vaca el cuadro de texto y 'se restablece el ttulo de la ventana MessageBox.Show("El vehculo con matrcula " & txtMatrcula.Text & _ " no tiene imagen asociada.", _ "Vehculos en venta", _ MessageBoxButtons.OK, _ MessageBoxIcon.Exclamation) 'Se vaca el texto del cuadro de texto txtMatrcula.Text = String.Empty 'Se vaca el PictureBox picCoche.Image = Nothing 'Se restablece el ttulo de la ventana Me.Text = titulo Catch e As Exception 'Si se produce cualquier otro error aparece un cuadro de dilogo 'indicando la circunstancia, el cdigo de error, 'la descripcin del error y la pila de llamadas. 'Adems se vaca el cuadro de texto y 'se restablece el ttulo de la ventana MessageBox.Show("No se ha podido cargar la imagen." & _ ControlChars.CrLf & _ "Error: " & Err.Number & " - " & e.Message & _ " " & e.StackTrace & ".", _ "Vehculos en venta", MessageBoxButtons.OK, _ MessageBoxIcon.Exclamation) 'Se vaca el PictureBox picCoche.Image = Nothing 'Se vaca el texto del cuadro de texto txtMatrcula.Text = String.Empty 'Se restablece el ttulo de la ventana Me.Text = titulo Finally 'De cualquier forma el foco vuelve al cuadro de texto txtMatrcula.Select() End Try End Sub
13
7. Distribucin de la aplicacin
A diferencia de las aplicaciones Win32, una aplicacin .NET no precisa instalar y registrar los componentes y referencias de la solucin para distribuir la aplicacin en otros equipos: un simple XCopy o un FTP del directorio de la aplicacin permitir ejecutarla sin problemas, siempre y cuando se encuentre instalado .NET Framework en los ordenadores donde se debe ejecutar la aplicacin. A pesar de esto, Visual Studio tiene entre sus plantillas de proyectos aplicaciones para instalar y distribuir aplicaciones. Este tipo de aplicaciones generarn un archivo Setup.exe que permitir instalar la aplicacin en otros equipos2. Para aadir un proyecto de instalacin a nuestra aplicacin, hay que seleccionar la opcin NUEVO PROYECTO del men ARCHIVO/AGREGAR. En la lista de plantillas habra que elegir entre los tipos de proyecto OTROS TIPOS DE PROYECTOS y PROYECTOS DE INSTALACIN E IMPLEMENTACIN y elegir la plantilla ASISTENTE PARA PROYECTOS DE INSTALACIN.
Se abrir entonces el asistente y, despus de la pantalla de bienvenida, habr que seleccionar el tipo de instalacin que deseamos hacer, que en nuestro caso ser una instalacin de una aplicacin para Windows.
Esa aplicacin tambin es una aplicacin .NET por lo que todava ser necesario tener instalado .NET Framework. Para ms informacin sobre cmo instalar tambin .NET Framework, se puede acceder a las pginas http://support.microsoft.com/default.aspx?scid=kb;en-us;324733 o http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnnetdep/html/vsredistdeploy.asp. Tambin es posible obtener ms informacin sobre los proyectos de instalacin en http://www.elguille.info/colabora/puntoNET/jmbeas_instaladores/jmbeas_InstaladoresNET.htm
14
La siguiente pantalla permite indicar que elementos de la aplicacin se incluirn en la instalacin. El RESULTADO PRINCIPAL DE COCHESUSADOS es el que incluye el archivo ejecutable de la instalacin y las DLL necesarias.
El paso siguiente ser indicar si se desea incluir algn archivo extra en la instalacin. Aqu se deberan incluir, si son necesarios, archivos grficos, archivos de tipo readme.txt, las bases de datos, etc. En nuestro caso puede ser interesante incluir las imgenes de los vehculos y el icono del programa.
15
Despus de la pantalla de despedida y pulsar el botn FINALIZAR se crear un nuevo proyecto. En la ventana del Explorador de soluciones aparecer una nueva carpeta en la solucin con el nombre de Instalar (este es el nombre que hemos dado al proyecto en la ventana Agregar nuevo proyecto) que ser el nuevo proyecto. La ventana de los diseadores de los proyectos de instalacin es distinta de las del diseador de proyectos. Lo que aparecer es el sistema de archivos que crear la instalacin, tanto en la carpeta de la aplicacin, como en el escritorio del usuario como en el men programas del usuario. En la ventana de la izquierda aparecen las carpetas y en el de la derecha su contenido. Es posible crear nuevas carpetas y aadir nuevos contenidos a los creados inicialmente mediante los mens contextuales.
16
El proyecto de instalacin, por omisin, crear una proyecto llamado Instalar, que se instalar en la carpeta de ARCHIVOS DE PROGRAMA con ese nombre y no crear ninguna entrada en el men Programas. Para cambiar esto es necesario modificar las propiedades del proyecto. Para cambiar las propiedades del proyecto es necesario marcar el proyecto Instalar del Explorador de proyecto. Algunas de las propiedades son: Autor, con el nombre del creador del programa. Aparece al pasar el cursor por el archivo .msi de la aplicacin. Description, es la descripcin del programa que aparecer en el archivo .msi Manufacturer, nombre de la compaa que ser de forma predeterminada el nombre de la carpeta donde se instalar la carpeta de la aplicacin. ProductName, nombre del producto que aparecer en el ttulo de la ventana del programa de instalacin. Title, ttulo del programa que aparecer en el archivo .msi. La carpeta de la aplicacin representa la ubicacin de la carpeta donde se ubicar el programa. Por omisin se instalar en [ProgramFilesFolder][Manufacturer]\[ProductName], pero podemos cambiar el destino mediante la propiedad DefaultLocation. En esta carpeta tambin se podran crear subcarpetas para determinadas funciones. Por ejemplo, podramos crear una subcarpeta Fotos donde se almacenaran las fotos, tal y como aparece en la figura anterior.
En MEN PROGRAMAS DEL USUARIO podemos crear la entrada que aparecer en el men de Inicio de Windows. Inicialmente esa carpeta permanece vaca, por lo que si deseamos crear un nuevo elemento, deberemos crear un nuevo acceso directo al resultado principal de la aplicacin. Para ello, se deber pulsar con el botn derecho en la ventana de la derecha y selecciona la opcin CREAR NUEVO ACCESO DIRECTO del men contextual.
17
En la ventana resultante deberemos seleccionar Resultado principal de CochesUsados de la Carpeta de la aplicacin. Pulsando sobre el nuevo acceso directo accedemos a sus propiedades: Name, con el nombre que aparecer en el men Programas. Description, con el texto que aparecer al pasar el cursor por la entrada del men. Icon, con el icono asociado a la aplicacin. El icono debe estar incluido en la carpeta de la aplicacin, y podemos aadirlo seleccionando la carpeta de la aplicacin y aadiendo el archivo .ico. Una vez modificadas las propiedades, seleccionando GENERAR del men secundario del proyecto Instalar, se generar el programa de instalacin. En la carpeta indicada al crear el proyecto, en la subcarpeta Debug, aparecern dos archivos: Instalar.msi, el programa de instalacin que se puede utilizar si la mquina cliente no tiene instalado Windows Installer, y setup.exe, el programa que es necesario utilizar si se tiene instalado Windows Installer. En condiciones normales, cualquiera de los dos ltimos permitir instalar la aplicacin.
18