Generar un programa con Microsoft速
Visual Basic Express
X1165138BDY.indb i
速
2005
21/12/05 11:33:25
PUBLICADO POR Microsoft Press División de Microsoft Corporation One Microsoft Way Redmond, Washington 98052-6399 Copyright © 2006 Microsoft Corporation La información contenida en este documento, incluidas las direcciones URL y cualquier otra referencia a sitios Web de Internet, está sujeta a modificaciones sin previo aviso. A menos que se indique lo contrario, los nombres de las compañías, organizaciones, productos, dominios, direcciones de correo electrónico, logotipos, personas, lugares y hechos mencionados son ficticios. No se pretende indicar, ni debe deducirse ninguna asociación con ninguna compañía, organización, producto, dominio, dirección de correo electrónico, logotipo, persona, lugar o hecho reales. Es responsabilidad del usuario el cumplimiento de todas las leyes de derechos de autor aplicables. Sin limitación de los derechos protegidos por las leyes de derechos de autor, ninguna parte del presente documento podrá ser reproducida, almacenada o introducida en un sistema de recuperación, o bien transmitida en ninguna forma o medio (electrónico, mecánico, mediante fotocopia o grabación, etc.), ni con ningún propósito, sin la autorización expresa y por escrito de Microsoft Corporation. Microsoft, Direct X, Excel, Hotmail, IntelliSense, JScript, Microsoft Press, MSDN, MSN, Outlook, Tahoma, Visual Basic, Visual C#, Visual Studio, Visual Web Developer, Win32, Windows, Windows Server y Xbox son marcas comerciales o registradas de Microsoft Corporation en los Estados Unidos y en otros países. Este libro refleja las opiniones y comentarios del autor. La información en él contenida se ofrece sin ningún tipo de garantía explícita, implícita o legal. Los autores, Microsoft Corporation y sus distribuidores o representantes declinan toda responsabilidad por los daños provocados o presuntamente provocados directa o indirectamente por este libro.
Nº de referencia X11-65138
X1165138BDY.indb ii
21/12/05 11:33:47
Tabla de contenido Capítulo 1
Introducción a Microsoft® Visual Basic® 2005 Express
1
¿Qué es .NET?
2
¿Qué es Visual Basic 2005? ¿Es Visual Basic 2005 un lenguaje de programación orientada a objetos (OOP)?
4
¿Qué es Visual Basic 2005 Express? ¿Qué tipos de aplicaciones se pueden crear con Visual Basic 2005 Express? ¿Cuáles son las principales características que debe conocer?
9
Capítulo 2
4
10 10
Instalación de Visual Basic 2005 Express
15
Preparativos para instalar Visual Basic 2005 Express
16
Instalación de Visual Basic 2005 Express
17
Obtener ayuda: Documentación de Microsoft Visual Studio 2005 Express Codificar la aplicación de consola Personalizar el entorno IDE Crear una aplicación para Windows
33 37 39 41
Capítulo 4
Crear su propio explorador Web en menos de cinco minutos
45
¿Qué es un proyecto?
46
¿Qué es el estilo de diseño?
47
Resumen de conceptos
54
Capítulo 5
Crear su primera aplicación completa para Windows®
57
Ajustar y alinear controles con líneas de ajuste
58 59 60 60 62 62 63
Crear su primera aplicación
25
Dos tipos de aplicaciones: ¿qué diferencia hay?
26
Introducción Componentes del entorno IDE
27 30
Usar IntelliSense: su nuevo mejor amigo IntelliSense y Ctrl+Barra espaciadora IntelliSense y punto/paréntesis de apertura Filtrado de IntelliSense: quitar lo “menos frecuente” Fragmentos de código IntelliSense: ahorro de tiempo Cómo invocar fragmentos de código
Continuación por los proyectos Crear una aplicación de consola Introducción al Explorador de soluciones
31 31 32
Detección y corrección de errores en tiempo real
64
Oh, My, My . . . My es fantástico ¿En qué tipos de tareas puede resultar de utilidad My?
66 68
Capítulo 3
iii
X1165138BDY.indb iii
21/12/05 11:33:48
Cambiar nombres 68 ¿A qué se le puede cambiar el nombre? 68 Cómo y dónde utilizar la característica de cambio de nombre 69 Controles comunes de Windows
72
¿Qué ocurre cuando se desencadena un evento?
75
Capítulo 6
Modificar su explorador Web
81
Cómo abrir la aplicación
82
Interacción con cuadros de diálogo Agregar un cuadro Acerca de Agregar un cuadro de diálogo Explorar
88 88 91
Una apariencia profesional al alcance de la mano Agregar un contenedor de franja de herramientas y algunas herramientas Agregar una barra de estado al explorador Personalizar la aplicación con iconos de Windows
94
Capítulo 7
Reparar los bloques rotos Depurar una aplicación Usar una DLL en una aplicación Agregar una referencia a la aplicación Puntos de interrupción, variables locales, Editar y continuar, y visualizadores
Capítulo 8
Administrar los datos ¿Qué es una base de datos? ¿Qué hay dentro de una base de datos? Normalización de datos e integridad de los datos ¿Qué son los valores nulos? ¿Qué son las claves principales y las claves externas? ¿Cómo se interacciona con una base de datos relacional? iv
X1165138BDY.indb iv
94 96 100
109 110 110 111 112
125 126 126 127 130 130 133
SQL Server 2005 Express en Visual Basic 2005 Express Crear una base de datos con Visual Basic 2005 Express Crear tablas en la base de datos Crear relaciones entre las tablas Escribir datos en tablas de SQL Server usando Visual Studio
134
¿Qué son ADO.NET y el enlace de datos? Desarrollo de la aplicación Car Tracker Bandeja de componentes ¿Cómo incluir información más descriptiva en el formulario?
146 148 153
135 137 139 143
154
Capítulo 9
Crear su propia aplicación de seguimiento meteorológico
163
Características de la aplicación Weather Tracker Plan de alto nivel
164 164
Crear la interfaz de usuario de la aplicación Agregar capacidades de área de notificaciones Agregar la pantalla de bienvenida y el cuadro Acerca de Agregar el cuadro de diálogo Opciones
165 167 173 175
Usar servicios Web Configuración de usuario Trabajar en segundo plano Completar la funcionalidad principal de Weather Tracker Probar la aplicación Weather Tracker Trabajar con el cuadro de diálogo de opciones Probar la aplicación Weather Tracker
177 181 182 187 193 194 197
Y ahora, basta con usar ClickOnce
198
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:33:55
Introducción Visual Basic 2005 Express y los demás productos de Visual Studio 2005 Express son, en mi opinión, unas de las mejores y más inteligentes ideas salidas de la división de desarrollo (Developer Division) de Microsoft. Aplaudo y animo a las personas que tuvieron esta brillante idea porque creo que hay necesidad real y demanda de un producto eficaz de primera categoría para los programadores aficionados, estudiantes y desarrolladores profesionales. Y Visual Basic 2005 Express responde a todo eso y a mucho más. Visual Basic 2005 Express es un subconjunto plenamente funcional de Visual Studio 2005, adecuado para crear y mantener aplicaciones y bibliotecas de Windows. No es una versión funcional por tiempo limitado, una versión de demostración ni una versión con características limitadas; no, se trata de una iniciativa clave de Microsoft para llegar a más personas y darles la capacidad de divertirse mientras crean software útil.
¿A quiénes va dirigido este libro? Este libro es para todo el mundo: estudiantes, programadores aficionados y para personas que siempre han creído que programar es difícil. Está dirigido a personas que tienen ideas como las siguientes: me gustaría poder crear una herramienta para guardar todas mis recetas, imprimirlas y enviarlas a mis amigos; o bien, ojalá pudiera crear este juego de cartas tan curioso que no he encontrado en ningún sitio; o quisiera poder crear un útil programa para controlar mi colección de DVD o de CD; o bien, me gustaría poder programar un software que me ayudara a trabajar con Introducción
X1165138BDY.indb v
matrices y a trazar gráficos para mis clases de matemáticas; ¡y cualquier cosa que se le pueda ocurrir! Este libro es para quienes tienen ideas pero no saben cómo plasmarlas en la realidad. Es una buena introducción a este arte y esta ciencia que es programar software.
Cómo está organizado este libro Este libro consta de nueve capítulos, cada uno de ellos dedicado a una característica o tecnología concreta de Visual Basic 2005 Express. La mayoría de los capítulos se basan en los capítulos anteriores, por lo que es aconsejable leer el material en orden secuencial.
Convenciones y características explicadas en este libro El libro presenta la información usando convenciones pensadas para que la información resulte legible y fácil de seguir. Antes de empezar el libro, lea la lista siguiente, que explica las convenciones que verá a lo largo del libro y destaca las características más útiles que quizás desee usar.
Convenciones
■ Cada ejercicio es una serie de tareas. Cada tarea se presenta como una serie de pasos numerados (1, 2, y así sucesivamente). Todos los ejercicios van precedidos de un encabezamiento de procedimiento que explica lo que se conseguirá en el ejercicio.
v
21/12/05 11:33:58
■ Las notas que tienen la etiqueta “Sugerencia” proporcionan información adicional o métodos alternativos para realizar un paso correctamente. ■ Las notas que tienen la etiqueta “Precaución” le alertan de cierta información que debe conocer antes de continuar. ■ El texto que escribe o los elementos que selecciona o en los que hace clic aparecen en negrita. ■ Los comandos de menú, los títulos de cuadros de diálogo y otros elementos de la interfaz de usuario aparecen con la primera letra en mayúsculas. ■ Un signo más (+) entre dos nombres de tecla significa que debe presionar esas teclas al mismo tiempo. Por ejemplo, “Presione Alt+Tab” significa que debe mantener presionada la tecla Alt mientras presiona la tecla Tab.
Otras características
■ Las barras laterales sombreadas que aparecen en el libro ofrecen información más detallada acerca del contenido. Las franjas laterales podrían contener información general, sugerencias de diseño o características relacionadas con la información tratada. ■ Cada capítulo termina con una sección En resumen… que repasa brevemente lo que ha aprendido en el capítulo actual y ofrece una descripción general del contenido del siguiente capítulo.
Requisitos del sistema Para llevar a cabo los ejercicios de este libro necesitará el hardware y software siguientes:
■ Microsoft Visual Basic 2005 Express ■ PC con un procesador de tipo Pentium III a 600 MHz; se recomienda 1 GHz ■ 128 MB de RAM (se recomiendan 256 MB o más) ■ Monitor de vídeo (800 x 600 o mayor resolución) con 256 colores como mínimo (se recomienda 1024 x 768, color de alta densidad de 16 bits) ■ Unidad de CD-ROM o DVD-ROM ■ Microsoft Mouse o dispositivo señalador compatible Asimismo, necesitará acceso de administrador al equipo para configurar SQL Server 2005 Express.
Ejemplos de código Los ejemplos de código de este libro se pueden descargar de la página de contenido complementario del libro, en la dirección siguiente: http://www.microsoft.com/mspress/companion/0-7356-2213-2/ Mientras realiza los ejercicios del libro usará los ejemplos de código y las soluciones de inicio. Utilizando los ejemplos de código, no perderá tiempo creando archivos que no son relevantes para el ejercicio. Los archivos e instrucciones paso a paso incluidos en las lecciones también le permiten aprender de manera práctica, que es una manera fácil y eficaz de adquirir y no olvidar nuevos conocimientos. También encontrará las soluciones completas si desea comprobar el trabajo o si simplemente desea examinarlas. El código de ejemplo se desarrolló en un entorno en inglés y puede que no funcione en entornos localizados.
■ Microsoft Windows XP con el Service Pack 2, Microsoft Windows Server 2003 con el Service Pack 1 o Microsoft Windows 2000 con el Service Pack 4
vi
X1165138BDY.indb vi
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:01
Instalar los ejemplos de código Siga estos pasos para instalar los ejemplos de código en su equipo.
1 Descargue los ejemplos de código desde http://www.microsoft.com/mspress/companion/0-7356-2213-2/. 2 Cuando haya descargado el archivo de los ejemplos de código, ejecute el programa de instalación. 3 Siga las instrucciones que aparecerán. Los ejemplos de código se instalan en la siguiente ubicación del equipo: Mis documentos\Microsoft Press\VB 2005 Express
Utilizar los ejemplos de código Cada capítulo de este libro explica cuándo y cómo utilizar los ejemplos de código para ese capítulo. Cuando llegue el momento de utilizar un ejemplo de código, se mostrarán las instrucciones para abrir los archivos. Los capítulos están creados en torno a escenarios que simulan proyectos de programación reales, de forma que pueda aplicar fácilmente lo que ha aprendido a su propio trabajo. Para aquellos que deseen conocer todos los detalles, en la página siguiente se muestra una lista de proyectos de ejemplo de código. Casi todos los proyectos tienen soluciones para los ejercicios. Las soluciones de cada proyecto están incluidas en la carpeta correspondiente a cada capítulo y tienen la etiqueta Complete.
Desinstalar los ejemplos de código Siga estos pasos para quitar los ejemplos de código de su equipo.
1 En el Panel de control, abra Agregar o quitar programas. En la lista Programas actualmente instalados, seleccione Generar un programa con Microsoft
2 Visual Basic 2005 Express y haga clic en Quitar.
3 Siga las instrucciones que aparecen para quitar los ejemplos de código. Introducción
X1165138BDY.indb vii
vii
21/12/05 11:34:03
Proyectos
Descripción
Capítulos 1 y 2
No hay proyectos de ejemplo
Capítulo 3 MyFirstConsoleApplication MyFirstWindowsApplication Capítulo 4 MiExplorador Capítulo 5 TestProject Capítulo 6 MiExplorador
Capítulo 7 Debugger
Capítulo 8 CarTracker
Capítulo 9 WeatherTracker
viii
X1165138BDY.indb viii
Aplicación que toma dos números y los suma, y muestra después la suma en una ventana de consola. Es la misma aplicación, pero muestra el resultado en un cuadro de mensajes. Aplicación de explorador Web sencilla que permite al usuario explorar Internet. Aplicación que le permite utilizar las características más importantes de Visual Basic 2005 Express. Es la continuación de la aplicación del Capítulo 4. Es el explorador Web al que agregará menús, barras de herramientas, una barra de estado y de progreso, y una ventana de exploración con autocompletar. Una aplicación llena de problemas para ayudarle a aprender a depurar utilizando características de Visual Basic 2005 Express. Una aplicación que permite al usuario hacer un seguimiento de anuncios de vehículos desde Internet utilizando una base de datos de SQL Server 2005 Express para almacenar la información. Una aplicación que se ejecuta en la bandeja del sistema y que posee una atractiva interfaz de usuario para mostrar datos meteorológicos recopilados por su aplicación desde diversos servicios Web. También se crea un paquete de implementación para la distribución de la aplicación.
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:04
Versión preliminar del software
Preguntas y comentarios
Este libro se ha revisado y probado con el candidato para versión comercial de agosto de 2005. Se espera que este libro será totalmente compatible con la versión final de Visual Studio 2005. Si hay que realizar cambios o correcciones a este libro, se recopilarán y agregarán a un artículo de Microsoft Knowledge Base. Consulte la sección “Soporte técnico de este libro” de esta Introducción para obtener más información al respecto.
Si tiene comentarios, preguntas o ideas sobre el libro o el contenido complementario, o preguntas para las que no encuentra respuesta en los sitios mencionados, envíelas por correo electrónico a Microsoft Press, a la dirección
Actualizaciones de la tecnología A medida que se vayan actualizando las tecnologías relacionadas con este libro, se agregarán vínculos a información adicional a la página Web de actualizaciones de tecnología de Microsoft Press. Visite periódicamente esta página para obtener actualizaciones de Visual Studio 2005 y otras tecnologías.
mspinput@microsoft.com o por correo postal a Microsoft Press A/A: Generar un programa con Visual Basic 2005 Express Editor One Microsoft Way Redmond, WA 98052-6399 Tenga en cuenta que Microsoft no ofrece asistencia para los productos de software en estas direcciones.
http://www.microsoft.com/mspress/updates/
Asistencia para este libro Se ha hecho todo lo posible para garantizar la exactitud de este libro y del contenido complementario. A medida que se vayan recopilando correcciones o cambios, se agregarán a un artículo de Microsoft Knowledge Base. Para ver la lista de correcciones conocidas para este libro, visite el artículo siguiente: http://support.microsoft.com/kb/905034 Microsoft Press proporciona asistencia para sus libros y el contenido complementario en el sitio Web siguiente: http://www.microsoft.com/learning/support/books/ Introducción
X1165138BDY.indb ix
ix
21/12/05 11:34:05
Acerca del autor Patrice Pelland
Dedicatoria
Patrice Pelland es director técnico en la división Developer Division de Microsoft. Es un enamorado de .NET y los servicios Web y, durante los últimos cuatro años, ha estado trabajando en ellos, proporcionando formación, dándolos a conocer y hablando de ellos con todo el mundo. Lleva los últimos doce años trabajando en el desarrollo de software y desempeñando varias funciones: desarrollador, director de proyectos, director y mentor e ingeniero de software en organizaciones de control de calidad. Tiene una amplia experiencia que abarca múltiples tecnologías y campos: herramientas de desarrollo, telecomunicaciones por fibra óptica, aviación, café y compañías lácteas, así como tres años de enseñanza de informática y desarrollo de software en una universidad canadiense. Cuando no está desarrollando magníficas herramientas para desarrolladores y prestando asistencia a clientes de todo el mundo, le gusta emplear el tiempo con su familia y amigos, divertirse con juegos de XBOX y PC, leer literatura, leer sobre Porsche y soñar con conducir uno, jugar al hockey, ver los partidos de hockey de la NHL y fútbol americano de la NFL y disfrutar de magníficas cenas con buena comida y bebida con sus amigos y su familia. Vive con su familia en Sammamish (Washington).
Este libro está dedicado a mi esposa Hélène. Mi esposa ha sobrevivido a un cáncer de mama, y su valor y su fuerza me impulsan a hacer las cosas mejor y afrontar retos más complejos. Es preciosa; es mi ídolo, mi inspiración, mi sol, mi mejor amiga, mi amor y una madre fantástica. Mon amour, gracias por ser quien eres y por estar a mi lado. Te quiero.
x
Generar un programa con Microsoft Visual Basic 2005 Express
X1165138BDY.indb x
Agradecimientos En primer lugar, gracias a mis padres. Mamá, papá, vosotros me habéis dado todas las posibilidades para ser quien soy y me habéis inculcado los valores para ser el hombre que soy. Gracias. Os quiero. Un libro es una gran aventura en la vida de cualquier persona y no sería posible sin la ayuda de mucha gente. Yo siempre leo las secciones de agradecimientos de los libros de otros autores y siempre me ha maravillado la cantidad de personas que hacen falta para producir un libro. ¡Ahora entiendo por qué! Aunque escribir un libro requiere esfuerzo, mucho esfuerzo, al mismo tiempo es realmente satisfactorio. Durante el proceso de escritura a veces surgen dudas y siempre me han asaltado dudas, sobre todo en esas noches a las tres de la madrugada, cuando todas las demás personas de la casa están durmiendo, incluso mi
21/12/05 11:34:06
perro, y el producto tenía un error que me impedía probar algo; cuando me ponía delante de mi equipo portátil con una excepción y una página de Word en blanco; cuando todo el mundo estaba de vacaciones este verano mientras yo trabajaba en la biblioteca en Sammamish. No recuerdo cuántas veces he dicho a mis amigos “No, no puedo ir. Tengo que trabajar en el libro”. Pero escribir un libro es una tarea imponente; toda persona que tenga oportunidad de hacerlo debería afrontar el desafío. Dicho esto, mis primeros agradecimientos son para mi maravillosa familia. Mis hijos (Laura, de 11 años y Antoine, de 9) y mi esposa, Hélène, han sido fantásticos y de una inagotable PACIENCIA. ¡Cuántas veces les he oído decir, “Papá, esta noche vamos al cine… ah, sí, es verdad, estás trabajando en el libro”. ¡Pero al mismo tiempo, respetaban el espacio y el tiempo de soledad que necesitaba! Chicos, sois fantásticos y os quiero. También he de manifestar mi agradecimiento al equipo de formación MS Learning y al equipo de publicaciones. Deseo agradecer especialmente a Ben la ayuda que me ha prestado en el mundo de la escritura; a Sandra por su constante motivación, ayuda y sugerencias, y por ayudarme a superar todos los obstáculos que plantea escribir un libro; y a Megan, por toda la ayuda facilitada para terminar el trabajo y obtener un producto real y tangible. Tenéis todo mi respeto por trabajar día sí y día no en el alocado mundo editorial.
También deseo manifestar mi agradecimiento a todos los integrantes de los equipos de VB, C#, Windows Forms, MSDN y sistemas de instalación que me han prestado su ayuda contestando a todas mis preguntas en un ciclo de producción dinámico y en constante cambio. También tienen mi gratitud más específicamente Dan Fernández, Joe Binder, Brian Keller, Brian Johnson, Hong Gao, Jay Roxe, Kavitha Radhakrishnan, Kent Sharkey, Lisa Feigenbaum, Shamez Rajan, Steve Lasker, Aaron Stebner y Habib Heydarian. Un agradecimiento especial a Jeff Prosise por ser tan buen escritor, un profesor maravilloso y por escribir un blog sobre el proceso de escritura. Fuiste la chispa que prendió mi llama para escribir un libro técnico. Gracias también a mis compañeros del equipo de DDCPX por dirigirme siempre buenas palabras de ánimo, a Boris Feldman por compartir su experiencia como escritor y, por último, gracias a mi buen amigo John Cross por sus comentarios constructivos. Gracias a mis buenos amigos de la zona de Puget Sound por sus amables palabras de ánimo y a mi familia y amigos de Canadá por entender por qué no los llamo o no reciben noticias mías. ¡Perdonad, mamá y papá! Y gracias a mis buenos vecinos y amigos, Mike y Elizabeth, por su constante ánimo y por dejarme usar el nombre de su perro, Molly, en la introducción a la programación OOP. ¡Y gracias a todos los que se me hayan olvidado! Patrice Pelland Septiembre de 2005 Sammamish, WA
Chapter #: Chapter Title
X1165138BDY.indb xi
xi
21/12/05 11:34:10
X1165138BDY.indb xii
21/12/05 11:34:13
Capítulo 1 Introducción a Microsoft® Visual Basic® 2005 Express
1 ¿Qué es .NET?, 2 ¿Qué es Visual Basic 2005?, 4
¿Qué es Visual Basic 2005 Express?, 9
X1165138BDY.indb 1
Bien, así que ha decidido ponerse a programar y se ha encontrado con este libro. Si es así, ha llegado al sitio adecuado. Este libro tiene por objetivo presentarle el arte, la ciencia y la diversión que entraña la creación de software para Microsoft Windows®; sí, el mismo Microsoft Windows que probablemente use a diario. A lo largo del libro se explica cómo crear aplicaciones que son muy parecidas a muchas de las aplicaciones que se utilizan habitualmente, como un explorador de Internet, un procesador de textos, un programa de correo electrónico y una aplicación de finanzas personales. Seguramente se esté preguntando cómo podría hacerlo si no posee experiencia en programación. Cuando termine este libro, lo creerá. No se preocupe. Lo haremos directamente y, puesto que estará creando realmente las aplicaciones mientras realiza cada uno de los ejercicios, verá por sí mismo qué fácil puede llegar a ser.
1
21/12/05 11:34:13
¿Qué es .NET? Bien, ¿qué es .NET, eso de lo que todo el mundo habla? Puede que lo haya visto en línea en algún sitio o que haya encontrado el término en la sección de empleos del diario del domingo. Por ejemplo, el término puede haber aparecido al iniciar la sesión en Hotmail® o en un anuncio en línea en el que una empresa busca un desarrollador con conocimientos de .NET. Observe la Figura 1-1 para ver algunos ejemplos de dónde podría haber encontrado alguna referencia a .NET. El equipo del SDK de la plataforma está buscando un buen desarrollador para trabajar en nuestro equipo interno de herramientas. El equipo de herramientas produce herramientas y sitios Web que hacen un seguimiento del desarrollo con la API WinFX, informan de las métricas de nuestros SDK y hacen un seguimiento de las decenas de miles de archivos enviados a nuestros SDK para WinFX, .NET Framework y los sistemas operativos Microsoft Windows.
Figura 1-1 Algunos ejemplos de dónde podría encontrar referencias a .NET
Por sí mismo, el término .NET no significa mucho. Podría preguntar a diez personas distintas de este sector y recibiría diez respuestas diferentes. El término se utiliza mucho y con gran cantidad de significados distintos. De hecho, .NET se ha utilizado con un gran despliegue publicitario asociado, de manera parecida a lo que ha ocurrido con el término MP3. Por eso, en realidad, cuando oiga o lea el término .NET, debería pensar en .NET Framework. Ésta es una definición formal de .NET Framework: .NET Framework es una plataforma que permite desarrollar aplicaciones de software y bibliotecas denominadas “aplicaciones administradas”; proporciona el compilador y las herramientas necesarias para poder generar, depurar y ejecutar aplicaciones administradas. Para nuestros fines, podríamos decir que .NET es una plataforma que ofrece todo lo necesario para desarrollar y ejecutar aplicaciones administradas que se ejecutan en Windows. Decimos que las aplicaciones son administradas porque su ejecución está administrada por .NET Framework. De hecho, .NET Framework administra la ejecución proporcionando un entorno en tiempo de ejecución controlado que ofrece una amplia variedad de servicios, como cargar las aplicaciones, administrar la memoria y supervisar y mantener la seguridad 2
X1165138BDY.indb 2
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:19
y la integridad mientras la aplicación está en ejecución. En el pasado, las aplicaciones .NET (y de Java) no eran administradas porque no se ejecutaban en un entorno en tiempo de ejecución controlado. Ningún otro componente del sistema proporcionaba los servicios que ofrece .NET. Las aplicaciones debían administrar sus propios servicios, lo que en ocasiones provocaba código erróneo, carencias de seguridad y daños en los datos. A causa de estos problemas, resultaba difícil mantener y depurar las aplicaciones. .NET Framework proporciona una amplia variedad de herramientas, como compiladores, depuradores, lenguajes de programación, un motor de ejecución (denominado CLR o Common Language Runtime), herramientas para los desarrolladores, y una gran cantidad de bibliotecas predefinidas o “unidades de creación básicas”. Dichas bibliotecas se denominan Bibliotecas de clases de Framework (FCL, Framework Class Libraries). Puede considerar cada uno de los componentes de .NET como las unidades constructivas de una casa, como se puede ver en esta imagen. No vamos a aburrirle con todas las definiciones de cada uno de los bloques de construcción de esta casa porque explicaremos y usaremos la mayoría de ellos en los proyectos que vamos a llevar a cabo; cuando sea conveniente, iremos presentando los distintos componentes. Recuerde esta ilustración y vuelva a consultarla cuando lo necesite. Deben hacerse dos puntualizaciones sobre esta casa tan especial. En primer lugar, fíjese en el componente de color beige del lado derecho de la casa. No forma parte de .NET Framework, pero está en contacto con .NET Framework en todos los niveles. La cerradura de este componente indica que, a través de esta aplicación, puede desarrollar aplicaciones que le permitirán tocar todos los componentes de .NET Framework.
N OTA A lo largo de este libro, los términos marco de trabajo (framework) y .NET Framework se refieren a lo mismo.
I M P O R TA N T E
No es necesario disponer de Microsoft Visual Studio® para desarrollar aplicaciones .NET, pero utilizarlo ofrece muchas ventajas.
Capítulo 1: Introducción a Microsoft® Visual Basic® 2005 Express
X1165138BDY.indb 3
3
21/12/05 11:34:21
En segundo lugar, observe que Common Language Runtime (CLR) es la parte fundamental de los cimientos de la casa. Es un componente crucial de los cimientos porque es el motor que carga y administra la ejecución del código fuente. Todos los demás servicios necesarios para desarrollar aplicaciones se encuentran sobre CLR.
¿Qué es Visual Basic 2005? Visual Basic 2005 es uno de los lenguajes de programación disponibles que utilizan .NET Framework. Igual que cualquier otro idioma hablado o escrito, el lenguaje Visual Basic posee reglas de sintaxis y una serie de palabras válidas que se pueden usar para crear las aplicaciones. Visual Basic es una elección frecuente de los principiantes porque suelen creer que su sintaxis es más sencilla que la de otros muchos lenguajes de programación. Si ya ha usado alguna versión anterior de Visual Basic (como Visual Basic 4.x, 5.x o Visual Basic 6.0) para programar, encontrará algunas construcciones que le resultarán familiares y una interfaz de usuario (IU) conocida en Visual Basic 2005.
¿Es Visual Basic 2005 un lenguaje de programación orientada a objetos (OOP)?
MÁS INFORMACIÓN Con C++ puede desarrollar aplicaciones de procedimientos, aplicaciones puramente orientadas a objetos, o una combinación de ambas.
4
X1165138BDY.indb 4
Visual Basic 2005 es un lenguaje de programación orientado a objetos hecho y derecho. Hablemos ahora de lo que esto significa. La programación orientada a objetos (OOP, Object-oriented programming) es un estilo de programación (o paradigma de programación). Existen otros paradigmas de programación, como la programación funcional o de procedimientos. Los lenguajes como C, Fortran, Pascal y las versiones anteriores de Visual Basic son todos paradigmas de programación. Pero estos paradigmas están más centrados en las acciones, mientras que la programación orientada a objetos se basa más en los propios datos. Las aplicaciones que utilizan el paradigma de programación orientada a objetos se desarrollan usando lenguajes de tipo OOP (OOPL). Los primeros lenguajes OOPL aparecieron en la década de los 60, pero su uso se popularizó a finales de la década de los 70. En la actualidad se utilizan mucho porque la mayoría de las personas coinciden en que son fáciles de aprender, usar, depurar y mantener. Por ejemplo, los lenguajes de programación orientada a objetos representan fácilmente objetos del mundo real. Visual Basic 2005 es un lenguaje de tipo OOP, al igual que C#, C++, Java, SmallTalk y Lisp. Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:24
Los programadores utilizan la programación orientada a objetos para escribir programas que representan la división en módulos de las situaciones del mundo real. Esos módulos representan objetos del mundo real y se denominan clases o tipos. Puede considerar un programa de tipo OOP como una colección de objetos que interactúan entre sí. Mediante la programación orientada a objetos, los programadores definen nuevos tipos para representar objetos del mundo real, como un avión, una persona, un cliente, un perro o un vehículo. Estos tipos o clases crean objetos o instancias. Un objeto es una unidad que representa una instancia del mundo real. Se trata de una unidad autónoma porque incluye todos los datos y la funcionalidad asociados con ese objeto. Esto significa que cada objeto creado en una aplicación contiene toda la información que lo caracteriza (miembros de datos) y todas las acciones (métodos) que pueden tener acceso a esa información o modificarla. Éste es un ejemplo simple en Visual Basic 2005 que define la clase de una persona: 1
Public Class Person
2
‘Data members
3
Public Name As String
4
Public Address As String
5
Public City As String
6
Public State As String
7
Public ZIP As String
8
Public Country As String
9 10
‘ Methods
11
Overridable Sub Display()
12
Console.WriteLine(Name)
13
Console.WriteLine(Address)
14
Console.WriteLine(City)
15
Console.WriteLine(State)
16
Console.WriteLine(ZIP)
17 18 19
Console.WriteLine(Country) End Sub End Class
Esta clase incluye miembros de datos públicos y un método de presentación para imprimir el contenido del objeto en la consola. De forma predeterminada, el submétodo es público. La palabra clave overridable significa que una nueva clase derivada de esta clase podrá escribir su propia implementación del método de presentación (display). Capítulo 1: Introducción a Microsoft® Visual Basic® 2005 Express
X1165138BDY.indb 5
5
21/12/05 11:34:25
Para explicar estos conceptos utilizaremos otro ejemplo. Mi perro, Chopin, es una instancia de la clase Perro y la clase Perro es una subclase de la clase Animal. Puesto que Chopin es un Perro, tiene comportamientos y datos que son inherentes a los perros. Pero dado que Perro también es un Animal, Chopin también posee algunos datos y comportamientos de la clase Animal. Esto significa que la instancia Chopin de la clase Perro tiene miembros de datos que lo caracterizan, y métodos a los que puedo llamar en esa pequeña bola de pelo. Por ejemplo, a continuación se muestra la información de instancia del objeto Chopin: Datos ■ Raza: es un maltés. ■ Sexo: es un macho. ■ Peso: pesa 2,5 kilos. ■ Color: es blanco. ■ Nombre: se llama Chopin Chabispel. ■ Edad: tiene 1,5 años. Acciones ■ Habla (ladra). ■ Come. ■ Se mueve. ■ Duerme. Todos estos elementos de datos (raza, sexo, peso, color, nombre y edad) y acciones (hablar, comer, moverse y dormir) lo caracterizan, pero también pueden caracterizar a cualquier otro perro, como Molly, el perro de mi vecino. Y si lo piensa bien, esos elementos pueden caracterizar a cualquier animal. Esto significa que la clase Perro hereda los miembros de datos y los métodos de la clase Animal. Supongamos que desea desarrollar una aplicación para una clínica veterinaria. Para registrar los gatos que lleguen a la clínica, lo único que deberá hacer es crear una clase Gato que también herede de la clase Animal. A continuación, cada clase (Gato o Perro) podría 6
X1165138BDY.indb 6
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:27
reemplazar la funcionalidad de la clase Animal según fuera necesario. Por ejemplo, para la clase Gato, el método de hablar sería “maúlla” en lugar de “ladra”. Veamos de nuevo el ejemplo de la clase Person (persona). Esta vez, se agrega una clase Employee (empleado) que se deriva de la clase Person. La clase Employee se deriva de la clase Person mediante la palabra clave Inherits seguida del elemento Person. La palabra clave Overrides cambia la implementación del método Display(). 20 21
Public Class Employee Inherits Person
22 23
Public Level As Integer
24
Public Salary As Integer
25 26 27
Overrides Sub Display() Console.WriteLine(Name + “ is at level “ + Level.ToString() + <SoftReturn>
“ and has a salary of : “ + Salary.ToString() + “$”) 28
Console.WriteLine(“His address is:”)
29
Console.WriteLine(Address)
30
Console.WriteLine(City + “,” + State + “ “ + ZIP)
31 32 33
Habrá observado que en este libro algunas listas de código incluyen números de línea. Si una línea no incluye un número, indica que el código es continuación de la línea anterior. Algunas líneas de código pueden ser bastante largas y deben ajustarse para que quepan en la página impresa. Si tiene que escribir código en Visual Basic, no olvide poner en una única línea todo el contenido de una misma línea.
Console.WriteLine(Country) End Sub End Class
En este caso, la clase Employee hereda de la clase Person y, por tanto, recibe todos los campos de datos de esa clase base. No es necesario que la clase Employee redefina todos los campos de su definición porque los recibe automáticamente de Person. Por tanto, para la clase Employee, debe especificar sólo los datos que la diferencian de una instancia de la clase Person. Por ejemplo, una instancia de la clase Employee tendría una categoría y un salario, mientras que no tendrían por qué tenerlos todas las instancias de la clase Person. Además, cuando se llamara al método Display de Employee, dicho método podría agregar información de categoría y de salario al mensaje mostrado. La anterior ha sido una breve introducción a la programación orientada a objetos y a algunos de sus conceptos. Visual Basic 2005 es compatible con todos estos conceptos y con muchos más. A lo largo de este libro verá más conceptos de programación orientada a objetos y, cuando lo haga, aparecerán resaltados en un cuadro de información de ayuda para el lector. A continuación se ofrece el listado completo usado en esta sección con la adición de otra clase: la clase Customer. Capítulo 1: Introducción a Microsoft® Visual Basic® 2005 Express
X1165138BDY.indb 7
SUGERENCIA
V E A TA M B I É N En .NET, toda clase deriva en última instancia de la clase Object, incluso cuando no se especifique así.
7
21/12/05 11:34:28
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
8
X1165138BDY.indb 8
Imports System Public Class Person ‘Data members Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String Public Country As String ‘ Methods Overridable Sub Display() Console.WriteLine(Name) Console.WriteLine(Address) Console.WriteLine(City) Console.WriteLine(State) Console.WriteLine(ZIP) Console.WriteLine(Country) End Sub End Class Public Class Customer Inherits Person Public ID As Integer Public IsPartner As Boolean Overrides Sub Display() Dim partnerMessage As String If IsPartner Then partnerMessage = “ is a partner” Else partnerMessage = “ is not a partner” End If Console.WriteLine(“Customer ID: “ + ID.ToString()) Console.WriteLine(Name + partnerMessage) Console.WriteLine(Address) Console.WriteLine(City + “,” + State + “ “ + ZIP) Console.WriteLine(Country) End Sub End Class Public Class Employee
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:30
80 81 82 83 84 85 86 87 88 89 90 91 92
Inherits Person Public Level As Integer Public Salary As Integer Overrides Sub Display() Console.WriteLine(Name + “ is at level “ + Level.ToString() + “ and has a salary of : “ + Salary.ToString() + “$”) Console.WriteLine(“His address is:”) Console.WriteLine(Address) Console.WriteLine(City + “,” + State + “ “ + ZIP) Console.WriteLine(Country) End Sub End Class
Se trata de un caso sencillo, pero ilustra algunos conceptos básicos de la programación orientada a objetos.
¿Qué es Visual Basic 2005 Express? Visual Basic 2005 Express es la herramienta que utilizaremos a lo largo de este libro para aprender a desarrollar aplicaciones que se ejecutan en Windows. Las versiones Express de Visual Studio 2005 están diseñadas con la productividad como punto central. Al igual que ocurre con sus versiones análogas más completas, las versiones Express de Visual Studio 2005 son también lo que se denominan herramientas de Desarrollo rápido de aplicaciones (RAD), porque su filosofía está orientada a la productividad. Estas nuevas versiones de Visual Studio son fáciles de usar, fáciles de aprender y están racionalizadas, porque aunque contienen prácticamente los mismos componentes, no poseen toda la variedad de características incluidas en las versiones más completas de Visual Studio. La mayoría de las características y componentes de las versiones Express se han simplificado para suavizar la curva de aprendizaje y hacerlas más apropiadas para el desarrollador no profesional. La familia de Visual Studio 2005 Express está diseñada para los programadores principiantes; personas como usted que tienen curiosidad por la programación y que buscan una manera fácil de crear aplicaciones para Windows mientras aprenden a programar. Visual Basic 2005 Express es la herramienta ideal para desarrollar rápidamente aplicaciones para temas que le gustan de verdad o para sus aficiones. También se puede utilizar para ayudarle a facilitar su trabajo diario o las tareas escolares. Y lo que es más importante, puede divertirse con la herramienta mientras aprende a programar. Capítulo 1: Introducción a Microsoft® Visual Basic® 2005 Express
X1165138BDY.indb 9
9
21/12/05 11:34:31
¿Qué tipos de aplicaciones se pueden crear con Visual Basic 2005 Express? Con esta versión de Visual Studio 2005 podrá crear los siguientes tipos de aplicaciones: ■ Aplicaciones para Windows Aplicaciones que tienen una interfaz gráfica con botones, ventanas, menús, barras de herramientas, etc. como en Microsoft Word o Internet Explorer. ■ Aplicaciones de consola Aplicaciones que no poseen interfaz gráfica y que sólo utilizan el texto para comunicarse con los usuarios. Normalmente, son ventanas de comandos o ventanas de DOS. N OTA
■ Componentes reutilizables o bibliotecas de clases Un grupo de herramientas diseñadas para ayudar a crear otras aplicaciones.
En el Capítulo 2 veremos con más detalle qué tipos de aplicaciones se encuadran dentro de estas categorías.
Lo que no podrá crear son sitios Web ni servicios Web. Para crear cualquier tipo de aplicación Web, será necesario utilizar Microsoft Visual Web Developer™ 2005 Express.
¿Cuáles son las principales características que debe conocer? La lista siguiente, aunque no es completa, contiene las características esenciales de Visual Basic 2005 Express. Por el momento, no se preocupe si no comprende todas las características incluidas en la lista. Estas características se incluyen aquí porque en cierto sentido las encontrará todas en los ejemplos que creará. La mayoría de las características incluidas en la lista resaltan la filosofía de RAD. Aunque la intención es ofrecerle una visión general de las características más interesantes que pueden facilitarle las cosas, por sí solos, los nombres de las características no serán suficientes para comprender su significado. Por tanto, se incluye una breve descripción de sus aspectos básicos y de cómo ayudan a desarrollar aplicaciones. ■ Starter Kits integrados Aplicaciones totalmente desarrolladas con prácticas recomendadas y ejemplos incluidos. Estas aplicaciones le proporcionarán otro ejemplo en el que basar su aprendizaje. Serán un fantástico complemento para lo que vamos a hacer con este libro. ■ Documentación y tutoriales dirigidos a los principiantes Una manera rápida y fácil de obtener la información. También se incluyen ejemplos. 10
X1165138BDY.indb 10
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:33
■ IntelliSense® Proporciona sugerencias de sintaxis reales e incluso termina de escribir código automáticamente. ■ Fragmentos de código Ofrecen código para más de 200 tareas de programación que le ayudará a realizar de manera automática muchas tareas frecuentes. Los fragmentos de código muestran la forma recomendada de hacer algunas cosas. Se integran directamente en el entorno de desarrollo y son extensibles; es decir, con el tiempo Microsoft continuará proporcionando nuevos fragmentos de código y los miembros de las comunidades en línea también aportarán sus propios fragmentos de código. La extensibilidad de los fragmentos de código parece ser una característica muy cómoda que ayudará a las personas a compartir cosas útiles en las comunidades en línea. ■ La construcción My Esta nueva característica de Visual Basic proporciona un acceso sencillo a las clases más conocidas y las tareas comunes de .NET Framework. Permite realizar tareas sin conocer todos los aspectos internos de Framework. Estas tareas están bien empaquetadas y constituyen una manera fácil y limpia de llevar a cabo actividades. Aunque son similares a los fragmentos de código los elementos de la construcción My tienen oculto el código fuente y están empaquetadas en una sola línea de código. ■ Aplicaciones para manipulación de datos Estas aplicaciones permiten conectar con Microsoft SQL Server™ 2005 Express y agregar bases de datos y código para obtener acceso a estos datos desde sus aplicaciones. ■ Diseñador de Windows Forms Con estas nuevas herramientas puede diseñar fácilmente su aplicación para Windows, incluidas características como líneas de ajuste, para asegurarse de que los controles están alineados en el formulario, y la autocorrección, que le proporciona mensajes del compilador en tiempo real. No será necesario que compile el código para saber si hay errores; Visual Basic 2005 se los irá presentando a medida que escriba, e incluso le sugerirá posibles correcciones. ■ Servicios Web XML Este producto proporciona herramientas y asistentes fáciles de usar que le ayudarán a conectar con servicios Web basados en XML publicados y utilizar sus funcionalidades. ■ Nuevos controles de formularios Windows Forms Incluyen una impresionante lista de controles, que es una selección mayor que la de cualquier versión anterior de Visual Basic. Le ayudarán a crear interfaces de usuario con apariencia profesional. Capítulo 1: Introducción a Microsoft® Visual Basic® 2005 Express
X1165138BDY.indb 11
11
21/12/05 11:34:35
■ Etiquetas inteligentes La mayoría de controles de formularios Windows Forms incluidos con el producto incluyen etiquetas inteligentes. Como en muchas aplicaciones de Microsoft Office, las etiquetas inteligentes se representan mediante un pequeño triángulo negro o un icono y un pequeño triángulo negro asociado a un control. Las etiquetas inteligentes proporcionan acceso a las acciones más comunes que se pueden realizar en un control. ■ Implementación de ClickOnce Esta característica le permite publicar fácilmente sus aplicaciones en Internet, en una red de área local (LAN), en un recurso compartido de red o en un CD. Asimismo, simplifica la publicación de actualizaciones. ■ Editar y continuar Mientras esté depurando la aplicación, la característica Editar y continuar le permite modificar el código, desplazarse hacia delante y hacia atrás en el depurador, volver a ejecutar código, agregar funcionalidad o corregir errores sobre la marcha sin necesidad de detener la ejecución del programa. ■ Visualizadores del depurador Mientras esté depurando su aplicación, los visualizadores ofrecen una manera sencilla de obtener representaciones legibles de los datos de su aplicación. Ofrecen una representación legible de los datos almacenados, incluso para los tipos más complejos de los lenguajes ADO.NET o el lenguaje de marcado extensible (XML). ■ Acceso a las comunidades y página de inicio Gracias a estas características puede obtener acceso a información adicional contenida en comunidades en línea y en distintas fuentes de ayuda en línea, incluidos diversos canales RSS (Rich Site Summary o Really Simple Syndication). (RSS es una familia de formatos de archivos XML; su uso está muy extendido entre los sitios Web de noticias y las comunidades de blogs.) ■ Entorno de desarrollo simplificado Todo el entorno de desarrollo está creado para facilitar el acceso a funcionalidades, herramientas y objetos clave. Como puede ver, Visual Basic 2005 Express incluye muchas características muy útiles para ayudar a los nuevos programadores a desarrollar aplicaciones de forma rápida y divertida. Estas características le servirán de guía incluso cuando no tenga la seguridad de qué sintaxis o componentes usar y acelerarán significativamente su aprendizaje del producto.
12
X1165138BDY.indb 12
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:36
En resumen... Ahora ya sabe que .NET es un marco de trabajo compuesto de compiladores, herramientas, lenguajes, depuradores y un motor de ejecución. CLR, o Common Language Runtime, es ese motor de ejecución al que corresponde la carga y la ejecución de aplicaciones administradas. En esencia, .NET es como una casa en la que Common Language Runtime es la base sobre la que se construyen todos los demás servicios. También hemos dicho que Visual Basic 2005 es un lenguaje de programación orientado a objetos cuya sintaxis es más sencilla que la de otros lenguajes de programación modernos. También hemos comenzado a explicar qué es la programación orientada a objetos y a aprender los aspectos básicos de la programación orientada a objetos en Visual Basic 2005. Este capítulo ofrece la oportunidad de conocer las características de Visual Basic 2005 Express y cómo se pueden crear tres tipos distintos de aplicaciones adaptadas a sus aficiones, su trabajo o las necesidades escolares. En el capítulo siguiente, aprenderá a instalar Visual Basic 2005 Express.
Capítulo 1: Introducción a Microsoft® Visual Basic® 2005 Express
X1165138BDY.indb 13
13
21/12/05 11:34:38
X1165138BDY.indb 14
21/12/05 11:34:38
Capítulo 2 Instalación de Visual Basic 2005 Express
2 Preparativos para instalar Visual Basic 2005 Express, 16 Instalación de Visual Basic 2005 Express, 17
X1165138BDY.indb 15
En este capítulo, instalará el producto y comenzará a conocer los componentes incluidos con el mismo. Le guiaremos a lo largo de todos los pasos de esta instalación para que pueda empezar a crear directamente aplicaciones usando Microsoft® Visual Basic® 2005 Express. Trataremos algunos escenarios de instalación comunes, ofreceremos algunas sugerencias y explicaremos qué hacer si ocurre algo inesperado. El proceso de instalación es fácil y sencillo, en consonancia con el espíritu de los productos de la edición Express.
15
21/12/05 11:34:39
Preparativos para instalar Visual Basic 2005 Express Hay varias posibilidades distintas de instalar Visual Basic 2005, especialmente si ya ha tenido versiones anteriores instaladas en el pasado o si instaló una versión anterior del producto. Antes de iniciar la instalación, asegúrese de que su equipo cumple las recomendaciones de software y hardware. Para obtener toda la información necesaria puede revisar la introducción de este libro. También es aconsejable asegurarse de que el equipo tiene instaladas las actualizaciones más recientes publicadas en Windows Update (http://windowsupdate.microsoft.com) o en Microsoft Updates (http://update.microsoft.com). Así tendrá confirmación de que su equipo dispone de las actualizaciones de seguridad más recientes junto con algunos requisitos previos a la instalación antes de comenzar la instalación del producto propiamente dicha. Si tiene instalada y en ejecución alguna aplicación antivirus o de protección contra programas de spyware, este software de protección podría preguntarle si desea permitir que se ejecuten determinadas tareas de instalación. Por ejemplo, con la versión más reciente de Microsoft Windows® AntiSpyware Beta (http://www.microsoft.com/athome/security/spyware/software/ default.mspx) se me preguntó dos veces si deseaba permitir que continuaran determinadas tareas y otras tantas veces el producto de protección contra programas de spyware reconoció el origen y simplemente me lo notificó y continuó. Ésta es la experiencia que tuve con el producto de Microsoft. Si está utilizando otra aplicación de protección contra software espía, su experiencia podría ser ligeramente distinta, pero presentaría similitudes con este proceso. Los productos antivirus y contra software espía ofrecen una oportunidad de confirmar el origen del producto que está a punto de instalar. Si está seguro de que procede de Microsoft, permita a la aplicación de instalación que continúe con su actividad autorizando la acción. Durante la instalación, si algo va mal, seguramente no sea la única persona que encuentre este problema. Lo primero que debe hacer es consultar la información de tipo Léame más reciente mantenida por el equipo de preparación de instalaciones en MSDN y seguir los pasos ofrecidos para solucionar los problemas de instalación. Los siguientes son dos vínculos de MSDN®: ■ Léame en línea de Express: http://go.microsoft.com/fwlink/?LinkId=51322 ■ Problemas conocidos en línea de Express: http://go.microsoft.com/fwlink/?LinkId=51325 Instalación simultánea Si tiene alguna versión anterior de Microsoft Visual Studio®, como Visual Studio 2002 o Visual Studio 2003, instalar Visual Basic 2005 Express o cualquier otro producto de Visual Studio 2005 será sencillo. Esta situación se considera como una ejecución simultánea y puede pasar directamente a la sección dedicada a la instalación del software. 16
X1165138BDY.indb 16
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:45
Versiones anteriores de Visual Basic 2005 Express Si tiene una versión preliminar, en especial una versión preliminar Beta2 de Visual Basic 2005 Express o cualquier versión de Visual Studio 2005, como CTP (Community Technology Preview) o una versión Beta, debe desinstalar las versiones preliminares de todos los componentes antes de instalar esta nueva versión. Los componentes de software deben desinstalarse siguiendo un orden concreto para que la nueva instalación se realice correctamente. La información más actualizada para desinstalar versiones preliminares del producto se puede consultar en la siguiente página de ayuda de MSDN: http://go.microsoft.com/fwlink/?LinkId=47062. Las versiones preliminares (anteriores a Beta2) son una versión publicada en las primeras fases del ciclo de desarrollo del producto final. Oficialmente, Microsoft no ofrece asistencia para ellas, por lo que cuando instale versiones preliminares Beta o CTP, debe tener en cuenta que el producto está sometido a continuos cambios, lo que al final se refleja en el proceso de instalación. Al desinstalar una versión preliminar de cualquier software, es posible que aparezcan problemas. En un momento dado puede que no le quede otra opción que volver a dar formato a su disco duro e instalar de nuevo el sistema operativo. No es ninguna situación infrecuente al trabajar con una versión preliminar del software. Pero esta situación tiene solución. Antes de comenzar el procedimiento de desinstalación, como medida de precaución, es conveniente realizar una copia de seguridad de todos los datos. Si es posible, también es aconsejable evitar instalar versiones preliminares de cualquier producto en el equipo de trabajo principal. Usar un equipo de pruebas (o software virtual) le ayudará a evitar la pérdida de datos importantes y la productividad no se verá afectada en caso de que algo vaya mal. Para obtener más información sobre la solución virtual que ofrece Microsoft, puede examinar Microsoft Virtual PC 2004 en la dirección http://www.microsoft.com/windows/virtualpc/default.mspx.
PRECAUCIÓN Lea atentamente esta sección de la página de ayuda de MSDN antes de iniciar el proceso de desinstalación.
N OTA A pesar de que las versiones preliminares del software no reciben asistencia oficial de Microsoft, en el sitio de Microsoft encontrará recursos que le ayudarán con la instalación. En concreto, encontrará información acerca de cómo desinstalar los productos (y en qué orden hacerlo).
Instalación de Visual Basic 2005 Express Ahora que hemos tratado muchos de los posibles problemas y que su equipo está listo, puede continuar con la instalación. Al final de este libro, encontrará un CD o un DVD que contiene una edición funcional completa del producto. Sólo ha de introducirlo en cualquier unidad de CD o DVD disponible del sistema y seguir los pasos descritos a continuación. Capítulo 2: Instalación de Visual Basic 2005 Express
X1165138BDY.indb 17
17
21/12/05 11:34:46
PARA INSTALAR VISUAL BASIC 2005 EXPRESS Si está habilitada la función de ejecución automática, el proceso de instalación debería comenzar
1 automáticamente. Si no ocurre así transcurridos unos segundos, siga estos pasos: a. Haga clic en el botón Inicio y, a continuación, en Mi PC.
b. Haga clic con el botón secundario del mouse (ratón) en la unidad de CD o DVD donde está el disco y seleccione Explorar. c. En la lista de archivos, busque el archivo Setup.exe y haga doble clic en él para iniciar el Asistente para la instalación. Transcurridos unos segundos, verá que el programa de instalación está copiando todos los archivos
2 de instalación necesarios a una carpeta temporal, como se muestra en la figura 2-1. Figura 2-1 Copia local de los archivos de instalación en una carpeta temporal
Una vez finalizada la copia de archivos, la aplicación de instalación se carga en la memoria. Mientras
3 se carga la aplicación, verá una barra indicadora de progreso de la inicialización, como se muestra en
la Figura 2-2. Figura 2-2 Inicialización del proceso de instalación
18
X1165138BDY.indb 18
N OTA En este punto, lo único que le resta por hacer es esperar. La espera no debería ser larga: menos de un minuto en la mayoría de los casos, dependiendo de la velocidad del equipo.
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:48
A continuación, se abrirá la página de bien-
4 venida (Figura 2-3), que incluye información
sobre el producto y las posibilidades que tendrá al trabajar con él. También se le notificará si el equipo no cumple algún requisito previo para cargar el software. Haga clic en Siguiente para continuar o en Cancelar para salir del programa de instalación.
Figura 2-3 Página de bienvenida
Para continuar con el proceso de instalación,
5 debe leer y aceptar el contrato de licencia
(Figura 2-4). Léalo atentamente para ver lo que puede hacer y lo que no puede hacer con este producto. Cuando haya terminado y esté listo para aceptar el contrato de licencia, active la casilla de verificación y haga clic en Siguiente para continuar.
Figura 2-4 Contrato de licencia
Capítulo 2: Instalación de Visual Basic 2005 Express
X1165138BDY.indb 19
19
21/12/05 11:34:49
Aparecerá la página Opciones de instalación,
6 como se puede ver en la figura 2-5. En esta
página, asegúrese de especificar que desea tener acceso al sistema de Ayuda (MSDN Express Library) y a Microsoft SQL Server™ 2005 Express. N OTA El único motivo para no instalar la Ayuda local de MSDN o SQL Server 2005 Express es que el espacio en el disco duro sea limitado. Asegúrese de que conoce las implicaciones de las selecciones realizadas. Si no instala MSDN Express Library, necesitará acceso a Internet para obtener ayuda en MSDN Online. Si no instala SQL Server 2005 Express, no podrá crear aplicaciones que requieran acceso a otros orígenes de datos, como información de bases de datos de Microsoft Access, archivos en lenguaje de marcado extensible (XML) u otros tipos de información RDBMS. Además, algunos de los archivos de ejemplo de este libro no funcionarán automáticamente y será necesario efectuar algunas modificaciones o reinstalaciones para que funcionen.
Figura 2-5 Establezca aquí las opciones de instalación
SQL Server 2005 Express es un sistema de administración de bases de datos relacionales (RDBMS) que le permitirá manipular fácilmente datos desde la aplicación. Este paso es muy importante. Por ejemplo, si va a crear la aplicación de administración de su colección de DVD, que es uno de los Kits de inicio, todos los datos relacionados con su colección de DVD deberán estar almacenados en una base de datos que utilice SQL Server 2005 Express.
7 Cuando haya realizado las selecciones correspondientes, haga clic en Siguiente para continuar.
Aparecerá la página Carpeta de destino, como se
8 puede ver en la figura 2-6. En esta página se pre-
gunta en qué lugar del equipo se va a instalar el software. Es recomendable utilizar la ubicación predeterminada. PRECAUCIÓN
Figura 2-6 Carpeta de destino
20
X1165138BDY.indb 20
Si elige instalar el software en una carpeta distinta a la predeterminada recomendada, puede que aparezcan problemas al trabajar con algunas de las rutas de acceso y archivos mencionados en el libro. Si lo instala en una ubicación distinta, tenga la seguridad de que incluirá notas de precaución cuando puedan aparecer problemas.
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:51
Haga clic en Instalar para dar comienzo a la
9 instalación. Aparecerá la barra indicadora de
progreso de la instalación y ésta estará en proceso (vea la Figura 2-7). Puede que sea un buen momento para hacer un descanso, porque la instalación puede tardar cierto tiempo. N OTA El tiempo de instalación variará en función de las opciones seleccionadas en la página anterior. Como media, si seleccionó tanto MSDN Library como SQL Server 2005 Express, la instalación debería tardar entre 10 y 30 minutos, dependiendo de la velocidad del equipo.
La siguiente es una lista de los componentes que se instalarán: N OTA En algunos equipos, dependiendo de la versión de Windows, cuando haya terminado la instalación de .NET Framework, puede que se le pida que reinicie el equipo para que continúe la instalación.
Figura 2-7 Progreso de la instalación
■ .NET Framework 2.0 Ésta es la casa que ilustramos en el Capítulo 1. ■ Visual Basic 2005 Express Ésta es la herramienta propiamente dicha, que era el bloque de color beige que representaba la puerta de la casa del Capítulo 1. ■ MSDN Express Library Esta opción se explicó anteriormente. ■ SQL Server 2005 Express Este componente se explicó anteriormente. Aparece la página Instalación completada (vea la Figura 2-8) y la instalación habrá finalizado. No ha sido tan difícil, ¿verdad? Antes de hacer clic en el botón Salir, lea las notas siguientes. Figura 2-8 Instalación completa
Capítulo 2: Instalación de Visual Basic 2005 Express
X1165138BDY.indb 21
21
21/12/05 11:34:52
N OTA En el futuro se agregarán más productos a esta lista.
Siempre que instale una nueva aplicación, es recomendable ir al sitio de actualizaciones de Microsoft (http://update.microsoft.com) o a Windows Update (http://windowsupdate.microsoft.com) para obtener todas las actualizaciones de alta prioridad. O bien, puede hacer clic en el hipervínculo de Windows Update que aparece en la aplicación de instalación, como se puede ver en la Figura 2-8. Yo prefiero usar el sitio de actualizaciones de Microsoft porque así se obtienen todas las actualizaciones necesarias para todo el software de Microsoft que ya está instalado en la unidad de disco duro. Obtendrá todas las actualizaciones de Windows, Office y .NET Framework junto con las actualizaciones de los controladores de hardware, todo ello en un solo lugar. También es importante comprobar que la aplicación antivirus y sus firmas de virus están actualizadas, y que tiene instalado un programa actualizado de protección contra programas de spyware. Una última cosa: si tiene instalado en su equipo el Service Pack más reciente, en el Panel de control debería aparecer el Centro de seguridad. Si no dispone de él, actualice el sistema operativo con el Service Pack más reciente (sólo disponible en Microsoft Windows Server™ 2003 y Windows XP). Abra el Centro de seguridad y asegúrese de que todos los indicadores de Firewall, Protección antivirus y Actualizaciones automáticas están en color verde. Si no es así, solucione esos problemas para evitar peligros de seguridad. Haga clic en el botón Salir cuando haya terminado. Al salir, la aplicación de instalación enviará mensajes sobre la instalación a los servidores de Microsoft, como se puede ver en la Figura 2-9.
Figura 2-9 La aplicación de instalación envía información sobre la instalación a los servidores de Microsoft.
22
X1165138BDY.indb 22
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:34:54
En resumen... Este capítulo está dedicado a la instalación de Visual Basic 2005 Express. En él se han tratado la mayoría de los problemas que pueden aparecer durante la instalación, distintos escenarios de instalación y, asimismo, se han proporcionado vínculos a MSDN para obtener más ayuda. Una vez realizado el trabajo descrito en este capítulo, debería tener instalados .NET Framework 2.0, Visual Basic 2005 Express, MSDN Express Library y SQL Server 2005 Express y preparados para funcionar. Su equipo debe estar al día con todas las actualizaciones instaladas y todos los ajustes relacionados con la seguridad marcados en color verde. Cuando esté preparado para explorar el entorno de desarrollo integrado (IDE) y escribir sus dos primeras aplicaciones, pase al capítulo siguiente.
Capítulo 2: Instalación de Visual Basic 2005 Express
X1165138BDY.indb 23
23
21/12/05 11:34:56
X1165138BDY.indb 24
21/12/05 11:34:56
Capítulo 3 Crear su primera aplicación
3 Dos tipos de aplicaciones: ¿qué diferencia hay?, 26 Introducción, 27
Continuación por los proyectos, 31
X1165138BDY.indb 25
Ya conoce Microsoft® Visual Basic® 2005 Express; ahora es el momento de crear su primera aplicación. Este capítulo comienza explicando las diferencias entre una aplicación de consola y una aplicación para Windows. Después conocerá el Entorno de desarrollo integrado (IDE). Como su nombre indica, el IDE es la aplicación que proporciona todas las herramientas que necesita para diseñar, planear, desarrollar y distribuir sus aplicaciones. Podíamos haber utilizado cualquier editor de texto, como el Bloc de notas por ejemplo, pero en este capítulo y en el resto del libro utilizará el IDE para crear sus aplicaciones. La mayoría de los libros de programación suelen empezar con una aplicación bastante sencilla denominada Hello World! Su primera aplicación también será una aplicación sencilla, pero creará una aplicación que hace algo más que simplemente decir “hola” a todos. En este capítulo aprenderá a crear una aplicación que suma dos números y muestra un resultado. Con esta aplicación también aprenderá a utilizar el Explorador de soluciones, así como la documentación y el sistema de Ayuda integrado en Visual Basic 2005 Express.
25
21/12/05 11:34:57
Dos tipos de aplicaciones: ¿qué diferencia hay?
N OTA El SP2 de Windows XP incluye unas cuatro docenas de servicios de Windows. Por ejemplo, un servicio de Windows valida su nombre de usuario y su contraseña en el inicio.
Como hemos mencionado en la página anterior, va a crear dos versiones de la misma aplicación: una aplicación de consola y una aplicación para Microsoft Windows®. Quizás se pregunte por qué tiene que preocuparse de esta distinción cuando va a crear un programa. Bueno, a veces su aplicación no puede o no necesita tener una interfaz gráfica. Por ejemplo, algunas aplicaciones deben ejecutarse en una secuencia de comandos o en un archivo por lotes, o no pueden tener una interfaz gráfica porque no hay ningún usuario que interaccione con ella. En otros casos no necesitará una interfaz gráfica para una aplicación para Windows. Por ejemplo, un servicio de Windows es una aplicación que se ejecuta en Windows en segundo plano: no tiene interfaz de usuario, no produce ningún resultado visual, se inicia cuando se inicia Windows y no necesita que un usuario inicie sesión para que comience a ejecutarse. En otros casos, no desea que los usuarios interactúen con una interfaz gráfica que usted ha creado. Por ejemplo, podría escribir una aplicación que supervisara la memoria física disponible en un equipo y mostrara dicha información una vez que alcanzara un determinado nivel. La información se muestra en una interfaz de usuario, pero no se necesita que el usuario introduzca ningún dato. La figura 3-1 muestra el resultado de la famosa aplicación Hello World! como una aplicación de consola.
Figura 3-1 Aplicación de consola
Este tipo de aplicación se denomina aplicación de consola porque todo se muestra en una ventana de la consola del sistema. Quizás haya oído referirse a estos tipos de ventanas por muchos nombres diferentes: ventana de DOS, ventana de símbolo del sistema o simplemente ventana de comandos. El resultado más frecuente de una aplicación de consola es simplemente texto.
26
X1165138BDY.indb 26
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:03
Las aplicaciones de consola pueden ser tan ricas y complejas como las aplicaciones para Windows. La única diferencia es que no tienen interfaz gráfica. Veamos un uso posible de las aplicaciones de consola. En los centros de datos corporativos, muchas aplicaciones se ejecutan día y noche, produciendo una gran cantidad de datos. Llevaría mucho tiempo y sería problemático confiar en que la gente comprobara los datos. Por eso, los centros de datos suelen estar muy automatizados para facilitar este trabajo. Las aplicaciones de consola producen, manipulan y comprueban los datos en secuencias de comandos o en archivos por lotes. Las aplicaciones de consola pueden escribirse en muchos lenguajes de programación (C, C++, C#, Visual Basic, etc.) y en lenguajes de secuencias de comandos (Perl, Python o JScript®) diferentes. Al contrario que una aplicación de consola, una aplicación para Windows tiene una interfaz gráfica, como se ilustra en la figura 3-2. (También se denomina aplicación de formularios Windows Forms en .NET.) Estas aplicaciones suelen instalarse y ser accesibles desde el menú Inicio de Windows, y de forma predeterminada comparten algunas características comunes, como un botón Cerrar, un botón Maximizar y un botón Minimizar. Figura 3-2 Aplicación para Windows
Botón Cerrar
Botón Maximizar
Botón Minimizar
Introducción Para empezar a escribir el código de la primera versión de la aplicación, tendrá que iniciar Microsoft Visual Basic 2005 Express. Para ello, siga estos tres pasos sencillos: haga clic en Inicio, elija Todos los programas y seleccione Microsoft Visual Basic 2005 Express. N OTA Tenga en cuenta que las aplicaciones de consola se siguen ejecutando en Windows, pero en el contexto de una consola.
Capítulo 3: Crear su primera aplicación para Windows
X1165138BDY.indb 27
Texto simple y caracteres ASCII El texto simple (también denominado caracteres ASCII) es el resultado habitual de una aplicación de consola, pero algunas aplicaciones de consola utilizan caracteres gráficos ASCII. (ASCII es el acrónimo inglés de American Standard Code for Information Interchange.) Un código ASCII es la representación numérica de un carácter (como “0” o “#”) o una acción de algún tipo. (Por ejemplo, presionar Entrar en un procesador de textos para mover una línea de texto es una acción representada por un carácter ASCII.) El juego de caracteres gráficos ASCII, también denominados caracteres ASCII extendidos, incluye líneas verticales, líneas dobles verticales, esquinas y otros muchos. Los caracteres ASCII se utilizan a veces para crear cuadros alrededor del texto en las aplicaciones de consola.
27
21/12/05 11:35:04
Figura 3-3 Configuración de entorno para la primera vez que se utiliza Microsoft Visual Basic 2005 Express
Barra de menús Cuadro de herramientas
La primera vez que inicie Microsoft Visual Basic 2005 Express tardará un tiempo en cargarse mientras se configura el IDE. Debe ver una pantalla similar a la mostrada en la figura 3-3. Antes de continuar, hagamos una pausa y admiremos el IDE en todo su apogeo. Con esta versión de Visual Basic, el IDE tiene una nueva transformación. Observe la figura 3-4 y sienta la excitación. Si no siente la excitación todavía, pronto la sentirá. El entorno de desarrollo se ha diseñado para poner mucha más información a su disposición y hacer que sea más productivo antes. Desde esta pantalla, todo lo que necesita para generar una aplicación está disponible con un par de clics. Desde el IDE escribe el código, compila el código, inicia la aplicación, busca los errores y los corrige, obtiene Ayuda sobre la sintaxis y muchas otras cosas. Además, el IDE de Visual Basic 2005 está diseñado Barra de herramientas principal Explorador de soluciones
Proyectos recientes
Suministro RSS Visual Basic de MSDN
Introducción
Titulares de Visual Basic Express Barra de estado
28
X1165138BDY.indb 28
Figura 3-4 El IDE en todo su esplendor
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:07
para ayudarle generando mucho código automáticamente de forma que tenga que escribir menos. Si no tuviera el IDE y deseara escribir una aplicación de formularios Windows Forms, normalmente tendría que escribir mucho más código y sería más propenso a errores. Con el nuevo IDE, la mayoría de las acciones que realice generarán automáticamente mucho código. A medida que dedique más tiempo con el programa, verá que hay muchas formas diferentes de realizar las mismas acciones. Por ejemplo, para realizar una acción determinada puede utilizar una serie de opciones de menú, utilizar un método abreviado de teclado o hacer clic en un icono de una barra de herramientas, hacer clic en un hipervínculo de una página o hacer clic con el botón secundario del mouse (ratón) y elegir una opción en un menú contextual. Antes de zambullirnos en nuestra primera aplicación y escribir código, veamos cada componente principal del IDE. La primera página que verá es realmente útil: es la página de inicio. Veamos qué información contiene dicha página. ■ Proyectos recientes Aquí puede ver la lista de los proyectos o las soluciones que ha abierto recientemente. También puede crear un proyecto nuevo o abrir un proyecto existente que no está en la lista. ■ Introducción Yo llamo Centro de ayuda a esta útil sección, ya que si necesita ayuda rápida, éste es uno de los mejores lugares para obtener respuestas. Tanto si necesita ayuda con algunas construcciones de Visual Basic como si desea ver una lista de artículos Cómo o simplemente desea hipervínculos a comunidades de programadores, suele poder encontrar ayuda en la sección Introducción del IDE. ■ Titulares de Visual Basic Express Aquí es donde encontrará noticias específicas acerca de Visual Basic Express procedentes de Microsoft. Estos titulares de producto ofrecen mensajes especiales relativos a Visual Basic 2005 Express, y anuncian actualizaciones del producto, nuevas versiones, nuevos fragmentos de código o cualquier cosa que necesite una atención especial por su parte.
Capítulo 3: Crear su primera aplicación para Windows
X1165138BDY.indb 29
N OTA En el capítulo 5 verá cómo y dónde buscar este código generado.
SUGERENCIA Aunque la página de inicio desaparezca, siempre puede volver a verla si va al menú Ver y selecciona Página de inicio. La primera y única regla de este libro es no tener miedo de experimentar. Haga clic, vea, lea y pruebe siempre que sea posible. Realmente es la mejor forma de aprender. A lo largo de este libro le ofreceré material, sugerencias y trucos importantes, pero mi consejo es que vaya más allá de estos ejemplos y pruebe, pruebe y pruebe . . .
29
21/12/05 11:35:08
N OTA Microsoft Developer Network (MSDN) es un conjunto de servicios en línea y sin conexión diseñado para ayudar a los desarrolladores a escribir aplicaciones utilizando productos y tecnologías de Microsoft.
N OTA Algunos hipervínculos de la página de inicio requieren tener una conexión activa con Internet. Si no puede leer los hipervínculos, compruebe el estado de su conexión a Internet.
■ Canales MSDN Esta sección de la página de inicio incluye hipervínculos a artículos de uno de los canales de MSDN RSS (Microsoft Developer Network Really Simple Syndication). Estos artículos pueden configurarse en cualquier canal RSS válido del Web. El valor predeterminado es el canal RSS de MSDN® Visual Basic 2005 Express. Estos artículos son distintos de los Titulares de Visual Basic Express; en algunas ocasiones pueden ser iguales, pero los artículos de MSDN abarcan no sólo Visual Basic Express, sino temas que incluyen Visual Studio Team Systems, Microsoft SQL Server™, servicios Web, N O T A Si no ve Inicio y otras etc. Puede modificar el canal si selecciona Opciones en el configuraciones en el cuadro de diálogo Opciones, asegúrese de menú Herramientas, expande Entorno, selecciona Inicio y que activó la casilla de verificación actualiza el campo Canal de noticias de la página de inicio Mostrar todas las configuraciones en la esquina inferior izquierda del con un canal RSS válido que desee. cuadro de diálogo Opciones.
Componentes del IDE Algunos componentes importantes del IDE no forman parte de la página de inicio. ■ Barra de menús Aquí es donde puede seleccionar y realizar casi todas las acciones posibles relacionadas con sus proyectos, archivos y Ayuda. Las opciones disponibles cambian según el contexto actual. Por ejemplo, cuando no tiene ningún proyecto abierto hay menos menús: sólo Archivo, Edición, Ver, Herramientas, Ventana, Comunidad y Ayuda. Cuando hay un proyecto abierto, también aparecen los menús Proyecto, Generar, Depurar y Datos. ■ Barra de herramientas principal Esta barra de herramientas contiene iconos que son básicamente accesos directos a acciones que también puede realizar desde los menús. ■ Cuadro de herramientas Si se desplaza por el cuadro de herramientas situado en la parte izquierda de la pantalla Página de inicio, se expandirá. Si no hay ningún proyecto abierto, el cuadro de herramientas debe estar vacío. El cuadro de herramientas contiene controles que se utilizan en las aplicaciones. En este momento, puede considerar los controles como elementos visuales de las aplicaciones para Windows que poseen una interfaz gráfica. Por ejemplo, una vez abierto un proyecto, el cuadro de herramientas incluirá botones, etiquetas, controles de cuadro de texto, menús, barras de herramientas, etc. Estos controles se definen y explican con más detalle en el capítulo 5. 30
X1165138BDY.indb 30
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:10
■ Explorador de soluciones Esta característica enumera los archivos y los componentes de su proyecto. Si no hay ningún proyecto abierto, debe estar vacío. Más adelante en este capítulo veremos más detalles acerca del Explorador de soluciones. ■ Barra de estado La barra de estado muestra una gran variedad de información correspondiente al estado de ciertas operaciones activas. Por ejemplo, cuando cargue un proyecto verá en la pantalla un mensaje similar a “Cargando proyecto c:\blabla\blabla. vbproj del disco duro”. Cuando esté generando una aplicación verá algo parecido a “Operación Generar iniciada” y cuando la aplicación haya terminado, verá “Generación satisfactoria” o “Error al generar”, dependiendo del éxito del proceso.
Continuación por los proyectos A partir de ahora, se centrará en lo que realmente hemos venido a hacer: generar algunos proyectos. Así que empecemos por nuestra primera aplicación. Primero generaremos la versión de consola de la aplicación.
Generar una aplicación de consola Hemos estado hablando de lo que puede hacer una aplicación de consola y de su apariencia, así que ¿por qué no generamos una? En esta sección creará una aplicación matemática sencilla.
SUGERENCIA En el caso de las demostraciones y los ejemplos, le recomiendo que escriba todo el código fuente para que vea y entienda mejor los conceptos. Sin embargo, si se trata de listas de código fuente más extensas, también puede descargar los ejemplos de código terminados. (http://www.microsoft.com/mspress/ companion/0-7356-2213-2/)
PARA GENERAR UNA APLICACIÓN DE CONSOLA Si Visual Basic 2005 Express no está en ejecución, inícielo haciendo clic en Inicio/Todos los
1 programas/Microsoft Visual Basic 2005 Express.
Puede empezar a generar su aplicación haciendo clic en el icono Nuevo proyecto de la barra de
2 herramientas, seleccionando Crear: Proyecto . . . en la página de inicio o haciendo clic en Archivo/
Nuevo proyecto en la barra de menús.
En el cuadro de diálogo Nuevo proyecto, seleccione Aplicación de consola en la sección Plantillas y
3 escriba MyFirstConsoleApplication en el cuadro Nombre. El cuadro de diálogo Nuevo proyecto
debe ser similar al que se muestra en la figura 3-5. Haga clic en Aceptar cuando esté preparado para continuar en el paso siguiente.
Capítulo 3: Crear su primera aplicación para Windows
X1165138BDY.indb 31
31
21/12/05 11:35:12
N OTA De manera predeterminada, en Visual Basic 2005 Express, al hacer clic en Aceptar los proyectos se crean en una ubicación temporal. Cuando guarda o cierra el proyecto, los archivos se guardan en Mis documentos\Visual Studio 2005\Projects. Puede cambiar la ubicación predeterminada de los proyectos si va a Herramientas/ Opciones/Proyectos y soluciones y busca el primer cuadro de texto denominado Ubicación de proyectos de Visual Studio. Más adelante en este capítulo y también en el capítulo 5 verá qué son esos archivos y su contenido.
Figura 3-5 Crear una aplicación de consola utilizando el cuadro de diálogo Nuevo proyecto
Ahora debe ver el IDE en un estado inactivo a la espera de que escriba el código de la aplicación. Su pantalla debe tener una apariencia parecida a la de la figura 3-6.
Introducción al Explorador de soluciones Antes de escribir el código, debe conocer el Explorador de soluciones. Como puede ver en la parte derecha de la pantalla de la figura 3-6, el Explorador de soluciones ofrece una vista organizada de sus proyectos y de todos los archivos asociados a los mismos, así como algunos comandos útiles en forma de una barra de herramientas. En el Explorador de soluciones verá todos los archivos de código fuente, la configuración del proyecto, los archivos de recursos (como el icono de la aplicación), los archivos de configuración, etc. SUGERENCIA Si el Explorador de soluciones desaparece por alguna razón, puede volver a él si va al menú Ver y selecciona Explorador de soluciones.
32
X1165138BDY.indb 32
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:13
SUGERENCIA Observe que la página de inicio sigue estando disponible; simplemente está en otra ficha diferente. Puede ir a cualquier ventana si hace clic en una ficha determinada o presiona Ctrl+Tab.
Figura 3-6 MyFirstConsoleApplication sin el código
Si desea más información acerca del Explorador de soluciones, siempre puede hacer una búsqueda en el sistema de Ayuda y en la documentación del producto. Antes de intentar realizar una búsqueda, lea la próxima sección; en ella conocerá toda la información que hay a su disposición.
Obtener ayuda: Documentación de Microsoft Visual Studio 2005 Express Si desea leer más acerca del Explorador de soluciones, debe conocer los sistemas de Ayuda y documentación. Puede tener acceso a la documentación si presiona F1 desde Visual Basic 2005 Express o desde el menú Ayuda. La primera vez que presione F1 o que utilice el menú Ayuda aparecerá la pantalla Configuración de ayuda en pantalla, como se muestra en la figura 3-7. Capítulo 3: Crear su primera aplicación para Windows
X1165138BDY.indb 33
33
21/12/05 11:35:14
En esta pantalla se le pedirá que elija una fuente de ayuda principal; puede elegir Ayuda en pantalla, Ayuda local o no elegir ninguna Ayuda. Piense en estas opciones detenidamente. Si no dispone de una conexión a Internet de banda ancha (cable, DSL o satélite), le sugiero que elija la Ayuda local como fuente principal; de lo contrario, elija Ayuda en pantalla, ya que es la mejor fuente para obtener la información más reciente. Una vez que haya realizado su selección verá la interfaz gráfica de la documentación, como se muestra en la figura 3-8.
Figura 3-7 Opciones de Configuración de ayuda en pantalla
34
X1165138BDY.indb 34
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:15
Figura 3-8 Documentación de Microsoft Visual Studio 2005 Express
La barra de herramientas situada en la parte superior de la ventana incluye varios elementos interesantes que le ayudarán a obtener exactamente lo que necesita. En la figura 3-9 se resalta la información más importante acerca de la barra de herramientas. Acceso a cuatro fuentes de búsqueda
Sincronizar TDC
Temas basados en tareas Guardar una búsqueda de Ayuda
Figura 3-9 Elementos importantes de la barra de herramientas
Sus preguntas en foros de MSDN
Por ejemplo, suponga que desea más información acerca del Explorador de soluciones. Al hacer clic en el icono Buscar de la barra de herramientas aparecerá la página de búsqueda. Escriba la consulta (en este ejemplo, “Explorador de soluciones”) y presione Entrar o haga clic en el botón Buscar. El resultado de la ayuda procede de cuatro fuentes diferentes. Veamos brevemente cada una de ellas: ■ Ayuda local Esta fuente está alimentada por MSDN Library (parte de la instalación del producto) y se instala en la unidad de disco duro. (Si lo seleccionó durante la instalación.) Capítulo 3: Crear su primera aplicación para Windows
X1165138BDY.indb 35
35
21/12/05 11:35:16
■ MSDN Online Esta fuente contiene la información más actualizada de MSDN Online Library. ■ Comunidad de Codezone La Comunidad de Codezone es una serie de sitios Web basados en productos para desarrolladores de Microsoft. Para ver una lista de todos los sitios Web en los que se busca, haga clic en Herramientas/Opciones y después en En línea. En la figura 3-10 se muestra lo que debe buscar. Observe la lista de sitios Web de la derecha que forman parte de la Comunidad de Codezone. En el futuro, esta lista puede crecer para mostrar más sitios y ofrecer aún mejor cobertura de la comunidad. En la misma pantalla puede personalizar distintas opciones relacionadas con el sistema de Ayuda. En la ficha General puede configurar cómo el sistema de Ayuda recupera y presenta la información. Puede configurar la opción internacional para obtener la ayuda local en el idioma del sistema operativo, si está disponible, y obtener Ayuda en línea en una lista predefinida de idiomas compatibles con MSDN. Observe la asignación de métodos abreviados de teclado para los comandos de menú utilizados en todo el producto (por ejemplo, observe que el método abreviado para Copiar es Ctrl+C) o asigne nuevos métodos abreviados a los comandos que no tengan ya asignado alguno.
Figura 3-10 Pantalla Opciones con la configuración En línea, incluyendo los sitios Web de la Comunidad de Codezone
36
X1165138BDY.indb 36
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:18
■ Preguntas Esta sección busca en los foros de MSDN Online (http://forums.microsoft.com/msdn/). Estos foros están alojados por Microsoft y son una fuente excelente de información, ya que contienen preguntas y respuestas sobre temas planteados por otros programadores de todos los niveles y experiencias. Hay bastantes posibilidades de que alguien más haya tenido el mismo problema o la misma pregunta que usted, por lo que es muy probable que encuentre una respuesta a su problema. Puede tener seguridad en las respuestas que obtiene, ya que empleados de Microsoft o MVP suelen validar las respuestas de los foros de MSDN. Una marca de verificación en un círculo verde indica que esa respuesta se ha validado como correcta.
N OTA MVP es el acrónimo inglés de Most Valuable Professionals. Los MVP son profesionales que no son empleados de Microsoft pero que Microsoft reconoce como expertos en sus campos.
Codificar la aplicación de consola Ahora que sabe cómo obtener ayuda si la necesita, creo que está en condiciones de codificar su primera aplicación de consola.
PARA CODIFICAR UNA APLICACIÓN DE CONSOLA 1 Para empezar, escriba o copie el código siguiente en la ventana de código: 1
Module Module1
2
‘ This application will take two numbers and display the sum
3
Sub Main()
4
‘ Declaring two integer numbers variables that will hold the 2 parts
5
‘ of the sum and one integer variable to hold the sum
6
Dim number1, number2, sum As Integer
7 8
‘ Assigning two values to the integer variables
9
number1 = 10
10
number2 = 5
11
‘ Adding the two integers and storing the result in the sum variable
12
sum = number1 + number2
13 14
‘Displaying a string with the 2 numbers and the result.
15
Console.WriteLine(“The sum of “ & number1.ToString() & “ and “ & number2.
ToString() & “ is “ + sum.ToString()) 16 17
End Sub End Module
Capítulo 3: Crear su primera aplicación para Windows
X1165138BDY.indb 37
37
21/12/05 11:35:20
Ahora que el código está en la ventana, puede guardar el trabajo
2 si hace clic en el botón Guardar. De esta forma se guardará el
Aprender a leer código Otra forma de aprender acerca del código es leer todos los comentarios del código fuente de una aplicación. Explicaré mucho sobre el código fuente en este libro, pero después de utilizar algunos temas más de una o dos veces no volveré a explicar cada línea, sino que sólo explicaré el material nuevo. Intentaré incluir comentarios útiles en el código para guiarle mientras aprende. Al final de cada capítulo también incluiré hipervínculos a artículos, vídeos y notas de productos. Con frecuencia incluiré palabras clave para ayudarle a buscar más información en la ayuda en pantalla. Eso debe ayudarle a progresar en el aprendizaje del lenguaje y de .NET en general. Debe tener en cuenta que este libro está mostrando realmente todo lo que puede hacer con el producto y los pasos necesarios para lograrlo. No es un libro sobre la programación orientada a objetos ni sobre el lenguaje Visual Basic propiamente dicho. Todavía nos queda por hablar de entre el 70 y el 80% del lenguaje y la mayoría de los conceptos de la programación orientada a objetos, pero siempre se hará mediante la generación de aplicaciones y nunca mediante referencias y explicaciones teóricas.
38
X1165138BDY.indb 38
archivo actual. Haga clic en el botón Guardar todo para guardar todos los archivos modificados del proyecto.
SUGERENCIA También puede guardar utilizando las combinaciones de teclas siguientes: Ctrl+S para guardar el archivo actual y Ctrl+Mayús+S para guardar todos los archivos.
Ahora es el momento de generar (o compilar) la aplicación. Haga clic en el menú Generar y,
3 después, haga clic en Generar MyFirstConsoleApplication.
Si escribió el código exactamente como aparece arriba, todo debe ir bien y debe ver el mensaje “Generación satisfactoria” en la barra de estado que hay en la parte inferior de la ventana. (Vea la figura 3-11.) Si no va bien, verá errores en la ventana Lista de errores (como se muestra en la figura 3-12). Si escribió el código y hay errores, pruebe a copiar y pegar el código desde los ejemplos de código terminados (http://www.microsoft.com/mspress/companion/0-7356-2213-2/). Después, genere de nuevo el código.
Figura 3-11 Ventana Lista de errores vacía y barra de estado con el mensaje “Generación satisfactoria”
Figura 3-12 Ventana Lista de errores con errores
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:21
En el capítulo 7 aprenderá todas las técnicas de depuración que puede utilizar cuando obtenga un error. Para ver los resultados de la ejecución de su aplicación, haga clic en el botón Iniciar depuración de
4 la barra de herramientas principal (o presione F5).
¡Guau! Ha sido rápido, ¿verdad? Probablemente haya visto una ventana de comandos durante unos segundos y después haya desaparecido. No le ha dejado mucho tiempo para ver si su aplicación mostraba el resultado esperado. En la próxima sección veremos una nueva forma de ejecutar su aplicación para resolver este problema. Para ello, tendrá que personalizar el IDE.
Personalizar el IDE Es fácil personalizar el IDE de acuerdo con sus necesidades. En este caso, desea ejecutar su aplicación y que ésta haga una pausa automáticamente al final de la última instrucción de manera que disponga del tiempo necesario para ver el resultado. Lo hará agregando un icono y su comando asociado a la barra de herramientas principal y al menú Depurar. El nombre del comando que va a agregar al IDE es “Iniciar sin depurar”.
PARA PERSONALIZAR EL IDE Seleccione el menú Herramientas y, después,
3 la ventana, seleccione Depurar.
En el cuadro de diálogo Personalizar,
4 y seleccione Iniciar sin depurar.
1 seleccione Personalizar.
2 seleccione la ficha Comandos.
En el área Categorías de la parte izquierda de
Capítulo 3: Crear su primera aplicación para Windows
X1165138BDY.indb 39
Desplácese hacia abajo en el área Comandos
39
21/12/05 11:35:23
Su pantalla debe tener una apariencia parecida a la de la figura 3-13.
Figura 3-13 Ventana Personalizar con la opción Iniciar sin depurar seleccionada
N OTA Ambas figuras tienen el “antes” a la izquierda y el “después” a la derecha, superponiéndose al antes.
Ahora debe agregar el comando al menú Depurar. Para ello, arrastre Iniciar sin depurar desde el área Comandos y colóquelo en el menú Depurar. (La figura 3-14 muestra una vista antes de este proceso y otra vista después del mismo.) Repita ahora estos pasos, pero esta vez coloque el comando en la barra de herramientas situada a la derecha del botón Iniciar depuración. Observe la figura 3-15 para ver la barra de herramientas antes y después del proceso. Cuando haya terminado, haga clic en el botón Cerrar del cuadro de diálogo Personalizar. Figura 3-15 Antes y después de personalizar la barra de herramientas con el comando Iniciar sin depurar
Figura 3-14 Antes y después de personalizar el menú Depurar con el comando Iniciar sin depurar
40
X1165138BDY.indb 40
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:24
Para asegurarse de que la personalización funciona, haga clic en el nuevo icono del menú Depurar o de la barra de herramientas. (O bien, utilice el método abreviado de teclado Ctrl+F5.) Debe ver una ventana de símbolo del sistema con el resultado esperado, que es la cadena “The sum of 10 and 5 is 15”. También debe ver el mensaje “Presione una tecla para continuar...” como se muestra en la figura 3-16. Como probablemente se haya dado cuenta, el efecto del nuevo comando es agregar “Presione una tecla para continuar…” y hacer una pausa en la ejecución una vez ejecutada la última instrucción. Presione cualquier tecla para cerrar la ventana de símbolo del sistema y volver al IDE. Cuando haya terminado, puede cerrar el proyecto si va a Archivo y elige Cerrar proyecto. Se le preguntará si desea guardar o descartar los cambios. Haga clic en Guardar y, si el nombre y la ubicación son correctos, haga clic de nuevo en Guardar en el cuadro de diálogo Guardar proyecto.
Figura 3-16 Ventana de símbolo del sistema con el resultado esperado y un mensaje que indica una ejecución en pausa
Crear una aplicación para Windows Acaba de generar una aplicación de consola. El próximo paso consiste en desarrollar la misma aplicación como una aplicación para Windows.
PARA GENERAR UNA APLICACIÓN PARA WINDOWS Cuando creó la aplicación de consola vio el
1 cuadro de diálogo Nuevo proyecto. Ábralo de
nuevo; para ello, vaya al menú Archivo y seleccione Nuevo proyecto. . . Esta vez, seleccione Aplicación para Windows en la sección Plantillas y escriba MyFirs tWindowsApplication. Asegúrese de que su pantalla es similar a la mostrada en la figura 3-17 y haga clic en Aceptar. Figura 3-17 Crear una aplicación para Windows utilizando el cuadro de diálogo Nuevo proyecto
Capítulo 3: Crear su primera aplicación para Windows
X1165138BDY.indb 41
41
21/12/05 11:35:26
Verá inmediatamente que el resultado de esta operación es bastante diferente para una aplicación para Windows que para una aplicación de consola. Debe ver el Diseñador de formularios Windows Forms que se muestra en la figura 3-18.
Figura 3-18 IDE con el Diseñador de Windows Forms y un formulario vacío
En la parte izquierda del IDE, mueva el mouse a la ficha Cuadro
2 de herramientas para abrir la ventana Cuadro de herramien-
tas. Haga clic en el signo más (+) situado junto a Controles comunes. Verá una lista de controles de formulario que suelen aparecer en una aplicación para Windows. Seleccione el control Button y arrástrelo hasta la superficie del diseñador. Debe obtener un formulario como el que se muestra en la figura 3-19.
Figura 3-19 Superficie del Diseñador de Windows Forms con un control Button
42
X1165138BDY.indb 42
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:28
Quizás no se haya dado cuenta, pero en este momento ya tiene una aplicación para Windows completa y válida sin haber escrito ninguna línea de código. La aplicación no hace nada útil por ahora, pero funciona. Puede comprobarlo fácilmente si ejecuta la aplicación. Presione F5 y véalo. Esto es parte de la magia y la belleza de utilizar el entorno IDE de Visual Studio® para programar en lugar de utilizar un editor de texto como el Bloc de notas. Visual Studio escribe mucho código automáticamente; en el capítulo 5 veremos algunas de las actividades que tienen lugar en segundo plano para que parezca magia. Cuando haya terminado, haga clic en el botón Cerrar del formulario para volver al IDE. Haga doble clic en el botón en la superficie del
3 diseñador. Verá la conocida ventana de código fuente,
pero esta vez con otro contenido diferente. Por ahora, escriba o copie el código que hay entre Sub Main() y End Sub de la aplicación de consola que creó anteriormente y agréguelo al método Button1_Click como se muestra en la figura 3-20. (En el capítulo 4 verá más información acerca de este método y todo el proceso que hay detrás del doble clic.)
Figura 3-20 Método de clic en el botón con el código de nuestro ejemplo anterior
En el código fuente, busque las palabras Console.WriteLine y reemplácelas por MessageBox.Show.
4 Después, genere y ejecute la aplicación presionando F5.
Cuando aparezca el formulario, haga clic en el botón y verá el resultado de la aplicación: un cuadro
5 de mensajes con la misma cadena que ha visto en la aplicación de consola.
Debe ser similar a la figura 3-21. Haga clic en Aceptar en el cuadro de mensajes y salga del programa haciendo clic en el botón Cerrar del formulario principal.
Figura 3-21 Resultado de MyFirstWindowsApplication
Capítulo 3: Crear su primera aplicación para Windows
X1165138BDY.indb 43
43
21/12/05 11:35:29
¡Enhorabuena! Acaba de crear sus dos primeras aplicaciones: una aplicación de consola y una aplicación para Windows.
En resumen... Palabras clave y vínculos a más información Palabras clave: declarar variables; concatenación de cadenas Otra buena fuente de información son los vídeos de MSDN. Estos vídeos se han creado específicamente para el producto Visual Basic 2005 Express. Puede encontrar el vídeo para la lección 1 en la siguiente ubicación: http://go.microsoft.com/fwlink/ ?linkid=44030&clcid=0x409
44
X1165138BDY.indb 44
En este capítulo ha aprendido información básica que le ayudará a aplicar los conocimientos que ha empezado a desarrollar en los capítulos anteriores. Ha conocido las diferencias existentes entre una aplicación de consola y una aplicación para Windows. Ha iniciado el producto, ha conocido el IDE y ha aprendido sus componentes principales. Ha creado dos versiones de la misma aplicación: una aplicación de consola y una aplicación para Windows. Mientras veía información acerca de las aplicaciones de consola, ha conocido lo que es el Explorador de soluciones, y ha aprendido a buscar y utilizar el sistema de Ayuda y documentación del producto. En el próximo capítulo nos basaremos en estos conocimientos para escribir un explorador Web sencillo. Por ahora, si desea ver más información acerca de los temas tratados en este capítulo, cree una consulta de búsqueda presionando F1 y escriba las palabras clave en el cuadro de la izquierda. También he agregado un vínculo a unos vídeos que son una buena fuente de información para continuar su aprendizaje.
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:31
Capítulo 4 Crear su propio explorador Web en menos de cinco minutos
4 ¿Qué es un proyecto?, 46 ¿Qué es el estilo de diseño?, 47 Resumen de conceptos, 54
X1165138BDY.indb 45
Ahora que tiene algo de experiencia en la creación de aplicaciones sencillas con Microsoft® Visual Basic® 2005 Express, en este capítulo creará una aplicación más compleja y la terminará en el Capítulo 6. En este capítulo comenzará con el marco de trabajo básico de la aplicación; en los dos capítulos siguientes, continuará aprendiendo nuevas características y las agregará a su proyecto para ampliarlo. En este capítulo, aprenderá a crear su propio explorador Web básico y podrá hacerlo en tan sólo cinco minutos o menos.
45
21/12/05 11:35:32
¿Qué es un proyecto? En el capítulo anterior, creó un proyecto para contener el código fuente. Ahora emplearemos unos momentos para explicar qué es un proyecto y qué tipo de información contiene. El proyecto es un contenedor de todos los elementos de la aplicación, como formularios, código fuente y recursos. También almacena información importante de configuración que pertenece a la aplicación en su conjunto: la ubicación del archivo ejecutable (es decir, de los archivos binarios) en el disco duro, la información de versión y muchos otros parámetros que afectan a las características de su aplicación. Por ejemplo, también se usa para almacenar configuraciones de la aplicación definidas por el programador que son muy importantes para la experiencia del usuario. A los usuarios les encanta personalizar su entorno de software para adecuarlo a su nivel de comodidad y su estilo personal. Un uso típico de esa configuración de usuario es asegurarse de que la aplicación puede conservar la personalización del usuario de una sesión de ejecución a otra. Un buen ejemplo de configuración de usuario personalizada pueden ser sus propias preferencias de usuario en Internet Explorer, como la dirección de la página de inicio, su configuración de página de inicio, las barras de herramientas que se deben mostrar, si las barras de herramientas están bloqueadas, etc. En el capítulo siguiente, explicaremos algunos de los parámetros más importantes almacenados en el archivo de configuración del proyecto y cómo usarlos en su aplicación. En el último capítulo de este libro, utilizará técnicas de programación para conservar la configuración y las personalizaciones del usuario. El nombre que elija al crear su aplicación se convertirá en su nombre de proyecto. También será el nombre de carpeta predeterminado en el disco duro en el que se almacenará la aplicación cuando la guarde. Asimismo, pasará a ser el espacio de nombres predeterminado de su aplicación. Los espacios de nombres se utilizan para organizar las clases en una única estructura jerárquica. Cualquier otro tipo que defina seguirá el mismo sistema. Creando espacios de nombres se evitan los conflictos de nombres. ¿Qué es un conflicto de nombres? Veamos un ejemplo para ilustrar este concepto. Supongamos que una empresa llamada AdventureWorks escribió una nueva clase de formularios Windows Forms denominada ANewForm. Crearían un espacio de nombres llamado AdventureWorks y colocarían su clase ANewForm en él para asignarle un nombre único a su clase. El nombre completo de las clases siempre se compone del espacio de nombres seguido de un punto y, a continuación, del nombre de la clase o las clases. La clase única de AdventureWorks sería AdventureWorks.ANewForm. 46
X1165138BDY.indb 46
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:38
Ahora imaginemos que va a crear un nuevo proyecto con Visual Studio y que decide que el nombre del proyecto sea MyLibrary. Visual Studio crearía entonces automáticamente un espacio de nombres llamado MyLibrary. Supongamos que define una nueva clase y le asigna el nombre ANewForm. Puede que no esté al corriente de que una empresa llamada AdventureWorks también asignó el mismo nombre a su nueva clase. Incluso a pesar de que AdventureWorks podría hacer cosas completamente distintas con su clase, existe la posibilidad de que se produzcan problemas porque ambas clases tienen el mismo nombre. Ahora supongamos que está intentando usar ambas clases, denominadas ANewForm, en su nueva aplicación. Si sólo utilizara el nombre ANewForm, el compilador no podría distinguir qué clase ANewForm desea utilizar, si la contenida en su biblioteca o si, por el contrario, la de la biblioteca de AdventureWorks; en este caso se produciría un conflicto de nombres. Al anteponer al nombre de la clase el nombre del espacio de nombres, estará indicando al compilador exactamente la clase que desea utilizar (AdventureWorks.ANewForm).
¿Qué es el estilo de diseño? Pronto creará un nuevo estilo de diseño en el diseñador de formularios. Para hacerlo, creará el contenido de la aplicación y la forma de presentación de este contenido cuando el usuario ejecute la aplicación. Para realizar esta fase de un proyecto, normalmente no es necesario escribir gran cantidad de código; como se explica más adelante en este capítulo, Visual Studio se encarga de todo eso. Sólo deberá ocuparse de la apariencia de la aplicación. Cuando haya terminado de diseñar todo la apariencia visual y se adapte a sus gustos, su nueva tarea suele implicar adjuntar código fuente a su diseño visual para que su aplicación reaccione y actúe en función de los datos proporcionados por el usuario. En este capítulo, dejará terminado el diseño básico. Aprenderá técnicas de diseño más avanzadas en los capítulos siguientes. Comencemos el siguiente proyecto: un explorador Web sencillo.
Capítulo 4: Crear su propio explorador Web en menos de cinco minutos
X1165138BDY.indb 47
47
21/12/05 11:35:40
PARA CREAR UN EXPLORADOR WEB SENCILLO Inicie Visual Basic 2005 Express haciendo clic en Inicio, Todos los programas y Microsoft Visual
1 Basic 2005 Express.
Cree un nuevo proyecto de aplicación de Microsoft Windows® utilizando cualquiera de las técnicas
2 mostradas en los capítulos anteriores a través del menú Archivo o el icono Nuevo proyecto de la
barra de herramientas. Asigne a la nueva aplicación el nombre MiExplorador.
En la superficie del diseñador, verá el formulario Windows Forms vacío con una barra de título
3 denominada Form1. Haga clic una vez en la barra de título. Observe la ventana de propiedades en el
lado inferior derecho del entorno IDE, como se puede ver en la Figura 4-1.
Figura 4-1 Ventana Propiedades del control Form de la aplicación MiExplorador
48
X1165138BDY.indb 48
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:41
Utilizaremos la mayoría de las propiedades aquí enumeradas. Por el momento, lo más importante es comprender que la mayoría de estas propiedades influyen en cómo se comporta el control seleccionado o en el aspecto que presentará cuando ejecute la aplicación. Para todos los ejemplos de este libro, sugiero que clasifique la lista de propiedades en orden alfabético ascendente; le resultará mucho más fácil buscar las propiedades a las que se hace referencia en los ejemplos. Para ordenar las propiedades alfabéticamente, haga clic en el botón Alfabético de la barra de herramientas de la ventana Propiedades. La otra opción consiste en organizar los controles por categorías, pero podría ralentizar su avance por los ejercicios de este libro. Cada vez que seleccione una propiedad, verá una breve descripción de su uso en la parte inferior de la ventana Propiedades. Consulte la Figura 4-1 para ver un ejemplo. En este caso, se seleccionó la propiedad de texto. En la parte inferior de la ventana Propiedades puede ver un breve mensaje de texto que explica la función de la propiedad Text. Como mencioné en el Capítulo 3, el mejor consejo que puedo darle para aprender a usar este software es probar, probar y volver a probar. Visual Basic 2005 Express incluye una gran variedad de herramientas y, por lo tanto, hay muchas posibilidades. Aprenderá a usar la mayoría de estas herramientas siguiendo este libro, pero resulta imposible conocer todas las variaciones y posibilidades sin explorar por su cuenta. Teniendo este hecho en cuenta, para comprender el efecto de un cambio en una propiedad concreta, pruebe todos los posibles valores distintos. Cada vez que modifique una propiedad, genere y compruebe la ejecución. Pero no haga más que un cambio en cada paso. Resultará difícil saber cuál de los cambios provocó realmente la modificación visual. Explorando más de una posibilidad, podrá ver inmediatamente el efecto de los cambios realizados. Asegúrese de haber seleccionado el control de formulario denominado Form1 en el paso 3 y, a
4 continuación, modifique las propiedades siguientes usando los valores incluidos en la Tabla 4-1. El
nombre de la propiedad que se debe modificar se encuentra en la columna izquierda, mientras que en la derecha se especifica el valor que asignar a la propiedad. Puede que ya haya realizado este paso pero, para facilitar la entrada de datos, compruebe que las propiedades están dispuestas en orden alfabético ascendente.
Propiedad
Valor
Texto
Mi Explorador
Tamaño:Ancho
640
Tamaño:Alto
480
I M P O R TA N T E Algunas propiedades tienen un signo más (+) junto a ellas, lo que significa que se trata de una propiedad de vista de árbol. Cuando haga clic en el signo más (+), expandirá esta propiedad para mostrar los atributos de la propiedad, que podrá establecer entonces. Siempre que se le vaya a pedir que escriba valores para las propiedades contenidas en una vista de árbol, utilizaré la siguiente estructura de notación, con este formato: Tamaño:Ancho, que hace referencia a la propiedad Tamaño y al atributo Ancho.
Tabla 4-1 Lista de propiedades del formulario que cambian
Capítulo 4: Crear su propio explorador Web en menos de cinco minutos
X1165138BDY.indb 49
49
21/12/05 11:35:43
Ahora vamos a agregar tres controles de formularios Windows Forms a la aplicación del explorador: un control de cuadro de texto en el que escribir la dirección URL de destino, un botón para desplazarse a la página Web y un control de explorador Web en el que se mostrará el contenido de la página Web. Arrastre y coloque un control de explorador Web en la superficie del diseñador. El control de explora-
5 dor Web se encuentra en el cuadro de herramientas del lado izquierdo del IDE; es el último control
SUGERENCIA Para agregar un control a un formulario, se realiza una operación de arrastrar y colocar. Esto significa que llevará el mouse (ratón) al cuadro de herramientas, arrastrará el control deseado hasta la superficie del diseñador y lo colocará en ella.
de la sección Controles comunes . De forma predeterminada, este control ocupará toda la superficie del diseñador. Como no queremos que esto sea así para esta aplicación concreta, haga clic en el siguiente triángulo negro,
que presentará el contenido de una etiqueta inteligente. (Si está familiarizado con Microsoft Office 2003, es probable que ya haya visto las etiquetas inteligentes antes. En el Capítulo 5 se explican con más detalle las etiquetas inteligentes.) En este ejemplo concreto, le resultará más cómodo desacoplar el control de su contenedor principal (el formulario). Haga clic en la etiqueta inteligente y seleccione Desacoplar en contenedor principal. Expanda el control para que ocupe prácticamente todo el espacio de diseño. Para ello, haga clic en
6 cualquiera de los controladores de tamaño del control para cambiar su tamaño. Si desea
7 asegurarse de que
tiene el mismo tamaño que el mostrado en la Figura 4-2, seleccione el control de explorador Web haciendo clic en cualquier lugar del control. A continuación, vaya a la ventana Propiedades y modifique los valores de todas las propiedades enumeradas en la tabla 4-2. Modifique los valores de la misma manera que lo hizo con los controles del formulario en el paso 4. Figura 4-2 Aplicación MiExplorador
50
X1165138BDY.indb 50
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:44
Propiedad
Valor
(Nombre)
myBrowser
Tamaño:Ancho
607
Tamaño:Alto
385
Ubicación:X
12
Ubicación:Y
12
Tabla 4-2 Propiedades del control Web que cambian
Arrastre y coloque un control de cuadro de texto y un control de botón desde la sección Controles
8 comunes del cuadro de herramientas de manera que el formulario tenga la misma apariencia que la de
la figura 4-2. Cambie las propiedades de los controles como ya hizo con el control de explorador Web en el paso 7. Seleccione los controles de uno en uno y modifique sus propiedades con los datos de la tabla 4-3.
Control
Propiedad
Valor
Cuadro de texto
(Nombre)
txtURL
Cuadro de texto
Ubicación:X
12
Cuadro de texto
Ubicación:Y
411
Cuadro de texto
Tamaño:Ancho
526
Cuadro de texto
Tamaño:Alto
20
Botón
(Nombre)
btnGo
Botón
Ubicación:X
544
Botón
Ubicación:Y
411
Botón
Texto
GO
Tabla 4-3 Controles, propiedades y valores
En este punto, la aplicación ya está terminada. Puede compilar y ejecutar su aplicación
9 presionando F5.
Capítulo 4: Crear su propio explorador Web en menos de cinco minutos
X1165138BDY.indb 51
51
21/12/05 11:35:45
Si siguió exactamente los pasos anteriores, su aplicación ahora debería estar en funcionamiento. Dado que no escribimos ningún código de funcionalidad, al escribir una dirección URL y presionar el botón GO no ocurrirá nada. Utilizaré una analogía para explicar un concepto fundamental. Por sí misma, una bombilla no es ningún objeto útil. Para que produzca luz, es necesario conectarle dos cables que conduzcan electricidad. De manera parecida a lo que haría un electricista para crear este circuito eléctrico, es necesario enchufar o conectar el control y la acción entre sí escribiendo código para controlar el evento de hacer clic en el botón GO. Recuerde esta analogía cuando vea referencias a los términos conectar o conexión usados en este libro. Antes de intentar ejecutar esta aplicación, expliquemos la línea de código que agregará en el paso 2 de la página siguiente y vinculémosla con los conceptos de programación orientada a objetos que mencionamos en el capítulo 1. Cuando colocó los controles en la superficie del diseñador, creó instancias de la clase representada por dichos controles. Por ejemplo, cuando colocó el control de explorador Web, creó una instancia de la clase System.Windows.Forms.WebBrowser a la que asignó el nombre myBrowser. La clase WebBrowser incluye muchos métodos, y el elegido es el método Navigate. Como su propio nombre implica en inglés, este método permite al control WebBrowser desplazarse a una dirección URL. En Visual Basic un método puede ser una subrutina o una función. La dirección URL se pasó como argumento al método Navigate. Los argumentos, también denominados parámetros, se utilizan para pasar datos a los métodos. En su caso, el argumento es el texto proporcionado por el usuario en la instancia de la clase System. Windows.Forms.TextBox que adecuadamente denominó txtURL. Para recuperar el contenido del control de cuadro de texto llamado txtURL, se utiliza la propiedad Text de ese control. Las propiedades permiten establecer o recuperar el contenido de los miembros de datos de una clase sin necesidad de obtener acceso directamente a dicho miembro de datos. De esa forma, el proveedor de la clase (por ejemplo, Microsoft) puede modificar la implementación de la propiedad Text sin necesidad de molestar al usuario con los detalles de la implementación. En la programación orientada a objetos, este sistema se denomina encapsulación. Puede comparar este proceso con una persona que lleva un vehículo: no es necesario que sepa cómo funcionan el motor y la transmisión para hacerlo. Este ejemplo es bastante bueno, pero también es claro el ejemplo del método Navigate. No es necesario saber cómo se implementa, sino que es suficiente con que el método haga su trabajo. Como ya hemos dicho antes, ocurren muchas cosas cuando se diseña un formulario con Visual Studio. Ha podido ver que no tuvo necesidad de crear ninguna de las clases o instancias que representan sus controles porque Visual Studio se encarga de hacerlo automáticamente. 52
X1165138BDY.indb 52
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:46
PARA CONECTAR LA ACCIÓN DE HACER CLIC CON UN BOTÓN Cierre la aplicación que está en ejecución y vuelva al entorno IDE. Haga doble clic en el control del botón. Verá la ventana de código, como la de la Figura 4-3.
Figura 4-3 Ventana de código para el evento Click de btnGo
Si terminó correctamente la ejecución de su aplicación, debería ver la ventana de código fuente con la plantilla del evento Click de btnGo. Cuando hizo doble clic en el control del botón, indicó a Visual Studio que deseaba conectar la acción de hacer clic con el control del botón. Normalmente, cada control puede desencadenar varios eventos dependiendo del comportamiento que desea controlar mediante el código. Todos los controles tienen un evento predeterminado que desencadena el programador usando una acción de hacer doble clic en el control en la superficie del diseñador. En su caso, Visual Studio creó la plantilla del evento Click de manera que pueda escribir el código siguiente.
N OTA Si intenta escribir código y no funciona, es probable que su aplicación siga estando en ejecución. Si no cierra la aplicación y vuelve a Visual Basic, no podrá modificar el código fuente. Una buena manera de comprobar que se ha cerrado y se ha salido de la aplicación es fijarse en la barra de título de Visual Basic Express. Si aparece el nombre de la aplicación seguido de la palabra (Ejecutando), significa que la aplicación sigue estando activa y que no podrá agregar código. Si intenta agregar código, la barra de estado le informará de que está en modo de sólo lectura con el siguiente mensaje: No se puede modificar actualmente este texto en el editor, es de sólo lectura.
2 Escriba el código siguiente en el lugar donde se encuentra el cursor:
myBrowser.Navigate(txtURL.Text)
Presione F5 para compilar y ejecutar la aplicación. Si
3 asignó correctamente nombres a sus controles en el paso
8 del ejercicio anterior y escribió la línea de código tal y como se muestra en el paso 2, ahora debería tener su propia aplicación de explorador Web. Por supuesto, no tendrá todos los adornos ni las maravillas de Internet Explorer, pero tenga paciencia: ya llegaremos. Pruebe a ir a sus direcciones URL favoritas para ver si la aplicación funciona como se espera. Por ejemplo, yo fui a www.microsoft.com y funcionó perfectamente. Puede ver el resultado en la figura 4-4.
Figura 4.4 MiExplorador muestra el sitio Web Microsoft.com
Capítulo 4: Crear su propio explorador Web en menos de cinco minutos
X1165138BDY.indb 53
53
21/12/05 11:35:48
Resumen de conceptos I M P O R TA N T E Antes de continuar, me gustaría invitarle a que viera un vídeo del sitio Web MSDN® que habla sobre la programación orientada a objetos. En éste y en el Capítulo 1 se ofrece una buena introducción a este tipo de programación. Para comprender el concepto desde otro ángulo, vaya a http://go.microsoft.com/fwlink/ ?linkid=44030&clcid=0x409 y vea la Lección 6, Partes 1 y 2.
MÁS INFORMACIÓN En lo relativo a la asignación de nombres a las variables que representan los controles en la superficie del diseñador, hay distintas filosofías. En este libro, utilizaremos hasta tres letras para describir e identificar el tipo de control con sólo ver el nombre, como por ejemplo “btn” para un control de botón. Así, el nombre de la variable se convierte en btnGo. Cuando hablemos de los controles más comunes en el Capítulo 5, incluiremos la lista de nombres.
54
X1165138BDY.indb 54
Acabamos de ver que, cuando se arrastra un control hasta la superficie del diseñador, en realidad se está creando un objeto de esa clase de control. Cuando asigna nombre al control en la ventana Propiedades, en realidad está asignando un nombre a la variable que acaba de crear, que es justo lo que hemos hecho para los tres controles usados en el explorador. De hecho, esa es la razón por la que deseará asignar a sus controles nombres descriptivos, para poder usarlos después en programación. Como ya sabe, se desarrolla una intensa actividad cuando se colocan controles en la superficie del diseñador. Para comprender mejor lo que ocurría en segundo plano, hemos hablado de conceptos de programación orientada a objetos importantes que subyacen en la línea de código que ha agregado para responder al evento Click. Ahora que ha ejecutado la aplicación, la siguiente es una lista de preguntas que puede haberse planteado: ■ ¿Qué ocurre si no se escribe nada en el cuadro de texto y se presiona Entrar? ■ ¿Qué ocurre si se escribe una dirección URL no válida? ■ ¿Qué ocurre si se escribe cualquier cosa que a uno le apetezca? La respuesta es sencilla: “Inténtelo. Inténtelo ahora.” Lo que es cierto es que el explorador Web tendrá el mismo comportamiento que cualquier otro explorador Web e irá a cualquier dirección URL que se escriba en el cuadro de texto. Si no se escribe nada, hacer clic en el botón GO no surtirá ningún efecto. Si escribe cualquier cosa que le apetezca, el control de explorador devolverá una página del tipo Página no encontrada o Código 404. Ahora es el momento de experimentar. Recuerde la regla principal de este libro: PROBAR, PROBAR y PROBAR. Así que lo mejor que puede hacer es juguetear con el explorador. Cambie algunas de las propiedades y examine los resultados en tiempo de ejecución. Aunque todavía no hemos usado muchas características, agregará más en el Capítulo 6. ¡Al proyecto todavía le queda mucho por hacer! Agregando nuevas características, llegará a un punto en el que su aplicación empezará a tener una apariencia mucho más familiar.
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:35:50
En resumen... En este capítulo, ha aprendido a crear un explorador Web. Ha empezado a: ■ Agregar más de un control a la superficie del diseñador ■ Establecer propiedades en la ventana Propiedades ■ Conectar un evento con un control y ver cómo agregar el código que se ejecutará cuando se desencadene el evento En este ejemplo, ha vinculado varios conceptos de programación orientada a objetos usando una sola línea de código. Ha agregado el código para responder al evento de hacer clic en el botón llamando al método Navigate de su objeto de explorador Web. Su explorador Web se dirige a una dirección URL pasada como un argumento al método Navigate. El argumento del método Navigate se pasó usando la propiedad Text del control de cuadro de texto. Todo ha quedado completo y totalmente funcional con sólo modificar algunas propiedades y agregar UNA ÚNICA línea de código. Eso es lo que yo llamo productividad. En el capítulo siguiente, continuará este proceso conociendo todas las características más importantes de Visual Basic 2005 Express. Su productividad en el desarrollo de aplicaciones aumentará si utiliza características como IntelliSense®, líneas de ajuste, fragmentos de código, etiquetas inteligentes, el espacio de nombres My y muchas otras.
Capítulo 4: Crear su propio explorador Web en menos de cinco minutos
X1165138BDY.indb 55
Vínculos a más información Otras fuentes de información buenas son los vídeos de MSDN creados específicamente para el producto Visual Basic 2005 Express. Los vídeos de las Lecciones 2 y 7 están dedicados a algunos de los temas que acabamos de tratar y le facilitarán otro punto de vista. Encontrará los vídeos de las Lecciones 2 y 7 escribiendo el hipervínculo siguiente: http://go.microsoft.com/fwlink/ ?linkid=44030&clcid=0x409.
55
21/12/05 11:35:51
X1165138BDY.indb 56
21/12/05 11:35:53
Capítulo 5 Crear su primera aplicación completa para Windows ®
5 Ajustar y alinear controles con líneas de ajuste, 58
Usar IntelliSense: su nuevo mejor amigo, 59 Detección y corrección de errores en tiempo real, 64 Oh, My, My . . . My es fantástico, 66
Cambiar nombres, 68
Controles comunes de Windows, 72
En el Capítulo 4, comenzó a crear un explorador Web propio y en el Capítulo 5 le agregará capacidades. Pero antes de hacerlo, quisiera introducir algunas características de Microsoft® Visual Basic® 2005 que le ayudarán a desarrollar sus conocimientos y habilidades de programación de Microsoft Windows®. Luego estudiaremos con más atención algunas otras características de desarrollo rápido de aplicaciones (RAD) más útiles de Visual Basic 2005 Express. N OTA Todas las características RAD descritas en este capítulo aparecen en todas las versiones de Visual Studio 2005. Por tanto, si ya sabe cómo usar estas características en la versión Express y decide explorar otras versiones de Visual Studio 2005, le será mucho más fácil cambiar y conseguir más productividad.
Si ya tiene cierta experiencia en programación, le sorprenderá gratamente descubrir que es incluso más fácil programar utilizando Visual Basic 2005 Express.
¿Qué ocurre cuando se desencadena un evento?, 75
X1165138BDY.indb 57
57
21/12/05 11:35:53
Ajustar y alinear controles con líneas de ajuste
SUGERENCIA Cuando tiene muchos controles que colocar en la superficie del diseñador, puede ahorrar tiempo “fijando” el cuadro de herramientas para que se mantenga abierto. Para deshabilitar la característica de Ocultar automáticamente, haga clic en el botón Fijar de la parte superior del cuadro de herramientas. Para volver a habilitar la característica Ocultar automáticamente, vuelva a hacer clic en el botón Fijar.
Yo, que nunca he sido un diseñador de interfaces de usuario muy hábil, siempre he tenido problemas para trabajar en un programa con muchos controles que alinear. Pero más difícil aún me resultaba intentar que la alineación fuera correcta la primera vez que coloqué los controles en el formulario. Siempre he tenido que ir a la ventana Propiedades y alinear manualmente los controles escribiendo sus coordenadas x e y, lo que ralentiza bastante el proceso de desarrollo. Permítame reiterar una vez más una de las filosofías que han guiado al equipo de Visual Basic 2005 al crear este fantástico nuevo producto. Querían asegurarse de que no fuera necesario realizar muchos pasos en distintos lugares para llevar a cabo una tarea sencilla. Y lo hicieron con una gran cantidad de características nuevas; una de ellas es la nueva característica de líneas de ajuste, que le permite alinear los objetos en la superficie del diseñador. Hagamos un ejercicio para que pueda ver en acción la característica de líneas de ajuste.
PARA CREAR UN NUEVO FORMULARIO DE WINDOWS USANDO LÍNEAS DE AJUSTE Inicie Visual Basic 2005 Express haciendo clic en Inicio, Todos los programas y Microsoft Visual
1 Basic 2005 Express. Cree un nuevo proyecto de aplicación para Microsoft Windows utilizando
cualquiera de las técnicas explicadas en los capítulos anteriores a través del menú Archivo o el icono Nuevo proyecto de la barra de herramientas. Asigne a la nueva aplicación el nombre TestProject. Debería tener a la vista la superficie del diseñador. Si no es
2 así, haga clic con el botón secundario del mouse (ratón) en el
nombre de archivo Form1.vb en el Explorador de soluciones y elija Ver diseñador. A continuación, utilizando el cuadro de herramientas, arrastre tres controles de etiqueta y tres controles de cuadro de texto a la superficie de diseño. Apile las etiquetas en sentido vertical. En el lado derecho o
3 izquierdo de las etiquetas aparecerá una delgada línea azul
(una línea de ajuste) para servirle como guía para la alineación. Cuando las etiquetas estén correctamente alineadas, suelte el control de etiqueta.
Como se puede ver en la Figura 5-1, también aparece una pequeña línea horizontal azul a la izquierda del control de etiqueta. Esta línea representa el espacio mínimo entre un control y otro o entre un control y su contenedor. 58
X1165138BDY.indb 58
Figura 5-1 Líneas de ajuste en acción con dos controles de etiqueta
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:02
Una vez alineadas verticalmente las etiquetas, haga lo mismo con los
4 botones situados inmediatamente a la derecha de cada etiqueta.
La superficie del diseñador debería tener una apariencia parecida a la de la Figura 5-2.
Figura 5-2 Ahora todos los controles están alineados
Observe que las etiquetas están alineadas con la parte inferior de los
5 controles de cuadro de texto. Para conseguir una apariencia más clara, las
etiquetas deberían quedar alineadas con el texto escrito en el cuadro de texto. Para alinear correctamente las etiquetas, mueva cada una de ellas hasta que vea una línea morada horizontal en lugar de una línea azul, como se muestra en la figura 5-3. En la figura 5-4, las etiquetas 1 y 2 están bien alineadas con la línea de base del contenido del cuadro de texto correspondiente, pero la etiqueta 3 sigue estando alineada con la parte inferior del propio cuadro de texto.
Figura 5-3 Ejemplo de alineación con la línea de base común del texto
Figura 5-4 Resultados en tiempo de ejecución de este problema de alineación
I M P O R TA N T E No cierre el proyecto de prueba; lo necesitará para las secciones siguientes. Si cierra el proyecto de prueba y Visual Basic 2005 Express, y después vuelve a abrirlo, podría perder la vista actual y el formulario, y el código podría no aparecer automáticamente. Si se cierra el formulario de prueba, haga clic en el botón Ver código de la barra de herramientas del Explorador de soluciones para obtener el código del formulario seleccionado o en el botón Ver diseñador para ver el Diseñador en el formulario seleccionado. Como alternativa, puede hacer clic con el botón secundario del mouse en el nombre de archivo del formulario, en este caso Form1.vb, y luego seleccionar Ver código para obtener el código fuente o Ver diseñador para tener acceso a la superficie del diseñador.
Usar IntelliSense: su nuevo mejor amigo IntelliSense® es una de las mejores herramientas diseñadas tanto para programadores principiantes como experimentados. Esta característica proporciona referencias de lenguaje en contexto con el editor de código e incluso puede terminar de escribir las palabras automáticamente. Esto significa que puede obtener ayuda inmediata para la sintaxis de código específica para el código que está escribiendo sin necesidad de salir del editor de código. Por ejemplo, si está dentro de un formulario y solicita ayuda a IntelliSense, tendrá acceso a construcciones de código que tienen sentido para ese formulario concreto. Ya ha experimentado la ayuda de IntelliSense mientras realizaba los ejemplos anteriores sin saber en realidad qué estaba usando. Capítulo 5: Crear su primera aplicación para Windows completa
X1165138BDY.indb 59
59
21/12/05 11:36:04
IntelliSense y Ctrl+Barra espaciadora Una de las maneras más fáciles de abrir la ventana de IntelliSense consiste en presionar Ctrl+Barra espaciadora. La Figura 5-5 muestra un ejemplo del proyecto que está abierto actualmente en el editor de código. En esta figura puede ver una lista de posibilidades basadas en el contexto de un elemento de formulario denominado Form1. Figura 5-5 IntelliSense se invoca presionando la combinación de teclas CTRL+Barra espaciadora
MÁS INFORMACIÓN Hay una característica muy útil de Visual Studio que realiza un seguimiento de los cambios efectuados en el código fuente, parecida a la característica Control de cambios de Microsoft Word. Sin embargo, en Visual Studio, cada vez que modifique el código, se agrega una línea coloreada al principio de esa línea. Una línea de color amarillo indica que se efectuó un cambio pero que todavía no se ha guardado. Si la línea es verde, significa que el cambio se guardó y ya forma parte del código incluso aunque salga de Visual Studio. Es una característica realmente útil y, si desea habilitarla, basta con hacer clic en Herramientas/Opciones y activar después la casilla de verificación Mostrar todas las configuraciones en la parte inferior izquierda de la ventana. En la vista de árbol, expanda Editor de texto, seleccione General y, después, seleccione Control de cambios.
60
X1165138BDY.indb 60
IntelliSense y punto/paréntesis de apertura La segunda forma de obtener ayuda utilizando IntelliSense consiste en escribir un punto (“.”) después de un elemento. La ventana de IntelliSense aparecerá si está utilizando objetos de .NET o sus propios objetos. Por ejemplo, yo solicité la lista de posibles construcciones que implicaran el uso de la variable Form1. En este ejemplo, buscaba la variable TextBox1, que representaba el primer cuadro de texto de nuestro formulario. Escribiendo un punto (“.”) después de la palabra clave Me, apareció la lista de todos los objetos relevantes en este contexto. A continuación, escribiendo la letra t, se abrió la lista de todos los componentes relevantes que tienen nombres que empiezan por esa letra. Sólo tuve que desplazarme hacia abajo hasta el elemento que buscaba: TextBox1. La Figura 5-6 ilustra estos pasos en el editor de código. Por último, presioné la tecla Tab para insertar mi selección, TextBox1, en el código.
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:06
Figura 5-6 Obtener ayuda de IntelliSense escribiendo un punto (.) después de un objeto válido
PARA USAR INTELLISENSE Arrastre un control de botón desde el cuadro
1 de herramientas hasta el formulario.
Haga doble clic en el botón para mostrar el 2 controlador del evento click del botón en el editor de código. A continuación, donde el cursor esté intermitente, presione CTRL+Barra espaciadora. Se abrirá el la ventana de IntelliSense.
3 Escriba la letra m, después, e, y a continuación, un punto (.).
Empiece escribiendo textbox1. Antes de terminar
4 la palabra, IntelliSense debería mostrar TextBox1.
Vuelva a escribir un punto (“.”), después text y,
5 por último, presione la tecla Tab o la Barra
espaciadora. La línea de código debe tener este aspecto: Me.TextBox1.Text
Agregue ahora el signo igual (=) y el literal de
6 cadena “Hello World”. Al final, la línea debe
tener el siguiente aspecto:
Me.TextBox1.Text = “Hello World”
Presione la tecla Tab para insertar el componente.
Ahora puede crear y ejecutar la aplicación presionando F5 y comprobar que funciona. Cuando haga clic en el botón que ha creado, debe aparecer la cadena “Hello World” en TextBox1, que normalmente será el primero de los tres cuadros de texto. También puede obtener ayuda adicional de IntelliSense si en esa situación hay más de una posibilidad disponible. Al escribir un paréntesis de apertura (“(“) aparece una lista de todas las opciones posibles. Por ejemplo, cuando trabajamos en la aplicación de consola, escribimos en la consola usando el método Console.WriteLine. En este caso, usamos este método con un argumento de cadena, pero con Console.WriteLine se puede hacer más que simplemente usar una cadena como argumento. IntelliSense le indicará si existe más de una opción. Para Console.WriteLine, IntelliSense indica que hay más de 18 variaciones posibles, como se puede ver en la Figura 5-7. Yo estaba buscando la segunda variación, que es un argumento booleano. Ahora es el momento de probarlo. Capítulo 5: Crear su primera aplicación para Windows completa
X1165138BDY.indb 61
SUGERENCIA En cualquier momento, mientras usa IntelliSense, puede presionar la tecla Tab para pasar rápidamente por las opciones que presenta IntelliSense si el elemento que está buscando ya está seleccionado.
Figura 5-7 IntelliSense ofrece una lista de todas las posibles variaciones del uso del método WriteLine
61
21/12/05 11:36:07
PARA SELECCIONAR ELEMENTOS EN UNA LISTA DE OPCIONES DE INTELLISENSE Si el código fuente no está visible, sólo debe
1 hacer clic en la ficha del editor de código en
el que aparece el nombre de archivo Form1vb. Agregue una nueva línea en el evento Button1_ Click, escriba MessageBox.Show y, a continuación, escriba un paréntesis de apertura (“(”). Se abrirá la ventana de IntelliSense y mostrará que hay 21 variaciones posibles para MessageBox.Show. Desplácese por la lista de opciones usando las 2 flechas hacia arriba o hacia abajo del teclado. Seleccione la opción identificada por “15 de 21” en el rectángulo amarillo, que se denomina información sobre herramientas.
Complete la siguiente línea de código para
3 que sea como la siguiente:
MessageBox.Show(“Hello Again”)
Genere y ejecute la aplicación. Cuando haga
4 clic en el botón debe ver la cadena Hello
World y debe aparecer un cuadro de diálogo con el mensaje Hello Again.
Filtrado de IntelliSense: quitar lo “menos frecuente”
N OTA Es importante reseñar que, independientemente de la selección actual de fichas persistentes, IntelliSense siempre entrará en tiempo real para ofrecer la mejor coincidencia para lo que está escribiendo.
Se habrá percatado de que cuando aparece la ventana de IntelliSense, en su parte inferior hay dos fichas: Común y Todo. Se denominan “fichas persistentes” porque restablecen la vista predeterminada al hacer clic en ellas. Estas fichas forman parte de una nueva característica llamada Filtrado de IntelliSense. Gracias a ella, puede ajustar el nivel de detalle proporcionado por IntelliSense en el editor de código. Cuando seleccione la ficha Común, IntelliSense filtra y no presenta las opciones más infrecuentes y menos usadas, mostrando sólo las opciones más comunes en función de dos cosas: las posibilidades más plausibles en ese contexto o la usada con más frecuencia en la aplicación.
Fragmentos de código IntelliSense: ahorro de tiempo La última característica de IntelliSense son los fragmentos de código IntelliSense. Los fragmentos de código son piezas de código reutilizables que permiten realizar una amplia variedad de tareas sin escribir una sola línea de código. En Visual Basic Express hay disponibles alrededor de 200 fragmentos de código. Están clasificadas según su función y abarcan una amplia variedad de tareas: ■ Estructuras frecuentes de programación como excepciones y bloques Try-Catch, etc. (Más adelante en este capítulo veremos más sobre este aspecto.) ■ Enviar mensajes de correo electrónico ■ Cambiar el tamaño de un formulario 62
X1165138BDY.indb 62
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:09
■ Elementos del lenguaje Visual Basic como instrucciones If, For y While con su sintaxis correcta En la Figura 5-8 se ofrece una muestra de las opciones de menú de primer nivel de fragmentos de código. Todos los fragmentos de código constan de campos personalizables, lo que significa que contienen campos reemplazables con elementos de código de sus propias aplicaciones. Más adelante, podrá descargar fragmentos de código adicionales de diversas fuentes como el sitio Web de Microsoft MSDN®, comunidades en línea y otros proveedores de .NET. También podrá agregar sus propios fragmentos de código a la biblioteca de fragmentos de código para cubrir sus necesidades en otros proyectos.
MÁS INFORMACIÓN Vea la sección “Buscar más información” del final de este capítulo para obtener más información acerca de los fragmentos de código.
Figura 5-8 Menús de fragmentos de código de IntelliSense
Cómo invocar fragmentos de código Puede invocar los fragmentos de código desde el editor de código de dos maneras distintas: haciendo clic con el botón secundario del mouse y eligiendo Insertar fragmento de código, o bien, usando la combinación de teclas ?+Tab.
PARA UTILIZAR FRAGMENTOS DE CÓDIGO Usando el anterior proyecto de prueba, vuelva en el editor de código al evento Button1_Click y abra el
1 menú Fragmentos de código IntelliSense siguiendo cualquiera de los dos métodos explicados antes. En el menú de primer nivel, haga doble clic en Modelos de código comunes, haga doble clic en
2 Condicionales y bucles y seleccione la instrucción For. . .Next. Observe la Figura 5-9 para hacerse una
idea de las opciones de menú que deberían aparecer en la pantalla. Haga doble clic en la instrucción para insertar el código en el editor de código.
Capítulo 5: Crear su primera aplicación para Windows completa
X1165138BDY.indb 63
63
21/12/05 11:36:11
Figura 5-9 Fragmentos de código dentro de los menús del lenguaje Visual Basic
Cuando seleccione la instrucción For. . .Next aparecerá una plantilla genérica para esa construcción
3 del lenguaje. Consulte la Figura 5-10. Los campos en verde de la captura de pantalla “Antes”
(Figura 5-10a) son campos de reemplazo rellenos previamente con valores predeterminados que puede modificar. Antes de continuar con el paso siguiente, edite el código para que coincida con la captura de pantalla “Después” (Figura 5-10b).
Figura 5-10 Apariencia (a) Antes y (b) Después de los fragmentos de código For. . .Next
Cree y ejecute la aplicación presionando F5, luego haga clic en el botón del formulario que aparece
4 para ejecutar el fragmento de código que acaba de insertar. En el segundo cuadro de texto deberían
aparecer los números del 1 al 10 separados por comas. Esto es el resultado de la instrucción For. . .Next que se repite 10 veces, agregando el valor de índice y una coma al cuadro de texto en cada bucle. En este ejemplo, el índice es “i”.
Detección y corrección de errores en tiempo real Todos aprendemos de distintas formas y a diferentes velocidades. También puede que cometamos errores cuando aprendemos algo nuevo, ¡sobre todo cuando escribimos código! Por tanto, Visual Basic 2005 incluye una característica que proporciona información del compilador en tiempo real y sugiere acciones correctivas para solucionar los errores. En cierto sentido, el compilador de Visual Basic está en continuo funcionamiento en segundo plano mientras escribe código. Siempre que cometa un error, verá una línea ondulada azul debajo del código que tiene el error. O bien, si el código no es necesariamente erróneo pero hay un problema potencial, verá una línea ondulada verde bajo el código. Si coloca el cursor del mouse sobre la línea ondulada, aparecerá una Información sobre herramientas para indicarle el motivo por el que el compilador rechazó el código. En algunos casos, debajo de 64
X1165138BDY.indb 64
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:12
la última letra del código erróneo aparece una etiqueta inteligente. La etiqueta inteligente es algo distinta a las normales y se representa mediante una pequeña línea amarilla rodeada por un cuadro rojo, como éste: Si mueve el mouse, aparecerá un signo de exclamación con un círculo rojo:
Esto indica que Visual Basic tiene una posible corrección para el problema. Haga clic en la flecha hacia abajo que aparece junto al signo de exclamación y se le presentarán una o varias posibles correcciones para el problema. Probémoslo con el proyecto de prueba.
PARA USAR LA DETECCIÓN DE ERRORES EN TIEMPO DE EJECUCIÓN 1 En el evento Button1_Click, agregue la siguiente línea de código: Dim foo as Integr
Visual Basic indica que hay un problema con la palabra Integr mediante una línea ondulada azul.
2 Coloque el mouse sobre la etiqueta inteligente.
3 Cuando aparezca el signo de exclamación con un círculo rojo, haga clic en la flecha hacia abajo. Como puede ver en la figura 5-11, se muestra una lista de posibles correcciones para el error. Por
4 supuesto, la lista de soluciones está basada en el contexto actual. La característica de corrección de
errores siempre intentará encontrar la mejor solución. Seleccione Cambiar Integr a Integer.
Debería desaparecer la línea ondulada azul. Debajo del nombre de variable foo debe aparecer una
5 línea ondulada verde. De nuevo, coloque el cursor del mouse sobre la palabra que tiene la línea
Figura 5-11 Lista de posibles correcciones para el error actual
ondulada. Una etiqueta inteligente avisará de que la variable local “foo” no se utiliza en ningún otro lugar de la aplicación. Las advertencias no son errores críticos y no impiden la ejecución de la aplicación, por lo que puede omitir esta advertencia. Capítulo 5: Crear su primera aplicación para Windows completa
X1165138BDY.indb 65
65
21/12/05 11:36:14
Acabamos de ver un error en el que puede intervenir la corrección de errores en tiempo real, pero también puede activarse en muchas otras ocasiones. Identificar los errores con el compilador en segundo plano es fácil porque es automático. En algunos casos, la parte más difícil es saber qué hacer con los errores. La característica de corrección de errores también ayuda en este sentido mostrando más de una opción para solucionar el problema, como se explicaba en el ejemplo anterior de la palabra integer. Veamos ahora otro ejemplo.
PARA ELEGIR ENTRE VARIAS OPCIONES DE CORRECCIÓN 1 Agregue la línea de código siguiente en el código del evento Button1_Click. ReadOnly bar As Double
Debe aparecer una línea ondulada azul bajo ReadOnly. Coloque el cursor del mouse sobre la etiqueta inteligente. Indica que no es válido usar ReadOnly en
2 una declaración de variable local.
Haga clic en la flecha hacia abajo que aparece junto al signo de exclamación. Visual Basic sugiere
3 una corrección y la ilustra tachando el código incorrecto e insertando el código correcto. (Vea la
Figura 5-12.) En este caso, deseamos aceptar el cambio si tiene sentido en la aplicación. Si desea aceptar el cambio, sólo es necesario hacer clic en la sugerencia de color azul.
Figura 5-12 Ejemplo de autocorrección de código
Oh, My, My . . . My es fantástico Hasta ahora hemos visto algunas características útiles que forman parte de Visual Basic 2005 Express. Lo que todavía no hemos visto ni examinado es la enorme cantidad de clases incluidas en .NET Framework. El entorno de .NET Framework es muy amplio y, a veces, buscar las clases y métodos adecuados para solucionar un problema resulta difícil. Manteniendo el mismo objetivo y el planteamiento de máxima productividad, el equipo de 66
X1165138BDY.indb 66
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:15
Visual Basic decidió que había que ensamblar las clases más frecuentes de .NET Framework en una sola colección. Así, decidieron crear esta colección de una manera orientada a las tareas, de forma que los programadores puedan usarla para realizar las tareas de programación más comunes. Además, decidieron que, para facilitar el acceso a esas clases, crearían un nuevo espacio de nombres y agruparían esas clases y métodos comunes en un nuevo conjunto categorizado de clases denominado espacio de nombres My. Básicamente, el espacio de nombres My da acceso al programador a dos áreas distintas: clases de .NET Framework y partes de un proyecto (como los formularios, la configuración de la aplicación y los recursos, etc.) Examinemos ahora la lista de clases de alto nivel contenidas en el espacio de nombres My. ■ Application
■ Resources
■ Computer
■ Settings
■ Forms
■ User
Figura 5-13 Representación visual del menú de primer nivel del espacio de nombres My
La Figura 5-13 es una representación visual de estas clases de alto nivel en el editor de código. Desde la ventana del editor de código, sólo debe escribir la palabra clave My seguida de un punto (“.”) para obtener acceso al espacio de nombres My. Por ejemplo, puede reproducir un archivo de tipo .wav usando la sintaxis siguiente: My.Computer.Audio.Play(“c:\windows\media\Windows XP Startup.wav“)
Pruebe la línea de código anterior en el evento Button1_Click para reproducir el sonido de inicio de Windows XP. A continuación, genere la aplicación y ejecútela. ¡Así de fácil! Escribir código es intuitivo y mucho más fácil. Antes de la existencia del espacio de nombres My, para obtener la misma funcionalidad habría sido necesario usar las API de Win32® o Direct Sound de la familia Microsoft DirectX® y escribir muchas más líneas de código. Para tareas más complejas como detectar la conectividad de red, eventos de aplicación, etc., con el espacio de nombres My se consigue un gran aumento de la productividad. En el pasado, había que escribir casi 200 líneas de código .NET Framework y puede que más. Ahora sólo es necesario buscar la construcción en el espacio de nombres My, seleccionarla y agregar el contexto de la aplicación. Para las tareas más sencillas, puede que no se ahorren muchas líneas de código utilizando el espacio de nombres My, pero desde luego, ahorra tiempo que en otros casos emplearía en investigar las clases correspondientes en .NET Framework. Capítulo 5: Crear su primera aplicación para Windows completa
X1165138BDY.indb 67
PRECAUCIÓN Si no está utilizando Windows XP, busque un archivo .wav en el disco duro y escriba la ruta de acceso como argumento para la línea de código anterior.
67
21/12/05 11:36:16
¿En qué tipos de tareas puede resultar de utilidad My?
MÁS INFORMACIÓN El espacio de nombres My y sus clases se pueden ampliar para agregar sus propios métodos. Todas ellas aparecerán en IntelliSense. Vea la sección “Buscar más información” al final de este capítulo para ver un vínculo a un documento de MSDN que explica en detalle cómo hacerlo.
Éstas son sólo algunas de las tareas más frecuentes que puede esperar encontrar en el espacio de nombres My:
■ Enviar algo para imprimirlo en la impresora predeterminada
■ Mostrar una pantalla de bienvenida de una aplicación ■ Obtener el nombre del equipo ■ Obtener la configuración de red ■ Comprobar que un sitio Web está activo y en ejecución ■ Leer por completo un archivo de texto y colocarlo en una cadena
Por supuesto, el espacio de nombres My no es la respuesta a todos los problemas. Es una solución fantástica para una serie de escenarios comunes, pero para solucionar otros problemas, puede ser necesario llamar directamente a las distintas clases de .NET Framework y escribir más líneas de código.
■ Obtener la configuración de la aplicación
Cambiar nombres
MÁS INFORMACIÓN La siguiente es una lista de lo que se puede mencionar como símbolo: ■ Definiciones de tipos como clases, módulos, estructuras, enumeraciones, delegados, interfaces ■ Miembros de tipos como métodos, propiedades, eventos ■ Variables miembro de clases, módulos, estructuras, enumeraciones ■ Variables locales dentro de funciones y propiedades
68
X1165138BDY.indb 68
La característica de cambio de nombre incluida en Visual Basic 2005 es bastante útil. Proporciona al programador una manera fácil, automática y eficaz de cambiar el nombre de un símbolo siempre que se hace referencia a dicho símbolo en el código. Las variables, controles y otros elementos de sus aplicaciones se pueden actualizar para que sus nombres sean significativos utilizando la funcionalidad de cambio de nombre de símbolos.
¿A qué se le puede cambiar el nombre? Hasta ahora, en el proyecto de prueba en el que hemos trabajado, no hemos prestado atención a los nombres de los controles porque no ha sido necesario escribir mucho código y porque el proyecto era un prototipo rápido para probar nuevas características. En este punto, todos nuestros controles tienen nombres como Textbox1, Textbox2, Label1, etc. Esto está bien para lo que hemos estado haciendo, pero cuando se desarrollan aplicaciones completas, siempre es aconsejable asignar nombres significativos a los controles y variables para que el código se documente a sí mismo y resulte más fácil de leer y mantener. Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:18
Cómo y dónde utilizar la característica de cambio de nombre Hasta ahora, en el proyecto de prueba hemos definido algunos cuadros de texto, etiquetas y otros controles, pero todos sus nombres se han generado automáticamente (por ejemplo, Textbox1 o Label1). Podemos usar la característica de cambio de nombre para asignar nombres significativos a estos controles. La característica de cambio de nombre se puede usar desde tres lugares distintos del IDE: en la ventana Propiedades, directamente en el código y en el Explorador de soluciones. El primer lugar donde podemos usar la característica de cambio de nombre es en la ventana Propiedades en tiempo de diseño. Hasta el momento, en nuestro proyecto de prueba hemos usado el nombre de formulario Form1. En el ejercicio siguiente, cambiaremos el nombre de Form1 a TestProjectForm. Lo que esperamos es que este cambio se lleve a cabo en todo el código del proyecto. Pero sólo para ver cómo funciona esta característica, buscaremos en todos los archivos en los que se utiliza el símbolo Form1.
PARA USAR LA CARACTERÍSTICA DE CAMBIO DE NOMBRE 1 En el Explorador de soluciones, haga clic en el botón Mostrar todos los archivos . Debería ver una gran cantidad de nuevos elementos en el proyecto. Examinaremos el código generado automáticamente por Visual Basic 2005 Express cuando manipulamos los controles en la superficie del diseñador. Expanda Form1.vb y haga clic con el botón secundario del mouse en el nombre de archivo Form1.
2 Designer.vb y, a continuación, seleccione Ver código. Observe la Figura 5-14 para obtener una
representación visual de lo que debería aparecer.
Ahora presentaremos una característica útil: Buscar. Con el código fuente de Form1.Designer.vb en el
3 editor de código, presione Ctrl+F y escriba Form1 en el cuadro de texto Buscar. Antes de hacer clic
en el botón Buscar siguiente, asegúrese de seleccionar Proyecto actual en el cuadro de lista Buscar en.
Figura 5-14 Obtener el código generado automáticamente para los elementos del formulario
Capítulo 5: Crear su primera aplicación para Windows completa
X1165138BDY.indb 69
Terminología de la programación orientada a objetos Aunque este libro no está dedicado a la programación orientada a objetos (OOP), desde luego usaremos muchas de estas construcciones en la aplicación real que vamos a crear. Ya hemos hablado de la programación orientada a objetos en el Capítulo 1 y en el Capítulo 4, pero si desea obtener más información sobre este paradigma, puede volver a la Página de inicio. Si no está visible, haga clic en el menú Ver, seleccione Otras ventanas y, después, seleccione Página de inicio. En la página de inicio, haga clic en el hipervínculo ¿Cómo puedo . . .? de la sección Introducción. Una vez que esté en el sistema de ayuda, verá una sección llamada “Aprendizaje del lenguaje Visual Basic”. La primera opción es Programación orientada a objetos (OOP). Haga clic en ella y lea la sección que contenga la información sobre la programación orientada a objetos y el lenguaje Visual Basic. No se trata de un libro completo sobre este tipo de programación, pero es más que suficiente para lo que estamos haciendo en este otro libro.
69
21/12/05 11:36:20
La Figura 5-15 muestra cómo debería estar configurada la búsqueda.
Es conveniente incluir un nuevo botón desde la barra de herramientas del Explorador de soluciones. El botón Mostrar todos los archivos tiene esta apariencia en la barra de herramientas:
En Visual Basic 2005, y especialmente en la versión Express, la filosofía de diseño siempre ha sido la productividad. Por lo tanto, la interfaz del Explorador de soluciones no se llena de archivos y configuraciones que la mayoría de los usuarios no necesitarán en su trabajo cotidiano. Pero en la interfaz se incluyen algunos elementos como apoyo al aprendizaje o para cuando esté resolviendo problemas complejos y desee examinar directamente en todos los archivos asociados al proyecto. Algunos archivos se generan automáticamente al realizar acciones en el entorno IDE y en la mayoría de las situaciones así está bien: no es necesario ocuparse de todos los detalles todo el tiempo. En aquellas situaciones en que requiera ejercer un mayor control, puede hacer clic en el botón Mostrar todos los archivos e ir directamente al componente que desee.
70
X1165138BDY.indb 70
Figura 5-15 Cuadro de diálogo de búsqueda
Busque todas las apariciones de Form1 en el código haciendo clic en el botón Buscar siguiente.
4 Verá que la búsqueda se realiza en cuatro archivos distintos: Form1.vb, Form1.Designer.vb, Application.
Designer.vb y Application.myapp.
Una vez encontradas todas las apariciones de Form1, un cuadro de diálogo mostrará un mensaje que informa de que la búsqueda ha terminado y de que no quedan más apariciones que cumplan los criterios de búsqueda. Ahora que se han identificado todas las apariciones de Form1, podemos cambiarle el nombre a
5 TestProjectForm. Para ello, seleccione la ficha Form1.vb [Diseño] para volver a la superficie del
diseñador. A continuación, haga clic en la barra de título para seleccionar el formulario.
En la ventana Propiedades, asegúrese de que está seleccionado el control de formulario denominado
6 Form1. Modifique la propiedad (Nombre) cambiando Form1 por TestProjectForm. Presione Entrar
para continuar cambiando nombres. Mientras dura el proceso de cambio de nombre debe aparecer un pequeño reloj de arena. Ahora, repita la búsqueda desde los pasos 3 y 4 y verá que la única aparición que queda es una
7 cadena que corresponde a la propiedad de texto del control Form (es decir, el nombre de la barra de
título).
También puede cambiar el nombre de los símbolos directamente en el código. En Form1.vb, coloque
8 el cursor en cualquier lugar de la palabra TextBox1 en la siguiente línea de código: Me.TextBox1.Text = “HelloWorld”
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:22
Haga clic con el botón secundario del mouse y seleccione Cambiar nombre; aparece un cuadro de
9 diálogo como el de la Figura 5-16a. Reemplace TextBox1 con tbMessage; ahora el cuadro de diálogo
debería ser como el de la Figura 5-16b.
Figura 5-16 Cuadros de diálogo Cambiar nombre: (a) antes y (b) después de cambiar el nombre
10 Haga clic en Aceptar para reemplazar todas las apariciones de TextBox1 con tbMessage. La búsqueda sólo debe encontrar un comentario y la propiedad Name de texto del control de cuadro de texto con la cadena “TextBox1”. Así de fácil. Imagine cuánto tiempo ahorraría usando la característica Cambiar nombre si tuviera 10 archivos con cientos de líneas de código. No sólo estaría seguro de encontrar todas las apariciones, sino que el código sería mucho más fácil de leer.
11 La tercera manera de cambiar el nombre de un símbolo, y en este caso sólo para los elementos del
proyecto, es hacerlo directamente en el Explorador de soluciones. A pesar de que antes cambiamos la variable Form1 por un nombre con más sentido, el nombre de archivo Form1 no se ha cambiado porque no se encuentra en el código fuente, sino que está en el Explorador de soluciones y en el proyecto, por lo que sigue siendo Form1.vb. Por coherencia, haga clic con el botón secundario del mouse en el nombre de archivo Form1.vb en el Explorador de soluciones, seleccione Cambiar nombre y cambie el nombre de archivo por TestProjectFormOtherName.vb. Ocurrirán dos cosas: en primer lugar, verá que el nombre de archivo y todos los nombres de archivo dependientes se cambian automáticamente por el nuevo nombre; y por otro lado, verá que todas las referencias a TestProjectForm se han cambiado a TestProjectFormOther Name. Este cambio de nombre se puede comprobar presionando Ctrl+F y realizando una búsqueda del nombre antiguo (Form1.vb).
Capítulo 5: Crear su primera aplicación para Windows completa
X1165138BDY.indb 71
71
21/12/05 11:36:24
Controles comunes de Windows No vamos a dedicar mucho tiempo en este punto para explicar todos los detalles y propiedades de cada uno de los controles del cuadro de herramientas. El propósito de este libro no es ser una referencia de programación en Windows Forms. Otras publicaciones tratan muy bien ese tema. Sin embargo, la Tabla 5-1 proporciona una introducción rápida a los controles más comunes que encontrará en la mayoría de aplicaciones para Windows. Representación visual
Nombre
Descripción
Button
Indica que el usuario toma una decisión y desea comunicar su acción. En la aplicación, cuando el usuario hace clic en un botón se desencadena un evento que debe controlar su código.
TextBox
El cuadro de texto se utiliza para obtener la entrada del usuario. En la pantalla puede ser un control de una o de varias líneas. También puede proporcionar enmascaramiento de los caracteres de las contraseñas si desea que la aplicación tenga este comportamiento. Es conveniente escribir información que no limite las opciones, por ejemplo una decisión de tipo booleano como sí/no, activar/desactivar, o una lista de opciones concretas como una lista de nombres de países. Es bastante adecuado para nombres, direcciones, números de teléfono, direcciones URL, etc.
Label
Las etiquetas (label) suelen ser texto sencillo usado para describir otros controles. No es un control interactivo. Continúa en la página siguiente
72
X1165138BDY.indb 72
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:25
Representación visual
Continúa desde la página 72
Nombre
Descripción
RadioButton
Se ofrecen varias opciones, pero el usuario sólo puede seleccionar una de ellas. Imaginemos que tiene una aplicación y que desea ofrecer la opción de imprimir en escala de grises o en color. Podría utilizar dos botones de opción para seleccionar el método deseado.
CheckBox
Las casillas de verificación (CheckBox) son muy buenas para las elecciones de tipo booleano (por ejemplo, activar/desactivar, sí/no, etc.). También se pueden usar en un grupo de casillas de verificación para indicar características de una única entidad. Por ejemplo, en una herramienta de pedidos de vehículos de una aplicación de concesionarios, podría incluir casillas de verificación para todas las características de los vehículos. (Por ejemplo, radio AM/FM, cargador de CD, asientos con calefacción, pintura metalizada, etc.).
ComboBox
Un cuadro combinado (ComboBox) es una combinación de un cuadro de texto y una lista desplegable con opciones válidas. Resulta ideal para mostrar un cuadro de texto editable con una lista de valores permitidos. Puede hacer que los valores se completen automáticamente y que aparezcan ordenados. Los valores pueden proceder de entradas estáticas o de otros orígenes de datos como por ejemplo una base de datos. Por ejemplo, un buen ejemplo es seleccionar un estado o provincia. Puede escribir el nombre del estado o seleccionarlo en una lista de posibles valores. Continúa en la página siguiente
Capítulo 5: Crear su primera aplicación para Windows completa
X1165138BDY.indb 73
73
21/12/05 11:36:26
Continúa desde la página 73
Representación visual
Nombre
Descripción
ListBox
Un cuadro de lista (ListBox) es una breve lista de opciones válidas para el dominio que representa este componente. Este control es perfecto cuando hay una lista de posibles opciones que no es demasiado larga. No permite al usuario escribir texto, pero sí seleccionar una o varias opciones utilizando las teclas CTRL o MAYÚS.
ToolTip
El control de información sobre herramientas (ToolTip) resulta útil para mostrar información sobre un control cuando el usuario coloca el mouse sobre el control.
NumericUpDown Este control es muy útil cuando desea que el usuario seleccione un valor numérico en un conjunto predefinido de números. Permite al usuario seleccionar un único valor numérico en la lista usando los botones hacia arriba o hacia abajo para aumentar o reducir el número. Podría ser perfecto para forzar al usuario A seleccionar un valor numérico para el componente del año de una fecha. Hay muchos más controles que los mostrados aquí. Pero esta tabla debería dejar claro que tiene a su disposición toda una pléyade de controles para realizar muchas tareas. Para ahorrar tiempo y esfuerzo, normalmente encontrará un control que consiga los resultados deseados con muy pocos esfuerzos. Es especialmente deseable que el control elegido pueda restringir las opciones disponibles o cómo se seleccionan los datos sin necesidad de realizar ninguna otra validación. Al desarrollar software, tenga siempre en mente la regla del 80/20: 80 por ciento de resultados por el 20 por ciento de esfuerzo. 74
X1165138BDY.indb 74
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:28
¿Qué ocurre cuando se desencadena un evento? Todas las aplicaciones para Windows están basadas en eventos. Esto significa que, cuando seleccione un elemento de menú, cuando haga clic en un botón o incluso cuando pase de un cuadro de texto a otro, se estará produciendo un evento. Los bloques de código conectados a cada una de las acciones se ejecutan mientras trabaja. Los eventos se generan no sólo por las acciones del usuario, sino también por el entorno en que se producen, como el propio Windows o por parte de otras fuentes externas. Para comprender qué queremos decir por “otras fuentes externas”, piense en cualquier aplicación de mensajería por Internet como MSN Messenger. Cuando está conversando con alguien e intercambia datos en uno y otro sentido, en realidad está generando eventos. Dicho de una forma no técnica, los datos enviados por su amigo a través de Internet son un evento. Existen eventos para multitud de acciones que normalmente lleva a cabo sin darse cuenta de que son eventos. Algunos otros eventos se controlan automáticamente mediante código generado automáticamente, como por ejemplo hacer clic en la X roja de la esquina superior derecha de una aplicación, mientras que otros necesitan ser controlados por el código. Con esta sección empezaremos a trabajar en la conexión del código fuente a eventos. Como práctica, conectaremos dos objetos de nuestro proyecto de prueba. Antes de comenzar, usaremos lo aprendido hasta ahora para asegurarnos de que el proyecto de prueba tiene una apariencia similar a la de la figura 5-17. N OTA Para agregar los menús y los botones de la barra de herramientas, vaya a la categoría Menús y barras de herramientas del cuadro de herramientas, y agregue un control MenuStrip y un control ToolStrip al formulario. Después, seleccione cada control, abra el menú de etiquetas inteligentes y seleccione Insertar elementos estándar.
Figura 5-17 Formulario de información de clientes
Capítulo 5: Crear su primera aplicación para Windows completa
X1165138BDY.indb 75
75
21/12/05 11:36:29
Cuando se desencadena un evento, se ejecuta el código conectado para controlar ese evento. Si un evento concreto no tiene conectado ningún código, no ocurre nada. A grandes rasgos, nuestra aplicación está ahora en ese estado. (A excepción del botón que realizaba algunas tareas como hemos podido ver antes.) Agregaremos funcionalidad a nuestra aplicación de proyecto de prueba conectando la opción de menú Guardar y el botón Guardar de barra de herramientas al código fuente, para guardar todo el contenido de los cuadros de texto en un archivo de texto simple almacenado en el directorio actual. Puesto que los cuadros de diálogo de guardar y abrir archivos son estándar y, también para dotar a las aplicaciones de una apariencia uniforme, los equipos de desarrollo de Visual Basic decidieron escribir controles para guardar y abrir, y ponerlos a su disposición. En nuestro ejercicio aprovecharemos este acceso directo.
PARA CONECTAR CÓDIGO FUENTE A EVENTOS Arrastre el control SaveFileDialog hasta el formulario desde la categoría de cuadros de diálogo del
1 cuadro de herramientas. Este control no tiene representación en tiempo de diseño y aparecerá sólo
en la bandeja de componentes, que es la sección gris situada debajo de la superficie del diseñador. Vea la Figura 5-18 para conocer la ubicación del control SaveFileDialog.
Figura 5-18 Representación en tiempo de diseño del control SaveFileDialog
76
X1165138BDY.indb 76
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:31
Utilizaremos SaveFileDialog para conectar el evento Click tanto al botón Guardar de la barra de herramientas como a la opción Guardar del menú Archivo. Para que se realice la misma operación cuando se produzca cualquiera de los eventos, escribiremos un bloque de código que se denomina método. El bloque de código realizará la misma operación si lo desencadena el botón de la barra de herramientas o si lo hace la selección del menú. Haga clic en el icono del pequeño disco azul de la franja de herramientas para seleccionarlo.
2 Compruebe la ventana Propiedades para asegurarse de que el control es el correcto:
Asegúrese de que el nombre y el tipo de control son los que desea usar. Haga doble clic en el disco azul en la superficie del diseñador y se le presentará la plantilla del evento
3 predeterminado para este control, que es el evento click.
Agregue la siguiente línea de código al procedimiento de evento SaveToolStripButton_Click. (Más
4 adelante veremos para qué sirve.)
Me.SaveFileDialog1.ShowDialog()
Este bloque de código muestra SaveFileDialog1 llamando al método ShowDialog(). En este punto, si
5 desea ver el efecto del cambio, sólo tiene que generar y ejecutar la aplicación presionando F5 y hacer
clic en el icono save para ver qué mostrará el cuadro de diálogo de guardar.
En todos los controles SaveFileDialog hay un botón para guardar y otro para cancelar. El botón para
6 cancelar se controla automáticamente. Pero es necesario que especifiquemos lo que va a ocurrir
cuando el usuario haga clic en el botón de guardar de ese nuevo cuadro de diálogo.
Para conectar el botón de guardar (save), seleccione el icono saveFileDialog1 en la bandeja de
7 componentes y haga doble clic en él para obtener el evento más común, que en este caso es el
evento FileOk.
SUGERENCIA Si desea ver todos los posibles eventos que se pueden desencadenar para un control concreto, puede hacer clic en el icono del rayo amarillo que aparece en la parte superior de la ventana Propiedades, como se puede ver en el gráfico de la sugerencia anterior. Para volver a las propiedades, sólo ha de hacer clic en el pequeño símbolo de hoja que aparece a la izquierda del icono del rayo amarillo.
Usar comentarios en el código Una buena práctica que debería empezar a seguir al escribir código es escribir comentarios sobre el mismo. Por el momento, el código de los problemas que estamos solucionando no es demasiado complejo. Pero tenga en cuenta que agregar comentarios sirve para lo siguiente: en primer lugar, el mantenimiento del código es mucho más fácil porque puede volver seis meses más tarde y, si los comentarios son adecuados, podrá comprender qué estaba programando en cada caso. También hace que el código sea más legible y facilita la obtención de ayuda de otras personas. Escriba los comentarios en un lenguaje normal sin demasiadas palabras de la jerga Continúa en la página siguiente
Capítulo 5: Crear su primera aplicación para Windows completa
X1165138BDY.indb 77
77
21/12/05 11:36:32
Utilizaremos fragmentos de código para insertar el código que se ejecutará cuando el usuario
8 presione el botón Save (Guardar). Recuerde que para obtener los fragmentos de código debe hacer
Continúa desde la página 77 informática. Otra cosa que recordar es que los comentarios no se compilan en la aplicación ejecutada, por lo que nunca ralentizarán su rendimiento. Como puede ver en la lista del paso 8, puede agregar comentarios al código insertando una comilla simple y escribiéndolos. Los comentarios deben aparecer en color verde; si no es así, el compilador no considerará dicha línea como comentario. Otra buena manera de incluir comentarios en el código es usar dos botones de una de las barras de herramientas. Suponga que decide que todo el código anterior del evento FileOk no es el que desea ejecutar porque desea probar otra cosa. No es conveniente eliminar todo el texto, pero puede marcar el código como comentario seleccionándolo y haciendo clic en el botón Marcar como comentario las líneas seleccionadas. Y si desea no marcar como comentario un bloque de código, sólo ha de seleccionar el código correspondiente y hacer clic en el botón Quitar la marca de comentario de las líneas seleccionadas.
78
X1165138BDY.indb 78
clic con el botón secundario del mouse en el editor de código y seleccionar Insertar fragmento de código; a continuación, siga las distintas opciones de ruta de acceso. Es necesario escribir en un archivo, por lo que debe usar la siguiente ruta de acceso: Procesando unidades, carpetas y archivos: Escribir texto en un archivo. Una vez terminado, el código debe ser similar al ejemplo siguiente. Examine los comentarios para comprender lo que estamos intentando hacer. Algunas líneas de código pueden ser bastante largas. Visual Basic le permite utilizar un espacio en blanco y un carácter de subrayado (_) para indicar que una línea de código continúa en la línea siguiente. Una línea de código suele poder dividirse donde hay un espacio en blanco; sin embargo, en algunas ubicaciones (como dentro de una cadena entre comillas) no se puede dividir una línea.
Método SaveFileDialog1_FileOk 1 Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As _ 2
System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
3
Try
4
‘ The property FileName from the first argument in WriteAllText refers to
5
‘ the FileName selected by the user in the SaveFileDialog1
6
‘ Then we are passing the content of each TextBox and concatenating the
7
‘ Carriage Return-Line Feed constant
8
‘ The last parameter indicated if we should append to a file if it
9
‘ exists. False will not and therefore recreate the file each time.
10
‘ In order to add the content of the first box we need to put true for
11
‘ the 2d and 3rd write otherwise only the last one would be there
12
‘ if they were both true.
13
My.Computer.FileSystem.WriteAllText(Me.SaveFileDialog1.FileName, _
14 15
Me.tbMessage.Text & vbCrLf, False) My.Computer.FileSystem.WriteAllText(Me.SaveFileDialog1.FileName, _
16 17
Me.TextBox2.Text & vbCrLf, True) My.Computer.FileSystem.WriteAllText(Me.SaveFileDialog1.FileName, _
18 19 20 21
Me.TextBox3.Text & vbCrLf, True) Catch fileException As Exception Throw fileException End Try
2s2 End Sub
Ahora sólo necesitamos adjuntar el mismo código de evento a la opción de menú Archivo/Guardar. Haga
9 doble clic en la opción Guardar del menú Archivo y agregue el mismo código que en el paso 4. Genere
la aplicación y ejecútela presionando F5. Escriba un texto en los cuadros de texto y guarde el contenido en un archivo utilizando la opción Guardar o el botón Guardar de la barra de herramientas. Debería comprobar que el contenido del archivo guardado por la aplicación es exactamente lo escrito en el formulario. Para comprobar que ha funcionado correctamente, abra el archivo con Visual Studio; para ello, seleccione Archivo/Abrir archivo, vaya a la ubicación del archivo guardado y ábralo para ver su contenido. Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:33
Acabamos de controlar dos eventos, pero quisiera resaltar que ya hemos controlado eventos con anterioridad al crear el código de Button1_Click y modificar las propiedades de otros controles. Por ejemplo, modificamos la propiedad Texto de nuestros controles TextBox cuando controlamos el evento Click del botón. Y hemos podido hacerlo usando la propiedad de nombre del control.
En resumen… Bueno, este capítulo ha quedado bastante grande y con un montón de características nuevas. Estas características sin duda le ayudarán a escribir las aplicaciones. Hemos repasado algunas características del entorno IDE como las líneas de ajuste para ayudarle a alinear los controles del formulario. Luego continuamos con las fantásticas características de IntelliSense que le ayudarán a escribir bien el código sugiriendo opciones adecuadas, terminando automáticamente frases de código o poniendo a su disposición fragmentos de código. Al final, IntelliSense está ahí para reducir la cantidad de texto que debe escribir y así poder aumentar la productividad. Y además de eso, es una herramienta magnífica para los principiantes. Después vimos cómo funciona el compilador en segundo plano para ayudarle en tiempo real a detectar errores y ofreciéndole sugerencias para corregirlos. También vimos una introducción al espacio de nombres My de Visual Basic. Este nuevo espacio de nombres proporciona una manera sencilla de realizar multitud de tareas frecuentes encapsulando un montón de líneas de código .NET en una sintaxis más simple de una sola línea. Con frecuencia, una línea de código reemplaza hasta 200 líneas de código .NET.
Buscar más información El editor de fragmentos de código le permite crear, editar y depurar sus propios fragmentos de código. La herramienta también permite rellenar todos los metadatos, accesos directos, variables de reemplazo y ensamblados de reemplazo. El vínculo para esa herramienta es: http://msdn.microsoft.com/ vbasic/downloads/2005/tools/ snippeteditor/ Otra buena fuente de información son los vídeos de MSDN creados específicamente para el producto Visual Basic 2005 Express. Le sugiero que observe las dos siguientes lecciones como complemento, ya que reforzarán muchos de los temas expuestos en este capítulo. Vídeo de la Lección 2: http://go.microsoft.com/fwlink/ ?linkid=44030&clcid=0x409 Vídeo de la Lección 3: http://go.microsoft.com/fwlink/ ?linkid=44030&clcid=0x409 Continúa en la página siguiente
Capítulo 5: Crear su primera aplicación para Windows completa
X1165138BDY.indb 79
79
21/12/05 11:36:36
Continúa desde la página 79 Ambas lecciones constituyen un resumen visual bastante bueno para este capítulo. TEMA AVANZADO: Si desea extender el espacio de nombres My, el siguiente es un buen documento de MSDN sobre este tema: http://www.msdn.microsoft.com/ msdnmag/issues/05/07/my/ default.aspx
80
X1165138BDY.indb 80
A continuación vimos las ventajas de la característica de cambio de nombre para reemplazar símbolos en todos los archivos de los proyectos. Resulta especialmente útil para reemplazar nombres de variables generados automáticamente con nombres de variables con más sentido. Examinamos los controles más comunes que se encuentran en todas las aplicaciones para Windows con algunos ejemplos gráficos y la justificación de su utilización. Por último, terminamos el capítulo explicando cómo se realiza la programación basada en eventos. En el capítulo siguiente, aplicaremos en la práctica todo lo aprendido en este capítulo. También veremos algunas características, controles y conceptos nuevos que usaremos mientras continuamos con el proyecto del explorador Web.
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:38
Capítulo 6 Modificar su explorador Web
6 Cómo abrir su aplicación, 82
Interacción con cuadros de diálogo, 88 Una apariencia profesional al alcance de la mano, 94
X1165138BDY.indb 81
Después de leer la avalancha de nuevos conceptos presentados en los primeros capítulos, ya está listo para aplicarlos en la práctica y llevar su explorador Web hasta el siguiente nivel. En este capítulo, agregará características enriquecidas a su explorador como una pantalla de bienvenida, un cuadro Acerca de, franjas de herramientas, franjas de menús, un contenedor de franja de herramientas que proporcionará al usuario una experiencia “à la Internet Explorer”, un control de franja de estado, una barra indicadora de progreso, barras de herramientas de apariencia profesional con iconos familiares y nuevas características del Entorno de desarrollo integrado (IDE) de Microsoft® Visual Basic® 2005 como la ventana Esquema del documento. También aprenderá a dar respuesta a los eventos producidos en el control Web Browser.
81
21/12/05 11:36:39
Cómo abrir su aplicación Cuando se carga una aplicación, normalmente aparece lo que se denomina una pantalla de bienvenida. Algunos ejemplos de pantallas de bienvenida son los cuadros de información que aparecen al abrir Microsoft Office, Visual Studio® 2005 y la mayoría de los demás programas. Aunque normalmente presentan una magnífica apariencia, esas pantallas no sólo están ahí para mostrar la versión del software y un diseño atractivo, ni para evitar que se aburra. Esas pantallas tienen una función concreta. Una vez que se inicia una aplicación, se lleva a cabo una gran cantidad de procesamiento: por ejemplo, la aplicación está conectando con bases de datos, rellenando controles con datos contenidos en la base de datos, obteniendo las configuraciones guardadas para las preferencias de la interfaz de usuario (IU), etc. Presentar la pantalla de bienvenida mientras se realizan todas estas tareas ayuda a informar al usuario de que la aplicación está en funcionamiento. En realidad, una pantalla de bienvenida es un formulario de Windows que no admite ninguna entrada por parte del usuario. Lo habitual es que tenga un bonito formulario de presentación con gráficos, el nombre de la aplicación, información sobre la versión y texto legal. Una de las primeras cosas que hará en su aplicación es agregar una pantalla de bienvenida. En este capítulo he creado una aplicación de explorador que es igual que la que creó en el capítulo 4. Si instaló el contenido complementario en la ubicación predeterminada, debe estar en la siguiente ubicación de la unidad de disco duro: Mis documentos\Microsoft Press\ VB 2005 Express\Chapter6\. Busque una carpeta denominada Start bajo la carpeta Chapter6. Haga doble clic en la solución MiExplorador.sln. Si lo desea, también puede empezar desde su propio proyecto de explorador del capítulo 4.
PARA CREAR UNA PANTALLA DE BIENVENIDA Abra el cuadro de diálogo Agregar nuevo elemento. Puede ir al menú Proyecto y seleccionar
1 Agregar Windows Forms o puede ir al Explorador de soluciones, hacer clic con el botón secundario
del mouse (ratón) en el nombre del proyecto (en este caso, MiExplorador), seleccionar Agregar y, después, seleccionar Windows Forms. Aparecerá el cuadro de diálogo Agregar nuevo elemento; la primera fila de opciones indica que ya existe una plantilla de pantalla de bienvenida. Seleccione la plantilla Pantalla de bienvenida y asígnele el nombre splash.vb, como se muestra en
2 la figura 6-1. Después, haga clic en Agregar. 82
X1165138BDY.indb 82
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:45
Figura 6-1 Agregar un nuevo formulario de Windows: opciones de la plantilla Agregar nuevo elemento
Vaya a la vista Diseño de la pantalla de bienvenida y verá que la pantalla está dividida en varios
3 cuadrados. De hecho, la pantalla de bienvenida se denomina control Panel de diseño de tabla. Este
control le ayuda organizando la disposición de los componentes en un formato de tabla con un conjunto de filas y columnas. Las filas y columnas se pueden personalizar modificando las propiedades en la ventana Propiedades o utilizando código fuente. El control también incluye una etiqueta inteligente para agregar o quitar filas y columnas con toda facilidad. (De manera predeterminada, la pantalla de bienvenida tiene dos filas y dos columnas.) Si observa atentamente, verá que la plantilla Pantalla de bienvenida tiene otro Panel de diseño de tabla situado en la celda inferior derecha. SUGERENCIA Con frecuencia, seleccionar un control concreto es difícil. Para ver todos los controles del formulario mostrado actualmente, puede seleccionar la lista desplegable de la parte superior de la ventana Propiedades. La figura 6-2 muestra la lista desplegable para el formulario de la pantalla de bienvenida. Para seleccionar cualquier control concreto, resáltelo en la lista y automáticamente aparecerá seleccionado en la superficie del diseñador.
Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 83
N OTA Cada una de las celdas de un Panel de diseño de tabla puede contener sólo un control, pero siempre puede insertar otro Panel de diseño de tabla como hizo con la plantilla de pantalla de bienvenida.
Figura 6-2 Rellenar todos los controles de un formulario seleccionado
83
21/12/05 11:36:46
El título de la aplicación, su versión y la información de copyright se obtienen dinámicamente. Esto significa que el formulario obtendrá los valores de una variable o una configuración incluida en el proyecto. De hecho, en tiempo de ejecución esas piezas de información se obtienen cuando se carga la pantalla de bienvenida consultando la configuración de la aplicación almacenada en el panel de la aplicación Diseñador de proyectos.
PARA VER LAS PROPIEDADES DE TÍTULO DE LA APLICACIÓN, VERSIÓN Y COPYRIGHT En el Explorador de soluciones, seleccione MiExplorador, haga clic en él con el botón secundario del
1 mouse y elija Propiedades.
Se abrirá la página Diseñador de proyectos. El Diseñador de proyectos contiene una serie de fichas de información (como se puede ver en la Figura 6-3). Por ahora trabajará principalmente en la primera ficha, que es el panel Aplicación. En este panel configurará varios elementos. Todos los elementos que modificará afectan a la apariencia de la aplicación.
Figura 6-3 Página Diseñador de proyectos
84
X1165138BDY.indb 84
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:48
Para cambiar el icono de la aplicación, vaya a la lista desplegable denominada icono, haga clic en ella
2 y seleccione <Examinar…>. Busque el directorio del capítulo 6 en el que ha instalado los archivos de
ejemplo del libro y busque el archivo globe.ico en la carpeta Images. (Si instaló el contenido complementario en la ubicación predeterminada, debe estar en la siguiente ubicación de su disco duro: Mis documentos\Microsoft Press\VB 2005 Express\.) Ha cambiado el icono del ensamblado de la aplicación o, dicho de otra forma, ha cambiado el icono del propio archivo binario ejecutable (.exe). Si genera la aplicación y busca en el lugar del disco duro donde está compilada la aplicación (como ya vimos en el capítulo anterior, todos los proyectos se ubican de manera predeterminada en los directorios Mis documentos\Visual Studio 2005\Projects\MiExplorador/MiExplorador\ bin\Debug o \bin\release) verá que su aplicación, MiExplorador.exe, tiene el icono del globo terráqueo que acaba de seleccionar en lugar de un icono predeterminado.
N OTA Cuando cambie este icono de la aplicación no cambiará el icono del formulario principal. Para ello, es necesario cambiar la propiedad del icono del formulario asignándole una imagen de mapa de bits. En la última sección de este capítulo cambiará el icono del formulario principal.
Haga clic en el botón Información de ensamblado. . . Debería ver una pantalla que presenta una
2 apariencia como la de la Figura 6-4.
Figura 6-4 Cuadro de diálogo Información de ensamblado
Cambie la información de Copyright: reemplace la palabra Microsoft con su nombre y deje el resto 4 de la información tal y como está. (Si no está ya rellena con su información, cámbiela para que indique su nombre o la información de su organización.) En el cuadro de texto Título, inserte espacios entre las palabras MiExplorador. (Esta cadena se utiliza
5 para mostrar el título de la aplicación en la pantalla de bienvenida.) Inserte dos espacios para obtener
el título siguiente: My Own Browser.
Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 85
N OTA La información de versión del ensamblado que aparece aquí es también lo que mostrará la aplicación en la pantalla de bienvenida que está creando. Más avanzado este capítulo verá el código fuente que mostrará la información en la pantalla de bienvenida.
85
21/12/05 11:36:49
MÁS INFORMACIÓN En el Diseñador de proyectos, si está activada la casilla de verificación Habilitar estilos visuales de XP, la aplicación heredará la apariencia del propio Microsoft Windows® XP. Por ejemplo, proporciona controles con esquinas redondeadas que se iluminan al colocar el mouse sobre ellos. También encontrará una colorida barra de progreso y muchas otras cosas que probablemente haya visto antes. Tenga en cuenta que cuando se ejecute en una plataforma que no admita Temas de Windows XP, la aplicación cambiará a la apariencia tradicional de Windows (Windows 2000 o Windows 98).
Figura 6-5 Pantalla de bienvenida
86
X1165138BDY.indb 86
6 Haga clic en Aceptar para cerrar el cuadro de diálogo Información de ensamblado. Para conectar la pantalla de bienvenida con su aplicación, seleccione bienvenida en la lista desplega-
7 ble Pantalla de bienvenida de la parte inferior de la ficha de la aplicación del Diseñador de proyectos. Guarde la aplicación (Ctrl+Mayús+S guarda todos los archivos mientras que Ctrl+S guarda sólo el
7 archivo actual) y presione F5 para ejecutarla.
La pantalla de bienvenida debería aparecer durante un par de segundos antes de que se muestre el formulario del explorador. Dos segundos no es mucho tiempo, por lo que puede puede que no le dé tiempo a verlo. Para ver cómo queda en realidad en tiempo de ejecución, observe la Figura 6-5. La información de título, número de versión y copyright aparecerá automáticamente. Pero, ¿cómo ha llegado ahí esa información? Esta información se obtiene mediante programación utilizando una construcción que ya le será familiar: el espacio de nombres My. (Con la expresión mediante programación me refiero a escribir código para establecer u obtener algo que normalmente se establece o se obtiene usando una herramienta de interfaz de usuario como la ventana Propiedades o el Diseñador de proyectos.) Una parte importante de la plantilla Pantalla de bienvenida es el evento de carga de formulario Form Load; todos los formularios tienen un evento Load que se produce justo antes de mostrar el formulario. En ese momento es cuando normalmente se realiza la inicialización de los controles de su formulario. Revise el código resaltado del método splash_Load (en splash.vb) siguiente para entender dónde y cómo se utilizan las clases y los métodos de My para rellenar los campos de la pantalla de bienvenida.
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:50
Private Sub splash_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ‘Set up the dialog text at runtime according to the application’s assembly information. ‘TODO: Customize the application’s assembly information in the “Application” pane of the ‘ project properties dialog (under the “Project” menu). ‘Application title If My.Application.Info.Title <> “” Then ApplicationTitle.Text = My.Application.Info.Title Else ‘If the application title is missing, use the application name, without the extension ApplicationTitle.Text = System.IO.Path.GetFileNameWithoutExtension( _ My.Application.Info.AssemblyName) End If ‘Format the version information using the text set into the Version control at design ‘ time as the formatting string.
This allows for effective localization if desired.
‘ Build and revision information could be included by using the following code and ‘ changing the Version control’s designtime text to “Version {0}.{1:00}.{2}.{3}” or ‘ something similar. See String.Format() in Help for more information. ' '
Version.Text = System.String.Format(Version.Text, _
‘
My.Application.Info.Version.Major, My.Application.Info.Version.Minor, _
‘
My.Application.Info.Version.Build, My.Application.Info.Version.Revision)
Version.Text = System.String.Format(Version.Text, My.Application.Info.Version.Major, _ My.Application.Info.Version.Minor) ‘Copyright info Copyright.Text = My.Application.Info.Copyright End Sub
Como puede ver, My.Application.Info es útil para obtener la configuración de la aplicación sin leer los valores en un archivo especial. Ésa es la magia del espacio de nombres My.
Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 87
87
21/12/05 11:36:52
Es posible que le parezca que el tiempo que está visible la pantalla de bienvenida es demasiado corto. Puede que una aplicación de mayor tamaño necesite abrir conexiones a bases de datos, recuperar información y hacer todo tipo de inicializaciones tras el inicio, por lo que es posible que se tarde más de dos segundos. O bien, es posible que simplemente desee que los usuarios tengan más tiempo para ver la pantalla. Hay una forma sencilla de cambiar la cantidad de tiempo que se muestra la pantalla. En MSDN® hay un fragmento de código que le permitirá modificar el tiempo de presentación. Encontrará el fragmento de código en la dirección http://msdn.microsoft.com/vbasic/downloads/2005/snippets/default.aspx. MÁS INFORMACIÓN
MÁS INFORMACIÓN
Puede cambiar la imagen de mapa de bits de la pantalla de bienvenida por cualquier otra imagen modificando la propiedad MainLayoutPanel – BackgroundImage en la ventana Propiedades. También puede alterar el tamaño de la pantalla de bienvenida para que se ajuste al tamaño de la imagen o utilizar software de tratamiento de imágenes para cambiar el tamaño de la misma de forma que quepa en la pantalla de bienvenida.
Estoy seguro de que ha visto el formato de la ventana Propiedades para el número de la versión. Esta notación especial es el formato que reciben las cadenas. Para comprenderla bien, le recomiendo que presione F1 para buscar String.Format en la documentación del software. Encontrará todas las opciones de formato posibles e información sobre cómo utilizarlas.
Interacción con cuadros de diálogo Los cuadros de diálogo que cree ayudan al usuario a interaccionar con el software. Hay otros formularios que agregará a la aplicación. En esta sección, agregará dos cuadros de diálogo a su explorador Web: un cuadro Acerca de (About) y otro cuadro de diálogo Explorar (Navigate).
Agregar un cuadro Acerca de El primer cuadro de diálogo que agregará es un cuadro Acerca de, que existe en la mayoría de las aplicaciones para Windows. Fundamentalmente, este cuadro de diálogo contiene la misma información que la pantalla de bienvenida, pero a veces con más información legal, sobre el sistema y sobre la versión. Antes de comenzar con esta sección, asignará a Form1 un nombre más explicativo. (Tenga en cuenta que en su aplicación todo tiene que tener sentido para conseguir mayor legibilidad y más facilidad de mantenimiento.) También preparará la aplicación para transformarla en un explorador de Internet con más características. 88
X1165138BDY.indb 88
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:54
PARA AGREGAR UN CUADRO ACERCA DE 1 En el Explorador de soluciones, cambie el nombre de Form1.vb a Browser.vb. En el formulario Browser, elimine los controles txtURL y btnGo. Elimine el controlador de eventos
2 btnGo_Click quitando su firma y contenido del archivo Browser.vb.
En el formulario Browser, seleccione el control Web Browser y, usando la etiqueta inteligente, selecci-
3 one Acoplar en contenedor principal.
N OTA Cuando una directiva de procedimiento le indica que agregue un control y le asigne el nombre XYZ, significa que debe agregar el control a la superficie de diseño, ir a la ventana Propiedades y cambiar la propiedad (Nombre) del control a XYZ.
Como ya ha hecho con la pantalla de bienvenida, agregue un nuevo elemento al proyecto pero esta
4 vez, cuando aparezcan las plantillas, elija la plantilla Cuadro Acerca de y asígnele el nombre
AboutBox.vb.
De manera parecida a la pantalla de bienvenida, el cuadro Acerca de se rellenará con información de la configuración del proyecto contenida en la ventana Diseñador de proyectos. En este punto, si ejecuta la aplicación, no hay ningún vínculo entre el cuadro Acerca de y el resto del explorador, por lo que no aparecerá en ningún lugar. Normalmente, el cuadro Acerca de aparece cuando lo solicita desde el menú Ayuda, así que agregará ahora el vínculo que falta.
PARA VINCULAR EL CUADRO ACERCA DE AL MENÚ AYUDA Seleccione la ficha Browser.vb [Diseño]* para volver a la vista Diseño de Browser Form. Arrastre un
1 control MenuStrip desde el cuadro de herramientas hasta la superficie del diseñador para agregar un
control Menu Strip al formularioBrowser. Asígnele el nombre msBrowser.
Para agregar el menú Ayuda, seleccione la franja de menús del formulario, haga clic en la etiqueta
2 inteligente y seleccione Insertar elementos estándar. Obtendrá una franja de menús de aplicación
para Windows y las opciones de menú junto con sus submenús, iconos y métodos abreviados de teclado. Elimine todas las opciones de menú excepto el menú Ayuda y las opciones de menú Acerca de. . .
3 bajo el menú Ayuda. Para realizar esta eliminación, seleccione cualquier opción de menú, haga clic
con el botón secundario del mouse en ella para abrir el menú contextual y seleccione Eliminar para quitarlo. Además, quite los separadores de menú (es decir, las líneas que separan las opciones de menú).
Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 89
89
21/12/05 11:36:55
Para conectar el nuevo formulario del cuadro Acerca de con la opción de menú Acerca de. . ., haga
4 doble clic en la opción de menú Acerca de. . . para obtener el controlador de eventos
AboutToolStripMenuItem_Click. N OTA He modificado los campos de Información de ensamblado del Diseñador de proyectos para que aparezcan con la información incluida en el cuadro Acerca de. Usted puede hacer lo mismo. Simplemente ha de agregar o modificar el contenido de los campos Descripción, Compañía y Copyright.
5 Agregue la siguiente línea de código al controlador de eventos: AboutBox.ShowDialog()
Guarde la aplicación y, a continuación, ejecútela. Seleccione Acerca de. . . en el menú Ayuda. Esta
6 pantalla debe ser similar a la de la figura 6-6. El método ShowDialog() abre el formulario en el centro
de la aplicación que está en ejecución y no ocurre nada más hasta que haga clic en uno de sus botones o en la X roja para cerrar el cuadro de diálogo. En este caso, sólo tiene el botón Aceptar.
Figura 6-6 Cuadro Acerca de que aparece en la aplicación de explorador recién refinada
90
X1165138BDY.indb 90
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:36:57
Probablemente se esté preguntando por qué funcionaba la aplicación cuando hizo clic en el botón Aceptar, a pesar de no haber escrito ningún código para controlar este evento. Éste es un ejemplo de las ventajas de productividad que conseguirá utilizando las plantillas. La plantilla incluye el código necesario para controlar el evento click del botón. Revise el código fuente del cuadro de diálogo haciendo clic con el botón secundario del mouse en el nombre de archivo AboutBox.vb en el Explorador de soluciones y seleccionando Ver código. De nuevo, como se explicó en la sección dedicada a la pantalla de bienvenida, usar My.Application.Info proporciona acceso rápido a la información de aplicación contenida en el Diseñador de proyectos. Además, observe que el evento click tiene una única línea de código que indica al formulario que debe llamar al método Close(). Ahora que ha agregado el cuadro Acerca de, le debe resultar sencillo agregar otro que permita a los usuarios explorar páginas Web.
Agregar un cuadro de diálogo Explorar Ya vimos antes que eliminando el botón y los controles de dirección se quitó la capacidad de explorar una página Web. Por supuesto, esto no es nada útil para un explorador Web. Ahora agregará un cuadro de diálogo que proporcionará a los usuarios otra forma de explorar páginas Web.
PARA AGREGAR UN CUADRO DE DIÁLOGO EXPLORAR Como ya ha hecho para el cuadro Acerca de y la pantalla de bienvenida, agregue un elemento más
1 al proyecto. Utilizando las plantillas, seleccione una plantilla Cuadro de diálogo y asígnele el nombre
Navigate.vb.
2 Agregar una etiqueta y un cuadro de texto: ■ Asigne a la etiqueta el nombre lblInfoUrl. Establezca la propiedad Text en “Type an Internet address and My Own Browser will open it for you”. ■ Asigne al cuadro de texto el nombre txtUrl y establezca las propiedades AutoCompleteMode en SuggestAppend y AutoCompleteSource en AllUrl. Ajuste el tamaño y la posición de los controles y el formulario, de manera que el formulario Navigate 3 sea similar al que se muestra en la figura 6-7.
Figura 6-7 Formulario Navigate
Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 91
MÁS INFORMACIÓN Como probablemente haya visto en la película del tutorial sobre la programación orientada a objetos (vaya a http://go.microsoft.com/ fwlink/?linkid=44030&clcid=0x409 y consulte las partes 1 y 2 de la lección 6), Me se refiere a la instancia actual de un objeto. En este caso, se trata de una instancia de la clase AboutBox. Me se utiliza para tener acceso a todos los campos, propiedades y métodos públicos definidos en la clase. En este ejemplo, Me le permite asignar contenido a campos pertenecientes a la clase AboutBox, que también son los campos del formulario AboutBox. Recuerde que en .NET todo es un objeto: los campos de un formulario son miembros de una clase, y una instancia de formulario es un objeto.
MÁS INFORMACIÓN Normalmente, un cuadro de diálogo suele ser un Formulario modal. Tiene un comportamiento predefinido por el cual el usuario no puede hacer clic en otra cosa que no sean los controles de ese formulario: los botones OK y Cancel o el botón de la X roja para cerrar el formulario. Esto significa que, hasta que se cierre el cuadro de diálogo, el usuario no podrá hacer clic en ningún otro elemento de la aplicación. Para comprender qué está ocurriendo, piense en el cuadro de diálogo Imprimir de Microsoft Word: una vez que se muestra, no puede volver al documento para efectuar cambios mientras está abierto el cuadro de diálogo. El cuadro de diálogo Imprimir es un formulario modal.
91
21/12/05 11:36:58
Ha establecido algunas de las propiedades de autocompletar del cuadro de texto para que tengan el mismo comportamiento que en Microsoft Internet Explorer. Esto significa que el cuadro de texto sugerirá y anexará direcciones URL en función de las letras que escriba el usuario. Ahora conectará este formulario con la aplicación usando un nuevo menú llamado Navigate.
PARA CONECTAR EL FORMULARIO CON LA APLICACIÓN USANDO EL MENÚ NAVIGATE Vuelva al formulario Browser en la vista Diseño y observe la parte superior del formulario Browser. Ya
1 tiene una franja de menús con el menú Ayuda; ahora agregue un nuevo menú a la franja haciendo
clic junto al menú Ayuda y escribiendo &Navigate. El símbolo & situado delante de la N creará una N subrayada para que el usuario pueda presionar la combinación de teclas Alt+N para desencadenar el evento Click en el menú Navigate. Una vez creado, verá que el menú Navigate aparece a la derecha del menú Ayuda. Para
2 mover una opción de menú, basta con seleccionarla y arrastrarla hasta la posición que desee que
ocupe. En este caso, colóquelo a la izquierda del menú Ayuda.
Antes de agregar el código para el evento propiamente dicho, es necesario agregar una línea de
3 código importante. Recuerde que en Visual Basic todo es un objeto y que, si desea manipular otro
formulario e intercambiar datos entre ambos formularios, debe crear primero un objeto de ese tipo que sea visible para el formulario principal (formulario Browser): en este caso, un objeto del tipo Navigate. Cree una instancia del formulario Navigate fuera del código fuente de cualquier controlador de eventos escribiendo la siguiente línea de código en Browser.vb: Dim NavigateWindow As New Navigate()
Fíjese en la Figura 6-8 para ver dónde insertarla.
Figura 6-8 Crear una nueva instancia del formulario Navigate
92
X1165138BDY.indb 92
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:00
Ahora que ya tiene una instancia de la clase de formulario Navigate, puede escribir código para intercambiar datos entre ambos formularios. Y eso es exactamente lo que ocurrirá. Cuando aparezca el formulario Navigate y el usuario haga clic en el botón Aceptar con una dirección URL escrita en el cuadro de texto, el control del explorador abrirá la dirección URL especificada. Tenga también en cuenta que el cuadro de texto de la dirección URL quedará en blanco después de desplazarse hasta la dirección URL para asegurarse de que aparecerá vacío la siguiente vez que el usuario tenga acceso al mismo. En el formulario Browser, haga doble clic en el menú Navigate para agregar el controlador de
4 eventos NavigateToolStripMenuItem_Click.
MÁS INFORMACIÓN
5 Agregue el código siguiente al controlador de eventos NavigateToolStripMenuItem_Click. If (NavigateWindow.ShowDialog() = Windows.Forms.DialogResult.OK) Then Me.myBrowser.Navigate(NavigateWindow.txtUrl.Text) End If NavigateWindow.txtUrl.Text = “”
Genere y ejecute la aplicación presionando F5. El formulario debería ser similar al de la Figura 6-9
6 cuando el usuario seleccione el menú Navigate.
Figura 6-9 Ejecución de My Own Browser usando el formulario de exploración con autocompletar
Ahora, pruebe la aplicación con todas las modificaciones que ha realizado. Compruebe todos los
7 aspectos nuevos:
■ ¿Se abre el formulario Navigate al presionar Alt+N? ■ ¿Se puede hacer clic en Cancelar con/sin contenido? ■ ¿Se puede ir a una dirección URL correcta/incorrecta? ■ ¿Está vacío el cuadro de texto al volver al formulario Navigate (es decir, después de haber realizado todos los demás pasos anteriores y presionar Alt+N para volver)?
Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 93
Es importante que empiece a aprender cómo probar su propio código haciendo lo que se denomina pruebas de caja negra. En un nivel elevado, consiste en realizar pruebas de lo que el usuario puede hacer y de lo que se le presenta. Esto significa que es necesario probar hasta el mínimo detalle de la interfaz de usuario, así como las situaciones que ésta ofrece al usuario. Cuando realice una tarea así, le sugiero que cree una hoja de cálculo que contenga una matriz de todos los casos de prueba. Después vaya rellenándola a medida que realiza las pruebas. De esta manera tendrá una representación visual de todas las pruebas y las características. Por el momento lo hará manualmente porque el ámbito de la aplicación es reducido, pero pronto se dará cuenta de que con aplicaciones de mayor tamaño u otra aplicación que pueda vender, necesitará algún tipo de mecanismo automatizado para asegurarse de que se realizan todas las pruebas y de que no pasa ninguna por alto. Después requerirá una herramienta de prueba de interfaces de usuario y, en la mayor parte de los casos, deberá crear sus propias herramientas. Pero esto sale del contexto de este libro; sólo quería hacer hincapié en la importancia de probar la aplicación.
93
21/12/05 11:37:01
Una apariencia profesional al alcance de la mano En esta sección continuará agregando funcionalidad a su explorador usando componentes que puede haber visto en otras aplicaciones de Microsoft. Incluirá atractivos toques profesionales en la aplicación de una manera rápida y sencilla.
Agregar un contenedor de franja de herramientas y algunas herramientas Un contenedor de franja de herramientas es un nuevo control incluido con esta versión de Visual Basic 2005 que le permite hacer que los usuarios puedan personalizar la aplicación, de manera similar a como se pueden personalizar las barras de herramientas de Microsoft Office Outlook® o Word. El contenedor de franja de herramientas posee cinco paneles, uno a cada lado de la pantalla y un panel de contenido en el centro. Puede tenerlos todos habilitados en la pantalla al mismo tiempo o elegirlos de manera selectiva en tiempo de diseño. También puede controlarlos mediante código fuente. O bien, puede colocar una franja de herramientas y una franja de menús en un contenedor de franja de herramientas en tiempo de diseño y, en tiempo de ejecución, los usuarios tendrán la posibilidad de organizar el espacio de trabajo según sus preferencias. El contenedor de franja de herramientas confiere a la aplicación la misma apariencia que la de Outlook (vea la Figura 6-10). Por ejemplo, yo he podido poner dos franjas de herramientas en el lado izquierdo de mi pantalla. Esto significa que esas franjas de herramientas estarán incrustadas en el contenedor de franja de herramientas del panel izquierdo. Pero podría devolver fácilmente cualquier barra de herramientas visible a la parte superior, derecha o inferior de la pantalla. Gracias al contenedor de franja de herramientas, puede dar a los usuarios el control del diseño de sus franjas de herramientas y menús, que es una característica muy atractiva.
Figura 6-10 Ejemplo de contenedor de franjas de herramientas en Outlook
94
X1165138BDY.indb 94
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:02
PARA AGREGAR UN CONTENEDOR DE FRANJA DE HERRAMIENTAS Arrastre un contenedor de franja de herramientas hasta la superficie del diseñador del formulario
1 Browser Form.
2 Cambie el nombre toolstripcontainer1 por mainFormToolStripContainer. 3 Utilice la etiqueta inteligente del contenedor de franja de herramientas para seleccionar Acoplar relleno en formulario.
Espere un momento . . . ¿dónde está el control Web Browser? No se preocupe; no ha desaparecido. Ha cambiado el orden z del control. El control Web Browser aparece visualmente debajo del contenedor de franja de herramientas y su elemento principal no es el contenedor, sino el formulario del explorador. La vista Esquema del documento es una herramienta valiosa que puede ayudarle a solucionar este problema y ahorrar mucho tiempo. Si está familiarizado con las versiones anteriores de Visual Studio, esta vista sólo existía previamente para documentos HTML y ASPX. Con Visual Studio 2005, se ha extendido a Windows Forms. Para incluir la vista Esquema del documento en el IDE, basta con ir a Ver/Otras ventanas/Esquema del documento o presionar Ctrl+Alt+T. Esta vista permite administrar todos los controles del formulario. Muestra la disposición de los controles en la pantalla y qué controles pertenecen a otros controles. Por ejemplo, ahora mismo no tiene a la vista el control Web Browser, pero si habilita la vista Esquema del documento, verá que el control Web Browser está en el mismo nivel que el contenedor de franja de herramientas recién agregado (vea la figura 6-11). Para volver a organizarlos y cambiar la presentación de los controles, realice los pasos siguientes.
N OTA El orden Z es la posición del control en relación con las demás ventanas o controles de la pantalla; considérelo como la tercera dimensión o como el hecho de que unos controles estén encima o debajo de otros controles.
Figura 6-11 Ventana Esquema del documento del proyecto My Own Browser
Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 95
95
21/12/05 11:37:04
PARA CAMBIAR EL ORDEN DE LOS CONTROLES En la ventana Esquema del documento, seleccione el control Web Browser llamado myBrowser y
1 arrástrelo para colocarlo justo debajo del panel del contenedor de franja de herramientas llamado
mainFormToolStripContainer.ContentPanel. (Mientras arrastre el control Web Browser, una línea negra indica el lugar en el que se colocará el control si suelta el botón del mouse.) Ahora vuelva a mostrar el formulario. El control Web Browser está en el centro del formulario. Pero
MÁS INFORMACIÓN Si lo requiere el diseño de la aplicación y desea limitar las posibilidades del usuario en cualquier sentido, también puede ocultar paneles e impedir a los usuarios acoplar cualquier franja de herramientas o de menús de un panel. Usemos la aplicación actual como ejemplo. Si desea hacerlo, seleccione el control de contenedor de franja de herramientas llamado mainFormToolStripContainer. Puede seleccionarlo en la ventana Propiedades o en el Esquema del documento. A continuación, modifique la propiedad Visible del panel que desea ocultar. Por ejemplo, si desea ocultar el panel inferior, establezca en False la propiedad BottomToolStripPanel Visible.
2 como puede ver, el control Menu Strip de franja de menús no está en el contenedor de franja de
herramientas. Repita el paso 1 para el control Menu Strip, pero en lugar de ponerlo en el panel de contenido, colóquelo en el panel superior del contenedor de franja de herramientas (mainFormToolStripCon tainer.TopToolStripPanel).
Ahora lo único que falta en la nueva franja de menús es el control punteado como el que se puede ver en la figura de Outlook. Sin este control, los usuarios no podrán seleccionar la franja de herramientas, sino que estará fija al panel superior.
PARA AGREGAR UN CONTROL PUNTEADO A LA FRANJA DE MENÚS En la ventana Esquema del documento, seleccione la franja de menús denominada msBrowser, vaya
1 a la ventana Propiedades y establezca la propiedad GripStyle en Visible.
Ejecute la aplicación presionando F5. Lleve la franja de menús de un panel al otro. Ahora tiene una
2 aplicación tan bonita como Outlook.
Agregar una barra de estado al explorador Su aplicación está adquiriendo una gran riqueza de características, pero para hacerla más similar a la mayoría de las aplicaciones para Windows, es necesaria una barra de estado para ofrecer información sobre lo que está ocurriendo en cualquier momento de la ejecución. Para hacerlo con su explorador, agregará un control de franja de estado (Status Strip) y, dentro de ella, incluirá una barra de progreso.
96
X1165138BDY.indb 96
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:05
PARA AGREGAR UN CONTROL DE FRANJA DE ESTADO Y UNA BARRA DE PROGRESO Haga clic en el controlador del panel inferior para expandirlo. (Observe que la dirección de la flecha
1 del glifo se invierte al hacer clic en él.) El panel inferior del contenedor de franja de herramientas se
muestra como una franja azul.
Arrastre un control Status Strip hasta el panel inferior del contenedor de franja de herramientas. Una
2 vez colocado en el panel inferior, debería expandirse hasta ocupar toda la superficie del panel. 3 Cambie el nombre del control Status Strip de StatusStrip1 a sscBrowser. Cambie la propiedad RenderMode del control Status Strip a Professional. De esta forma, la
4 aplicación podrá presentar al usuario una barra de estado con los colores del sistema operativo. Por
ejemplo, si los temas de Windows XP son de color azul, la barra de estado también será de color azul.
Agregue un control Label a la franja de estado haciendo clic en la flecha hacia abajo del botón Add
5 del control Status Strip y seleccionando después StatusLabel.
6 Cambie el control de ToolStripStatusLabel1 a lblApplicationStatus. 7 Agregue una barra de progreso a la franja de estado como lo hizo para el control Label. 8 Cambie el control de ToolStripProgressBar1 a pbStatus. Cuando se muestran al usuario la franja de estado y la barra de progreso, normalmente aportan información importante sobre los eventos que tienen lugar durante la ejecución. Considérelos como una carta que recibe en casa. Oye llamar al cartero y se da cuenta de que ha recibido correo. Éste es el evento que se desencadena. Luego abre el buzón y el sobre para ver que es la factura de su tarjeta de crédito. La factura es una de las piezas de información que acompañan al evento. Análogamente, para rellenar los controles de la franja de estado, deberá configurar la aplicación para que extraiga esta información de todos los controles (es decir, del sobre) cuando se produzcan los eventos (es decir, cuando llegue el cartero). Y todo eso lo hará mediante programación, escribiendo código en los controladores de eventos. Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 97
97
21/12/05 11:37:06
PARA RELLENAR CONTROLES CON INFORMACIÓN En la superficie del diseñador, seleccione el formulario My Own Browser haciendo clic en su barra de
1 título. Observe la ventana Propiedades para asegurarse de que está seleccionado el formulario
Browser y haga clic en el botón Evento (rayo amarillo) de la ventana Propiedades. Busque el evento Load y haga doble clic en él para abrir el controlador de eventos predeterminado: Browser_Load. (El evento Load del formulario se produce antes de que se muestre el formulario al usuario. Por tanto, se trata de un buen sitio para cambiar las propiedades que afectan a las apariencias visuales de un formulario.) Agregue el siguiente código al evento (Browser_Load) para modificar la etiqueta del mensaje de esta-
2 do (lblApplicationStatus) en la franja de estado. Me.lblApplicationStatus.Text = “Ready”
Ahora adjuntará código a la barra de progreso y modificará la etiqueta de la franja de estado para indicar adónde se dirige la exploración del usuario. Cuando se haya descargado por completo la página al equipo cliente, restablecerá el contenido de la etiqueta de la franja de estado a la palabra “Ready” (Listo). También modificará el título del explorador para que incluya la dirección URL que ha explorado el usuario. Siempre que se hace clic en el botón Aceptar del formulario Navigate, el control Web Browser llamado myBrowser desencadena el evento Navigating. Ahí es donde empezará a escribir código. Seleccione el control myBrowser y vaya después a la lista Eventos de la ventana Propiedades. Haga
3 doble clic en el evento Navigating y escriba el código siguiente:
‘ Modifying the label in the status strip with the URL entered by the user Me.lblApplicationStatus.Text = “Navigating to: “ + e.Url.Host.ToString()
Una vez que el usuario haya escrito una dirección URL y se esté descargando el documento, será necesario actualizar la barra de progreso. El control Web Browser desencadena periódicamente el evento ProgressChanged. Ahí es donde actualizará la barra de progreso de la franja de estado. Asegúrese de que el control myBrowser está seleccionado en la ventana Propiedades y vaya después
4 a la lista Eventos. Haga doble clic en el evento ProgressChanged. Escriba el código siguiente (observe
los comentarios para comprender el código fuente.):
‘ The CurrentProgress variable from the raised event ‘ gives you the current number of bytes already downloaded ‘ while the MaximumProgress is the total number of bytes ‘ to be downloaded If e.CurrentProgress = to the maximum if yes reset it with the min If pbStatus.Value >= pbStatus.Maximum Then pbStatus.Value = pbStatus.Minimum
98
X1165138BDY.indb 98
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:08
Else ‘ Just increase the progress bar pbStatus.PerformStep() End If Else ‘ When the document is fully downloaded ‘ reset the progress bar to the min (0) pbStatus.Value = pbStatus.Minimum End If
Cuando el documento del usuario se haya descargado por completo, el explorador desencadenará el evento DocumentCompleted. Cuando se produce este evento, es necesario actualizar el título de la aplicación con la dirección URL actual y la etiqueta de estado de la aplicación de la franja de estado deberá cambiarse al estado “Ready”. En la lista de eventos myBrowser, haga doble clic en el evento DocumentCompleted. A
5 continuación, agréguele el siguiente código:
‘Get Application title using the My namespace If My.Application.Info.Title <> “” Then Me.Text = My.Application.Info.Title + “ - “ + e.Url.Host.ToString() Else ‘If the application title is missing, ‘use the application name, without the extension Me.Text = System.IO.Path.GetFileNameWithoutExtension(_<SoftReturn>
My.Application.Info.
AssemblyName) + “ - “ + e.Url.Host.ToString() End If Me.lblApplicationStatus.Text = “Ready”
Como puede ver, en este código hemos vuelto a utilizar código fuente parecido al usado en las secciones del cuadro Acerca de y del cuadro de diálogo de la pantalla de bienvenida. Utiliza las clases y los métodos del espacio de nombres My. Guarde todos los archivos y ejecute ahora la aplicación. Debe tener una barra de progreso en
6 funcionamiento que muestre toda la información nueva: la ventana de título modificada y la etiqueta
de la franja de estado.
Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 99
99
21/12/05 11:37:09
Personalizar la aplicación con iconos de Windows En esta sección continuará personalizando su explorador agregando algunos iconos incluidos en conocidas aplicaciones de Microsoft. Después de esta sección tendrá un explorador de Internet que funciona, con la mayoría de las características de exploración totalmente implementadas; puede que no tenga toda la funcionalidad de Internet Explorer, pero debe estar orgulloso de sí mismo. Observe la figura 6-12 para ver lo que habrá conseguido después de terminar esta sección.
Figura 6-12 Su explorador al final de esta sección
100
X1165138BDY.indb 100
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:11
Como puede ver, en esta sección implementará una buena lista de características. Esto es lo que va a realizar: ■ Vincular todos los botones a funcionalidades de explorador ■ Administrar el botón Go y la tecla entrar del cuadro de texto de dirección de la franja de herramientas ■ Cambiar el icono del formulario del explorador para que sea el mismo icono del globo terráqueo que ha establecido para el icono de la aplicación en el disco duro En primer lugar, agregará dos nuevas franjas de herramientas y todos sus botones. También agregará el código necesario para controlar todos esos nuevos botones. Cada vez que agregue un botón, cámbiele el nombre antes de escribir el código de control del evento. Debería hacerlo para asegurarse de que los nombres de las variables son correctos. Es una cuestión de coherencia y prácticas recomendadas.
MÁS INFORMACIÓN Le sugiero que cambie inmediatamente los nombres de los botones al agregarlos para asegurarse de que el código del controlador de eventos tiene el nombre adecuado. Los nombres de los botones se pueden cambiar más adelante, pero resultará más tedioso porque tendrá que realizar pasos adicionales, lo que requiere más tiempo. Es más fácil, más directo y más rápido hacerlo en el momento de crear los controles.
PARA AGREGAR FRANJAS DE HERRAMIENTAS Y BOTONES AL EXPLORADOR Comience por agregar dos nuevas franjas de herramientas al formulario del explorador, justo debajo
1 de la franja de menús. Asigne al primero el nombre tsIcons y, al segundo, tsNavigation. Utilice el
Esquema del documento para asegurarse de que ambas están debajo del panel superior del contenedor de la franja de herramientas. Seleccione la franja de herramientas tsIcons. Después, utilizando la lista desplegable Agregar
2 elemento de franja de herramientas, agregue seis botones y asígneles los nombres tsbBack,
tsbForward, tsbStop, tsbRefresh, tsbHome y tsbSearch.
Para modificar la imagen de cada botón, cambie la propiedad Image del control Tool Strip Button
3 haciendo clic en el botón de Puntos suspensivos (...) para buscar el icono en el disco duro. O también
puede hacer clic con el botón secundario del mouse en el icono de la franja de herramientas y seleccionar el comando Establecer imagen. . . Después usará el mismo cuadro de diálogo para importar los archivos de imagen desde el disco duro. Todas las imágenes de estos botones se encuentran en la carpeta Images, bajo Chapter6, donde instaló el contenido complementario. Para el botón tsbSearch, haga clic en él con el botón secundario del mouse, seleccione Estilo de
4 presentación y establézcalo en ImageAndText.
5 Modifique la propiedad Texto del botón tsbSearch y escriba Search. Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 101
101
21/12/05 11:37:12
Agregue la funcionalidad correspondiente a cada botón. (Verá lo fácil que resulta agregar la funciona-
6 lidad deseada porque el control Web Browser está bien diseñado.) Haga doble clic en un botón tras
otro y entrará en el evento Click de cada uno de ellos. En cada evento Click, agregue el código siguiente. Vea más abajo el nombre del botón y el código fuente del evento correspondientes. tsbBack
myBrowser.GoBack()
tsbForward
myBrowser.GoForward()
tsbStop
myBrowser.Stop()
tsbRefresh
myBrowser.Refresh()
tsbHome
myBrowser.GoHome()
tsbSearch
myBrowser.GoSearch()
Ejecute la aplicación y pruebe si funcionan los botones. Todo debería funcionar, salvo los botones de
7 exploración.
Ahora modificará el comportamiento de los dos botones de exploración de la franja de herramientas tsbIcons para asegurarse de que sólo están habilitados cuando deben estarlo; es decir, cuando hay páginas en el historial del explorador. Cuando inicie la aplicación, los botones deberían estar deshabilitados. El mejor lugar donde colocar este código es el evento Load del formulario Browser. Es un buen lugar porque el evento se producirá justo antes de que el usuario vea realmente el formulario. A continuación debe pensar dónde colocar el código que habilitará y deshabilitará los dos botones de exploración. El lugar ideal para el código de validación es donde se produce la exploración, ya que en ese momento sabe que el explorador se desplazará a una nueva dirección URL.
102
X1165138BDY.indb 102
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:13
PARA MODIFICAR EL COMPORTAMIENTO DE LOS BOTONES DE EXPLORACIÓN 1 En Browser.vb, modifique Browser_Load y myBrowser_Navigating para que queden de la manera siguiente. Private Sub Browser_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ‘ Disabling both navigation buttons in the Icons tool strip Me.tsbBack.Enabled = False Me.tsbForward.Enabled = False Me.lblApplicationStatus.Text = “Ready” End Sub Private Sub myBrowser_Navigating(ByVal sender As System.Object, ByVal e As System.Windows. Forms.WebBrowserNavigatingEventArgs) Handles myBrowser.Navigating ‘ Add the code to enable or disable whenever there are URLs ‘ in the browsing session’s history If myBrowser.CanGoBack Then tsbBack.Enabled = True Else tsbBack.Enabled = False End If If myBrowser.CanGoForward Then tsbForward.Enabled = True Else tsbForward.Enabled = False End If ‘ Modifying the label in the status strip with the URL entered by the user Me.lblApplicationStatus.Text = “Navigating to: “ + e.Url.Host.ToString() End Sub
2 Ejecute la aplicación para averiguar si el comportamiento de los botones es ahora el correcto.
Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 103
103
21/12/05 11:37:14
A continuación agregará los nombres y los controles a la franja de herramientas tsNavigation, igual que hizo con la franja de herramientas anterior. Sin embargo, esta vez, en lugar de agregar botones de franja de herramientas, agregará otros tipos de controles distintos. Por ejemplo, modificará el explorador para que vaya a la dirección URL especificada en el cuadro de texto cuando el usuario presione Entrar. También modificará el comportamiento al hacer clic en el botón Go para asegurarse de que hace lo mismo.
PARA AGREGAR NUEVOS CONTROLES A LA FRANJA DE HERRAMIENTAS TSNAVIGATION Utilice la lista desplegable Agregar elemento de franja de herramientas de tsNavigation y agregue los
1 controles siguientes a la franja de herramientas: Label, TextBox y Button. Asigne a los controles los
nombres tslblAddress, tstbUrl y tsbGo.
Utilice la tabla siguiente y establezca las propiedades de los controles.
Nombre del control Tipo
Propiedades
Valor
tslblAddress
ToolStripLabel
Text
tstbUrl
ToolStripTextBox
Size:Width
350
tsbGo
ToolStripButton
Text
Go
tsbGo
ToolStripButton
DisplayStyle
ImageAndText
tsbGo
ToolStripButton
Image
Go.bmp
La franja de herramientas tsNavigation no es un cuadro de diálogo con un botón Aceptar y otro botón Cancelar, por lo que no puede usar las propiedades AcceptButton ni CancelButton. Por consiguiente, deberá controlar otro evento que se desencadenará cuando el usuario presione Entrar. El evento KeyUp se produce cuando el usuario suelta una tecla. Por ejemplo, cada vez que el usuario escribe una letra, presiona la tecla de la letra deseada. Cuando suelta esa tecla, se desencadena el evento KeyUp. El código que agregará en el ejercicio siguiente determinará si la tecla que acaba de soltar el usuario era la tecla Entrar. Si lo era, un nuevo método denominado NavigateToUrl aceptará una cadena que representa la dirección URL como un parámetro e irá a la dirección URL. 104
X1165138BDY.indb 104
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:16
Utilizará el mismo método para el botón Go. Cuando desarrolla una aplicación, nunca desea duplicar dos fragmentos de código que sólo se diferencian en un valor literal. Siempre que sea posible, deseará volver a utilizar el código fuente. La forma de hacerlo consiste en crear métodos que sean lo suficientemente genéricos para que los pueda usar más de un componente. Dado que el método NavigateToUrl sólo tiene una línea de código, puede verse tentado a decir que es casi la misma línea de código, ¿por qué usar un método? La respuesta es simplemente que en el futuro podría tener la necesidad de agregar algún tipo de validación. Si esa línea de código se repite en el código fuente, deberá actualizarla en varios lugares. Sin embargo, si sólo hay un lugar en el que deba modificar el código, la solución será menos proclive a los errores y bastante menos tediosa.
PARA CONFIGURAR EL EXPLORADOR Y DESPLAZARSE A LA DIRECCIÓN URL 1 Seleccione el cuadro de texto del control Tool Strip tstbUrl. En la lista de eventos de la ventana Propiedades para tstbUrl, haga doble clic en el evento KeyUp.
2 Más adelante se incluye código para determinar si el usuario presionó y soltó la tecla Entrar y,
además, el método NavigateToUrl que le permitirá usar el mismo código en más de un lugar. Agregue este código a tstbUrl_KeyUp y agregue el método NavigateToUrl. Private Sub tstbUrl_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.
N OTA Por cierto, se desencadena más de un evento al presionar la tecla Entrar, pero el que va a controlar es el evento KeyUp.
KeyEventArgs) Handles tstbUrl.KeyUp ‘ e is of type KeyEventArgs and contains all the ‘ information that triggered the event. The KeyCode ‘ is one those information. If e.KeyCode = Keys.Enter Then Me.NavigateToUrl(tstbUrl.Text) End If End Sub Private Sub NavigateToUrl(ByVal Url As String) Me.myBrowser.Navigate(Url) End Sub
Haga doble clic en el botón Go de la franja de herramientas tsNavigation y agregue el código
3 siguiente al procedimiento de evento
tsbGo_Click. (Observe que éste es el método NavigateToUrl.) Private Sub tsbGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbGo.Click Me.NavigateToUrl(tstbUrl.Text) End Sub
Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 105
105
21/12/05 11:37:17
Ahora puede modificar otra sección del código, el evento Click del menú Navigate. Simplemente tendrá que modificar el código para que llame al método NavigateToUrl, como se indica más adelante: Private Sub NavigateToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System. EventArgs) Handles NavigateToolStripMenuItem.Click If (NavigateWindow.ShowDialog() = Windows.Forms.DialogResult.OK) Then Me.NavigateToUrl(NavigateWindow.txtUrl.Text) End If NavigateWindow.txtUrl.Text = “” End Sub
PARA MODIFICAR EL ICONO DEL FORMULARIO DEL EXPLORADOR Por último, modificará el icono del formulario Browser para que el usuario vea un globo terráqueo cuando el explorador esté en ejecución o minimizado. Seleccione el formulario Browser y busque la
1 propiedad Icono en la ventana Propiedades. Si sólo ve
eventos en la ventana Propiedades, haga clic en el botón Propiedades situado en la parte superior de la ventana Propiedades. Haga clic en el botón Puntos suspensivos (...) para buscar el archivo globe.ico en la carpeta Images situada bajo el directorio del capítulo 6.
El resultado de este duro trabajo es el producto terminado: la aplicación My Own Browser, como se puede ver en la Figura 6-13.
Figura 6-13 Producto terminado: la aplicación My Own Browser
106
X1165138BDY.indb 106
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:19
En resumen... En este capítulo ha tomado una aplicación sencilla y la ha mejorado para convertirla en una aplicación de apariencia profesional que incluye muchas características útiles para los usuarios. Ha aprendido a agregar una pantalla de bienvenida a la aplicación y a trabajar con cuadros de diálogo. Creó un cuadro Acerca de y un cuadro de diálogo Explorar para permitir a los usuarios examinar una dirección URL; agregó una característica de autocompletar a los cuadros de texto y la característica de sugerencias automáticas o anexar texto al usar el historial de direcciones URL del explorador. Después agregó franjas de herramientas, franjas de progreso e iconos desde Windows. Ha administrado los controles dinámicamente y aprendió muchas cosas sobre nuevos eventos y cómo controlarlos usando argumentos de eventos. En el siguiente capítulo aprenderá técnicas que puede usar cuando las cosas no van demasiado bien; es decir, aprenderá el arte de depurar código. También conocerá la característica Editar y continuar, los nuevos visualizadores de datos, sugerencias y trucos, y mucho más.
Capítulo 6: Modificar su explorador Web
X1165138BDY.indb 107
107
21/12/05 11:37:21
X1165138BDY.indb 108
21/12/05 11:37:21
Capítulo 7 Reparar los bloques rotos
7 Depurar una aplicación, 110
X1165138BDY.indb 109
A medida que vaya descubriendo cada vez más cosas, cuando desarrolle una aplicación, raras veces todo funcionará correctamente al primer intento. La mayoría de las veces (sobre todo al empezar a desarrollar aplicaciones), el proceso va así: lluvia de ideas en papel, examinar las necesidades de los usuarios (normalmente las suyas), realizar algo de análisis, preparar un prototipo, diseñar, desarrollar, probar, corregir errores, volver a probar el producto y, por último, facilitarlo a otras personas. Ésta es una visión muy general del proceso, pero puede ser mucho más complejo o más sencillo. Todo depende de la complejidad del proyecto, del número de personas implicadas y de otros factores. Pero una cosa es segura: siempre es necesario depurar las aplicaciones y Microsoft® Visual Basic® 2005 proporciona muchas herramientas para ayudarle a resolver los errores más rápidamente.
109
21/12/05 11:37:21
Depurar una aplicación
N OTA El programa está exclusivamente preparado para los fines educativos de este capítulo. No hace nada interesante, salvo enseñar técnicas de depuración.
Para aprender las herramientas y técnicas de depuración de las aplicaciones, he creado una aplicación de ejemplo que usaremos para este capítulo. Si instaló el contenido complementario en la ubicación predeterminada, debe estar en la siguiente ubicación de su disco duro: Mis documentos\Microsoft Press\VB 2005 Express\Chapter7\. Busque una carpeta denominada Inicio del depurador bajo la carpeta del Capítulo 7. Haga doble clic en la solución Debugger.sln. Esta solución contiene nuevos elementos que no hemos visto todavía: el primero es una solución que incluye más de un proyecto. Se trata de una práctica común al desarrollar aplicaciones. En este caso, la solución (llamada Debugger) contiene dos proyectos: una aplicación de Microsoft Windows® Forms denominada Debugger y una biblioteca administrada llamada MyLibrary (DLL administrada). El acrónimo DLL significa Dynamic Link Library (Biblioteca de vínculos dinámicos). Una DLL es una biblioteca de funciones a las que se llama dinámicamente cuando las necesita una aplicación. Una DLL no contiene ningún punto de entrada principal y no se puede ejecutar por sí misma. Además, una DLL no la pueden usar varias aplicaciones al mismo tiempo. El segundo aspecto nuevo es que el proyecto Debugger tiene un tipo de archivo que no hemos visto todavía: un archivo de texto. En los proyectos puede haber muchos archivos distintos y los archivos de texto no son infrecuentes. En este caso, el archivo de texto lo utiliza uno de los métodos a los que llama la aplicación debugger.exe. Esta aplicación utilizará el archivo de texto, así que para tenerlo en la carpeta de resultados, tiene que seleccionarlo en el Explorador de soluciones y cambiar la propiedad Copiar en el directorio de resultados a Copiar si es posterior.
Usar una DLL en una aplicación Cuando se diseña una aplicación, es normal tener más de un componente. En muchos casos, los componentes son nuevas clases (tipos). Es aconsejable tener esos tipos en un archivo de código fuente independiente en lugar de mantenerlos junto con el código de la interfaz de usuario. Normalmente, las clases se agrupan en una sola biblioteca o DLL. Cuando desee usar un tipo incluido en una biblioteca, es necesario hacer que la aplicación conozca todos los tipos y métodos contenidos en esa biblioteca agregando una referencia a la misma en la aplicación. 110
X1165138BDY.indb 110
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:29
Agregar una referencia a la aplicación Para agregar nuevas referencias a la aplicación, siga estos pasos.
PARA AGREGAR UNA REFERENCIA A LA APLICACIÓN 1 Seleccione el proyecto en el que desea agregar la referencia; en este caso, seleccione Debugger. Haga clic con el botón secundario del mouse (ratón) en Agregar referencia. . . Observe la Figura 7-1
3 para asegurarse de que está en el lugar adecuado.
Como puede ver en las fichas del cuadro de diálogo que aparece, las referencias pueden provenir de varios orígenes. Seleccione la ficha Proyectos y, a continuación, el proyecto MyLibrary, que contiene la biblioteca
3 DLL administrada. Haga clic en Aceptar para agregar la referencia al proyecto.
Figura 7-1 Opción de menú Agregar referencia. . . del proyecto Debugger
Puesto que la biblioteca DLL se encuentra en la misma solución y acaba de agregar una referencia a esa DLL a la aplicación, Microsoft Visual Studio® ya sabe que hay una dependencia entre ambas y siempre generará la DLL en primer lugar para que se genere el código binario de la aplicación con la biblioteca DLL más actualizada posible. Puede comprobar que la referencia se ha insertado de dos maneras: ■ Utilizar el Diseñador de proyectos y seleccionar la ficha Referencias que aparece en el lado izquierdo, como se puede ver en la Figura 7-2. ■ Utilizar el botón Mostrar todos los archivos del Explorador de soluciones y expandir el nodo Referencias.
Figura 7-2 Diseñador de proyectos: ficha Referencias con la referencia MyLibrary
Capítulo 7: Reparar los bloques rotos
X1165138BDY.indb 111
111
21/12/05 11:37:31
Con cualquiera de estos métodos, verá la referencia a MyLibrary. Una vez agregada la referencia, la aplicación puede crear instancias de los nuevos tipos generados en la DLL y usarlos adecuadamente. El proceso de generación (compilador y vinculador) ahora aceptará el uso de esos nuevos tipos, pero para que Visual Studio tenga esos tipos disponibles mediante IntelliSense® y para que el compilador esté al corriente de la existencia de esos nuevos tipos, se requiere un paso más. Puede que ya haya visto la primera línea de código del archivo TestApplication.vb. Esta línea dice Imports MyLibrary. Fundamentalmente, lo que la instrucción Imports hace es importar espacios de nombres o elementos de programación, como nuevos tipos que están definidos en proyectos y ensamblados a los que se hace referencia. Agregando esta línea de código, está indicando a Visual Studio que busque en ese ensamblado los metadatos que permitirán a IntelliSense rellenarse con los elementos públicos y protegidos. Después de agregar esta línea, tendrá acceso a esos elementos siempre que tenga una instancia de uno de los tipos integrados en la biblioteca.
Puntos de interrupción, variables locales, Editar y continuar y visualizadores No hay mejor forma de sumergirse en este asunto que observando y estudiando el código. Si el archivo de código fuente TestApplication.vb no está ya abierto, ábralo haciendo clic con el botón secundario del mouse en el archivo TestApplication.vb y seleccionando Ver código. Debe ver unos puntos rojos en la parte izquierda de la pantalla: son puntos de interrupción. La Figura 7-3 muestra el código fuente y los puntos de interrupción. SUGERENCIA Si los puntos de interrupción no aparecen, puede agregarlos haciendo clic en el margen izquierdo.
Figura 7-3 Código fuente y puntos de interrupción del formulario de Windows TestApplication
112
X1165138BDY.indb 112
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:32
Cuando el depurador encuentra un punto de interrupción, detiene la ejecución de la aplicación. En este código fuente, el punto de interrupción se encuentra a la llamada a MessageBox.Show(myString). En el archivo Library.vb hay otro punto de interrupción, en la primera línea de código del método Divide. En el procedimiento siguiente, ejecutará el código y llevará a cabo una sesión de depuración. Para depurar una aplicación puede realizar una de las dos acciones siguientes: ■ Presionar F5 o el botón Iniciar depuración. El programa comenzará a ejecutarse normalmente. Si hay algún punto de interrupción en el código fuente, la ejecución se detendrá en él. De lo contrario, el programa continuará ejecutándose hasta que se produzca una excepción no controlada o un error. ■ También tiene la alternativa de depurar la aplicación recorriendo el código línea a línea. Para ello, presione F8 o el botón Paso a paso por instrucciones. Por el momento, iremos al primer punto de interrupción y ejecutaremos el código del programa de ejemplo usando la primera técnica.
PARA COMENZAR LA DEPURACIÓN DE UNA APLICACIÓN 1 Presione F5 o el botón Iniciar depuración. Verá un botón que dice Try Me! Haga clic en él. El código debe detener la ejecución en el primer
2 punto de interrupción del método Divide y debe ver lo que se muestra en la Figura 7-4. La línea
resaltada en amarillo significa que es la siguiente instrucción que se ejecutará.
Figura 7-4 Ejecución detenida en el primer punto de interrupción del método Divide
Capítulo 7: Reparar los bloques rotos
X1165138BDY.indb 113
113
21/12/05 11:37:34
Ahora está en el modo de depuración y tiene acceso a una amplia variedad de herramientas y elementos de datos para la aplicación que le ayudarán a comprender lo que ocurre cuando se ejecuta la aplicación. Puede ver el contenido de variables locales, parámetros, mensajes de excepción, la ventana de consola y muchos otros elementos que irá descubriendo en los pasos siguientes. Toda esa información es útil cuando una aplicación no funciona como debería hacerlo y está intentando comprender el motivo. Con toda la información que proporciona el depurador, puede intentar descubrir dónde reside el problema y ver por qué hay un error. También puede usar el depurador con fines de aprendizaje, tal y como lo está haciendo ahora. El depurador es un magnífico profesor al principio de usar una tecnología, construcción de lenguaje o cuando simplemente está intentando comprender cómo funciona un elemento nuevo. También es frecuente usar el depurador para comprender el código creado por otra persona. Resulta de especial utilidad cuando es necesario realizar modificaciones en el código existente. Ahora observará la primera serie de elementos de datos ofrecida por el depurador mientras recorre el código instrucción a instrucción. En la parte inferior de la pantalla de Visual Studio puede ver una serie de fichas, entre las que se incluyen Variables locales, Inspección, Ventana Inmediato, Resultados, y Lista de errores. Si no ve estas fichas, puede abrir estas ventanas seleccionándolas en los menús Ver y Depurar. La mayoría de ellas no están visibles en el modo de edición. Ya vimos en el Capítulo 3 que la Lista de errores sólo se usa para mostrar los resultados de la compilación en tiempo real. Mientras realiza la depuración, la ficha Variables locales suele aparecer en primer término y muestra las variables y la información del objeto actuales. Observe la Figura 7-5 para ver las fichas de la sesión de depuración. Figura 7-5 Las fichas presentes durante la depuración en Visual Studio
114
X1165138BDY.indb 114
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:35
En la sección de la ficha Variables locales, puede ver cuatro elementos de datos del método Divide: Me, Divide, numberOne y numberTwo. Estos son, por orden, la instancia del objeto actual, el valor devuelto por la función llamada Divide y los dos parámetros. El depurador detecta todos los elementos del ámbito de ese método y los muestra en la ficha Variables locales. Los elementos del ámbito son todos los elementos que están visibles desde donde se encuentra el puntero de instrucciones. En este caso podrían ser las variables locales o las variables compartidas. Esto significa que, a lo largo de la ejecución del método Divide, podrá seguir los valores que tendrán todos esos elementos. Ahora es su turno para probarlo por sí mismo.
PARA CONTINUAR CON LA DEPURACIÓN DE LA APLICACIÓN Presione F8 o haga clic en el botón Paso a paso por instrucciones. Presione F8 de nuevo para llegar
1 a la operación de división.
Mientras realiza la depuración, siempre puede colocar el puntero del mouse sobre los elementos del programa para obtener la información que, de otra manera, encontraría en la ficha Variables locales. Por ejemplo, si coloca el puntero del mouse sobre el elemento numberOne, verá el mismo valor que aparece en la ficha Variables locales, como se puede ver en la Figura 7-6. Figura 7-6 Obtener el valor de la variable local numberOne de dos maneras distintas
Ejecute la siguiente línea de código usando uno de los métodos mencionados anteriormente
2 presionando F8 o haciendo clic en el botón Paso a paso por instrucciones.
Capítulo 7: Reparar los bloques rotos
X1165138BDY.indb 115
115
21/12/05 11:37:37
Veamos lo que está ocurriendo desde el punto de vista del compilador. En la ficha Variables locales, el elemento Divide (el valor devuelto de esa función) contiene el resultado de dividir 5 entre 3, que será 1. ¿Por qué muestra el depurador que es 2? Acaba de encontrar un error. (Nota: he insertado este error para demostrar cómo pequeños errores pueden provocar problemas más graves.) Si coloca el puntero del mouse sobre el operador /, verá la palabra doble. Presione F1 y busque el operador / en la Ayuda. Encontrará que el resultado depende de los tipos de los dos operandos usados en la operación. En este caso, el operador / utiliza dos enteros. Cuando se usa el operador / con dos enteros, el resultado es un valor doble. El resultado es el cociente completo más el resto, o sea, 2. En la misma ubicación de la Ayuda, verá que la división de enteros que se supone que debe utilizar esta función es en realidad el operador \. En este punto, normalmente debería hacer clic en el botón Detener depuración, pero hay una nueva característica de Visual Basic 2005 que le permite modificar el código y comprobar inmediatamente si el cambio realizado soluciona el problema. Esta característica se llama Editar y continuar. Como su propio nombre implica, la característica Editar y continuar le permite editar un elemento de la aplicación y continuar la ejecución. De hecho, no sólo puede hacer esto, sino también modificar la siguiente instrucción que ejecutar, cambiar el valor de una variable y volver a ejecutar la instrucción. En algunos casos, de esta manera se ahorra una gran cantidad de tiempo porque no hace falta detener la ejecución, realizar el cambio, generar de nuevo y volver a ejecutar el nuevo código. Los cambios se pueden ver directamente. Vaya a la parte izquierda, donde la flecha amarilla indica la siguiente instrucción que se va a ejecutar.
1 Cuando coloque el puntero del mouse sobre la flecha amarilla, debe aparecer una flecha transparente
que le indica dónde puede situar la flecha. Haga clic en la flecha amarilla, mantenga presionado el botón del mouse, y deslícelo hacia arriba, de vuelta a la instrucción de división. N OTA Hay varias limitaciones para las modificaciones de Editar y continuar que puede realizar. Para ver una lista completa, efectúe una búsqueda en el sistema de Ayuda con los siguientes criterios de búsqueda: Editar y continuar [Visual Basic] y luego busque las dos secciones no admitidas que explican lo que no se puede hacer.
Cambie el operador / al operador \ y vuelva a ejecutar la instrucción presionando F8 o haciendo clic
2 en el botón Paso a paso por instrucciones.
Mire en la ficha Variables locales y verá que el elemento Divide ahora tiene el valor 1, que es correcto.
3 Acaba de corregir su primer error real; ya es mejor desarrollador.
Recorra el código paso a paso hasta que vea un cuadro de mensajes donde aparezca 1 para la
4 primera división. Si no ve el cuadro de mensajes, quizás tenga que cambiar al mismo en la barra de
tareas de Windows. Haga clic en Aceptar en el cuadro de mensajes. Siga recorriendo el código paso a paso hasta que vuelva al método Divide con un nuevo conjunto de valores y esté apuntando a la primera instrucción del método.
Cuando vuelva al método Divide, no volverá a ejecutar todas las instrucciones porque sabe que el método ahora se debe ejecutar correctamente. En su lugar, saldrá del código usando la función Paso a paso para salir. Esto no significa que omitirá la ejecución; salir simplemente significa que el depurador ejecutará todas las instrucciones del método actual y volverá al punto de llamada. Si lo hace en una única instrucción, simplemente se ejecutará ésta. Para ver en acción esta característica, siga estos pasos: 116
X1165138BDY.indb 116
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:38
PARA SALIR PASO A PASO DEL CÓDIGO En el archivo Library.vb, haga clic en el punto rojo del primer punto de interrupción del método
1 Divide. Al hacer clic en el punto rojo, en realidad está quitando el punto de interrupción. Ahora debe
haber desaparecido el punto de interrupción.
2 Para deshabilitar el segundo punto de interrupción, puede usar tres métodos distintos. ■ El primero consiste simplemente en hacer clic con el botón secundario del mouse en la línea de código que tiene el punto de interrupción, seleccionar la opción de menú Punto de interrupción. . . y, por último, seleccionar la opción Eliminar punto de interrupción. Fíjese en la Figura 7-7 para ver esta opción en acción. ■ El segundo método consiste en seleccionar el menú Depurar y luego elegir Alternar puntos de interrupción o presionar F9. ■ El tercer método consiste en hacer clic con el botón secundario del mouse en el punto rojo que indica dónde está el punto de interrupción y seleccionar la única opción disponible: Eliminar punto de interrupción. Figura 7-7 Eliminar un punto de interrupción de un menú contextual en el editor de código
Debería estar en la primera línea de código del método Divide. Ahora que está en el método Divide,
3 puede presionar Ctrl+Mayús+F8 para salir paso a paso del método Divide o presionar el botón Paso a
paso para salir. Esta acción ejecutará todas las instrucciones de ese método para volver al punto de llamada.
4 Presione F5 para ejecutar todos los métodos hasta el siguiente punto de interrupción. Debe ver otro cuadro de mensajes con el resultado 1. Haga clic en Aceptar; se debe detener en el código fuente del método ReadFile.
MÁS INFORMACIÓN El bloque Using garantiza que va a desechar los recursos que está usando cuando salga del bloque delimitado por la instrucción End Using. Puede obtener más información sobre este aspecto realizando una búsqueda en el sistema de Ayuda usando como palabra clave la instrucción Using en el cuadro de texto Buscar.
El método ReadToEnd lee el contenido del archivo abierto y lo coloca en una variable de cadena.
5 Presione Ctrl+Mayús+F8 y después F8. Un cuadro de mensajes debe mostrar el contenido de la
variable de cadena. Haga clic en Aceptar en el cuadro de mensajes. Ahora debería haber vuelto al punto de llamada. Capítulo 7: Reparar los bloques rotos
X1165138BDY.indb 117
117
21/12/05 11:37:40
Recorra paso a paso el código hasta que aparezca la cadena Helloworld en un cuadro de mensajes.
6 Preste atención al orden de ejecución y examine las variables y el contenido de cada una de las
secciones de las fichas.
7 Vuelva a recorrer paso a paso el código para entrar en el método ManipulateStrings. MÁS INFORMACIÓN Como puede ver en el código fuente, uno de los argumentos de ManipulateStrings, myString, se pasa con la palabra clave ByRef. Cuando tenga un argumento que se pasa a un método por referencia, el método llamado recibe una referencia a la misma ubicación de memoria que utilizó el llamador. Por tanto, si el método modifica el contenido de ese argumento, está modificando el contenido de esta ubicación de memoria y, por tanto, está modificando la variable del llamador. En este caso, todo lo que se haga en el argumento myString modificará el valor de la variable del código que realiza la llamada. El otro argumento es myPosition y se pasa mediante la palabra clave ByVal. Cuando tenga un argumento que se pasa por valor, el método recibe del código que realiza la llamada una copia de la variable y por tanto no puede modificar el valor original del llamador. Por tanto, el contenido se perderá cuando termine el método y el flujo de ejecución vuelva al llamador.
La primera instrucción del método ManipulateStrings toma la cadena recibida en un argumento y la convierte en una matriz de caracteres. El motivo de hacer esto es que las cadenas son inmutables en .NET y, por tanto, debe trabajar con ellas en modo de sólo lectura una vez que se han creado. Los métodos que modifican una cadena en realidad devuelven un nuevo objeto de cadena que contiene la modificación que se le ha aplicado. Por tanto, si desea modificar una cadena carácter a carácter o si desea tener acceso a un carácter determinado de una cadena usando un índice, primero debe convertir la cadena en una matriz de caracteres.
PARA COMENZAR A SALIR PASO A PASO DEL MÉTODO MANIPULATESTRINGS Presione Ctrl+Mayús+F8 para salir del método ManipulateStrings o bien haga clic en el botón Paso
1 a paso para salir.
La aplicación se detiene repentinamente. Lo que acaba de ocurrir es una excepción no controlada. Este tipo de excepciones se producen cuando aparece un error y la aplicación no lo anticipa ni lo controla explícitamente. En ese caso, la ejecución de la aplicación se detiene porque no hay ninguna manera para que la aplicación pueda continuar en ese estado sin sufrir posibles daños en la memoria ni abrir puntos vulnerables de seguridad. Uno de los principios del tiempo de ejecución de .NET (CLR) es asegurarse de que no se produce ninguna de estas situaciones. Por consiguiente, CLR termina de forma anormal para impedir que la aplicación continúe ejecutándose en un estado desconocido. Incluso a pesar de que CLR toma 118
X1165138BDY.indb 118
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:41
esas precauciones y es menos probable que en .NET se ejecute código no seguro, sigue siendo posible. Para ayudarle a encontrar el error que provocó la excepción no controlada, Visual Studio incluye otra herramienta útil: el Ayudante de excepciones. Este asistente reemplaza el anterior cuadro de diálogo Excepción y es útil porque, en función del contexto de la excepción, proporciona más información que antes, como por ejemplo: el tipo de excepción, sugerencias para la solución de problemas y acciones correctivas que pueden aplicarse mediante el Asistente de excepciones. Observe la Figura 7-8 para ver la apariencia que presenta para la excepción actual. Cuando examine el nombre de la excepción, las sugerencias de solución de problemas y los visualizadores de datos, debe resultar evidente el motivo que provocó la excepción no controlada. El nombre de la excepción ya es por sí solo descriptivo: IndexOutOfRangeException. La primera sugerencia de solución de problemas le pide que se asegure de que el índice máximo de una lista es inferior al tamaño de la lista. En .NET las matrices están basadas en 0; esto significa que el primer elemento comienza con el índice 0. La longitud de la cadena recibida como argumento es 10, como se aprecia en la Figura 7-8. La intención de este método es modificar el último carácter de la cadena cuando la posición en la matriz es igual a una posición pasada al método por un valor. En este caso concreto, la posición pasada por valor al método es 1. Por tanto, en el “bucle for” del segundo carácter de esa cadena, la instrucción “if” devolverá true y luego el índice i obtendrá el valor de la longitud de la cadena. Esto significa que i ahora es igual a 10. Cuando la aplicación intenta modificar el carácter situado en el índice 10, se generará una excepción porque el índice 10 está fuera del intervalo de la matriz. La matriz tiene 10 caracteres con índices comprendidos entre 0 y 9. La Figura 7-9 utiliza un nuevo visualizador para examinar el contenido de la matriz de caracteres. Capítulo 7: Reparar los bloques rotos
X1165138BDY.indb 119
Figura 7-8 Ayudante de excepciones
Figura 7-9 Visualizador de matrices
119
21/12/05 11:37:43
Cuando coloque el mouse sobre los elementos del programa, a veces verá una lupa. Si hace clic en la lista desplegable, verá una lista de visualizadores que muestran la información de manera que tenga sentido para el tipo de datos que esté examinando. Por ejemplo, si está trabajando con contenido de Lenguaje de marcado extensible (XML) o de Lenguaje de marcado de hipertexto (HTML), el visualizador de XML o HTML le permitirá ver el contenido como si estuviera utilizando Microsoft Internet Explorer o cualquier otra herramienta para XML/HTML. Pronto utilizará uno de los visualizadores cuando depure el método ReadFile.
PARA CORREGIR EL PROBLEMA DE SUPERACIÓN DEL INTERVALO PRECAUCIÓN Si en cualquier momento utiliza la característica Editar y continuar y ve que los datos tienen una apariencia extraña o parecen estar dañados, detenga el proceso de depuración e inícielo de nuevo.
Modifique el método ManipulateStrings. Reste 1 de la longitud de la cadena cuando asigne un nuevo
1 valor a i. La línea de código debe tener esta apariencia después de modificarla: i = myString.Length – 1
Después de modificar esta línea de código, lleve el siguiente puntero de ejecución hasta la instrucción
2 “For” de manera que el índice i comience en 0. Recorra el código paso a paso o salga de él. Esta vez
no debería producirse ninguna excepción. Siga recorriendo paso a paso el código; ahora debe ver otro mensaje: Helloworld. La cadena se ha modificado porque se pasó por referencia.
Continúe avanzando paso a paso por el código y pronto encontrará una segunda excepción, que es un error de tipo División por cero. Por supuesto, se produce una excepción porque el método Divide asigna 0 al denominador cuando el numerador es superior a 5. Usando un visualizador puede ver que el numerador es 6, por lo que se asignará el valor 0 al denominador. De nuevo, la primera sugerencia de solución de problemas que aparece le sugiere que se asegure de que el denominador no es 0. Para resolver el problema, podría agregar una instrucción “If”; pero antes de hacerlo, piense si no será conveniente usar otro principio de .NET. Una práctica recomendable en .NET es usar el mecanismo de excepciones para interceptar esos casos en lugar de escribir código para instrucciones de condiciones especiales que usarían demasiado código. Las excepciones son parte integral de .NET Framework y están en todos sitios. Veamos la lógica que hay detrás de esta decisión.
120
X1165138BDY.indb 120
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:45
En una aplicación real, la aplicación no asignaría a propósito el 0 al denominador; por consiguiente, la mayoría de las divisiones producirían resultados correctos. Agregar una instrucción “If” produciría una instrucción condicional que se ejecutaría en todas y cada una de las divisiones. Y puesto que la mayor parte de las divisiones serían válidas, automáticamente ralentizaría el funcionamiento de la aplicación. Usar un mecanismo de control de excepciones para interceptar esos casos poco frecuentes es una solución mucho mejor porque el código de control de excepciones se ejecutará sólo cuando sea necesario, por lo que la aplicación será más rápida. Cuando inserte código de control de excepciones en la aplicación, es aconsejable interceptar siempre las excepciones partiendo desde las más precisas hasta las más genéricas. En ese caso, sabe que DivisionByZeroExcepcion es una de las que más probablemente se producirán, por tanto, es la primera que deseará interceptar. Cuando se intercepta una excepción, se dice que esa excepción está “controlada”. Después debe hacer algo al respecto; puede controlarla mencionándosela al usuario o bien devolverla. En este caso, desea que el usuario sepa que se ha producido una excepción, pero no desea que se bloquee el programa. El siguiente es un ejemplo que explica esta forma de control que estoy seguro que conoce. Si intenta realizar una división por cero en Microsoft Office Excel®, Excel no se bloqueará; simplemente indicará que los datos escritos producen una división por cero y muestra el mensaje #DIV/0! en la celda. En el pasado, la forma de controlarlas consistía en hacer que el método devolviera un entero que indicara si la operación se había realizado correctamente o con error. Y ahí es donde se encontraban los problemas porque entre dos aplicaciones, y a veces entre dos funciones, el mismo código de entero significaba dos cosas distintas. Se recibía un entero que se suponía que indicaba por qué se produjo el error en la aplicación, pero el código originario tenía dos significados y era una pesadilla intentar averiguar cuál era el código de error válido. Además, cuando se utilizaban códigos de error, el código era bastante deficiente, porque solían tener un modificador case o una serie de estructuras if anidadas. En .NET nunca debe diseñar los métodos para que devuelvan un entero que indique que la operación ha sido correcta o se ha producido un error, ni debe usar un valor booleano para el mismo fin. Ésta era una práctica equivocada que se usaba cuando no existían las excepciones o cuando la gente no las conocía o no las usaba correctamente. Nunca debe hacerlo. En su lugar, utilice excepciones.
Capítulo 7: Reparar los bloques rotos
X1165138BDY.indb 121
121
21/12/05 11:37:46
PARA AGREGAR CÓDIGO QUE CONTROLE DISTINTAS EXCEPCIONES Haga clic en el botón Detener depuración o presione Ctrl+Alt+Inter para detener el modo de
1 depuración. En TestApplication.vb, modifique el método btn_Click para que sea similar al siguiente: Dim myObjectLibrary as New Library() Dim myString As String = “Helloworld” Dim myFile As String = “” Try MessageBox.Show(myObjectLibrary.Divide(5, 3).ToString()) MessageBox.Show(myObjectLibrary.Divide(3, 3).ToString()) MessageBox.Show(myObjectLibrary.Divide(6, 4).ToString()) Catch ex As DivideByZeroException MessageBox.Show(ex.ToString()) End Try Try myFile = “MyExistingTextFile.txt” MessageBox.Show(myObjectLibrary.ReadFile(myFile)) myFile = “MyNotExistingTextFile.txt” MessageBox.Show(myObjectLibrary.ReadFile(myFile)) Catch ex As FileNotFoundException MessageBox.Show(myFile + “ doesn’t exist!”) End Try myObjectLibrary.ManipulateStrings(myString, 20) MessageBox.Show(myString) myObjectLibrary.ManipulateStrings(myString, 1) MessageBox.Show(myString)
Quite todos los puntos de interrupción de TestApplication.vb y Library.vb, y ejecute el código. Observe
2 los distintos cuadros de mensajes. Si se produce una excepción DivideByZeroException o
FileNotFoundException, aparecerá un cuadro de mensajes.
122
X1165138BDY.indb 122
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:48
Hay algunas fichas útiles que no utilizó en esta sesión de depuración. Por ejemplo, la ficha Inspección es importante porque puede escribir las variables y expresiones que desea seguir y supervisar durante la ejecución de la aplicación. Otra ficha útil es la ventana Inmediato, en la que puede escribir cualquier cosa y ¡el compilador la comprueba, la compila y la ejecuta sobre la marcha! Cualquier efecto ejercido en la aplicación en modo de depuración es inmediato. En la ventana Inmediato se puede incluir cualquier fragmento de código que pueda evaluar el compilador y no requiera un bloque de código. Por ejemplo, podría escribir un bucle. También tiene acceso completo a IntelliSense en esta ventana, igual que si se encontrara en el editor de código. Examinemos otro ejemplo simple.
PARA USAR LA VENTANA INMEDIATO Coloque un punto de interrupción en la primera instrucción de la aplicación y ejecute la aplicación
1 presionando F5.
Si no ve la ventana Inmediato, seleccione el menú Depurar y elija Ventanas e Inmediato. En la parte
2 inferior de la pantalla debe aparecer una ventana Inmediato vacía. 3 Escriba la línea siguiente y presione Entrar: i = 5
4 Escriba ahora esta línea y presione Entrar: if i > 2 then MessageBox.Show(i) El cuadro de mensajes que aparece debe mostrar un 5. Puede probar el código en tiempo real durante la ejecución sin ejecutar una sola línea de código de la aplicación. Pero tenga cuidado si usa variables contenidas en la aplicación; recuerde que si las modifica en la ventana Inmediato también las modificará para la aplicación.
5 Haga clic en el botón Detener depuración para detener la ejecución de la aplicación. Ahora no sólo tiene la posibilidad de generar nuevas aplicaciones, pero está al tanto de las técnicas y herramientas disponibles para depurarlas.
Capítulo 7: Reparar los bloques rotos
X1165138BDY.indb 123
123
21/12/05 11:37:49
En resumen... En este capítulo ha aprendido a usar puntos de interrupción, ha conocido distintas técnicas para ejecutar paso a paso por instrucciones, paso a paso por procedimientos y ejecutar paso a paso para salir del código fuente, así como visualizadores de datos que puede usar para ver los datos de la manera más adecuada dependiendo de su contenido o del contexto. También ha aprendido cómo trabajar con un archivo DLL. También ha visto que puede usar la característica Editar y continuar para modificar variables en tiempo de ejecución y continuar con la ejecución. Ha visto cómo puede pasar al siguiente puntero de instrucción para volver a ejecutar algunas líneas de código. Además, comenzó a tratar excepciones y aprendió lo que se debe hacer y lo que no se debe hacer mientras se depura. Ha visto cómo se pueden producir errores sutiles (normalmente debidos a distracciones y algunas veces simplemente porque no posee todo el conocimiento y la experiencia), pero eso está bien. No se preocupe; está en un proceso que se llama aprendizaje. En el capítulo siguiente trataremos las bases de datos, ADO.NET y la manipulación de datos hacia y desde una base de datos de Microsoft SQL Server™ Express. También aprenderá a usar esta información para rellenar controles de un formulario de Windows. Y verá cómo crear una aplicación para agregar, modificar, eliminar y visualizar filas en la aplicación de control de vehículos.
124
X1165138BDY.indb 124
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:37:50
Capítulo 8 Administrar los datos
8 ¿Qué es una base de datos?, 126
SQL Server 2005 Express en Visual Basic 2005 Express, 134 ¿Qué son ADO.NET y el enlace de datos?, 146
X1165138BDY.indb 125
Hasta ahora, hemos visto cómo generar una aplicación de formularios Windows Forms y las características que contenían esas aplicaciones, pero no ha administrado gran cantidad de datos. La administración de datos siempre es importante, ya sea en casa, en la oficina, en el colegio o incluso para el ocio. Por ejemplo, tengo muchas recetas e ideas para excelentes cenas, pero cuando deseo preparar una buena comida, tardo tanto tiempo en encontrarlas que normalmente no lo hago. Si tuviera esta información en mi equipo, sería fácil tener acceso rápidamente a mi receta de “pierna de cordero con crujiente de verduras” y preparar una fabulosa comida. También podría agregar otra información pertinente al archivo de la receta, como por ejemplo los acompañamientos que se sirven con ese plato o qué vinos van bien con esa receta. Incluso podría agregar una fotografía de la comida ya preparada. Podría administrar datos usando un programa de procesamiento de textos, como Microsoft Word, pero podría llegar a ser inmanejable tan pronto como recopilara muchas recetas y necesitara buscar información dentro de ese archivo. Usar una hoja de cálculo, como por ejemplo de Microsoft Excel, también resulta problemático. El hecho es que intentar buscar información rápidamente usando más de una variable es prácticamente imposible. Siguiendo el ejemplo de la receta, suponga que desea recuperar todas las recetas que sean al menos para seis comensales y que tengan carne estofada de cordero pero no hojas de menta en los ingredientes, porque uno de sus invitados es alérgico a la menta. Imagine el tiempo que tardaría en buscar esa información en un archivo de Word o una hoja de cálculo de Excel. Ahí es donde vienen al rescate las bases de datos. 125
21/12/05 11:37:51
En este capítulo veremos qué es una base de datos; cómo crearla; cómo agregar, eliminar y actualizar datos; cómo realizar búsquedas o consultas en una base de datos; y cómo usar una base de datos en una aplicación de formularios Windows Forms. Visual Basic 2005 Express va acompañado de SQL Server 2005 Express, que es una versión plenamente utilizable de su hermana mayor, SQL Server 2005, pero con menos características. SQL Server 2005 Express es gratuito, fácil de usar y está diseñado para generar aplicaciones sencillas y dinámicas.
¿Qué es una base de datos? Una base de datos es una colección de información almacenada en archivos guardados en discos que sigue una estructura sistemática. Esta estructura sistemática permite a los usuarios consultar los datos usando software de administración denominada sistema de administración de bases de datos (DBMS). SQL Server 2005 es un sistema de administración de bases de datos relacionales (RDBMS). Está basado en un modelo relacional porque sus datos están estructurados mediante conjuntos (la teoría matemática de los conjuntos) y relaciones lógicas (predicados). La mayoría de los productos comerciales de bases de datos se fundamentan en el modelo relacional. De hecho, ha sido uno de los modelos más usados durante los últimos 20 años. Aparte de Microsoft SQL Server, puede que haya oído hablar de los siguientes nombres de productos: Oracle o IBM DB2.
¿Qué hay dentro de una base de datos? N OTA Más adelante en este capítulo se explican algunos de los demás elementos contenidos en las bases de datos relacionales.
Una base de datos relacional, como las de SQL Server 2005, contiene varias tablas relacionadas entre sí. Una base de datos también puede contener vistas, procedimientos almacenados, funciones, índices, información de seguridad y otros elementos. En esta sección conocerá el elemento básico de las bases de datos relacionales, que está formado por una tabla y sus componentes. Las tablas contienen columnas y filas. Las columnas definen los tipos de datos, mientras que las filas contienen los datos propiamente dichos. Puesto que el modelo relacional posee unas reglas estrictas, un sistema RDBMS que utilice el modelo de relación debe implementarlas. MÁS INFORMACIÓN En realidad, ningún RDBMS implementa completamente el modelo relacional puro tal y como se creó en la década de los 70.
126
X1165138BDY.indb 126
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:01
Normalización de datos e integridad de los datos Las reglas que definen el modelo relacional se denominan reglas de normalización. La normalización es el proceso que deben aplicar los arquitectos de datos durante la fase de diseño. Estas reglas de normalización se usan para reducir la posibilidad de tener los mismos datos almacenados en más de una tabla; dicho de otra forma, su objetivo es reducir el nivel de redundancia y, además, proteger la integridad de los datos contenidos en la base de datos. Lógicamente, el proceso de normalización existe para ayudar a dividir los datos en su propia tabla de forma que la información no se duplique en más de una tabla. Por ejemplo, no es conveniente tener una aplicación en la que los datos de dirección, ciudad, provincia o estado, código postal y país estén duplicados en dos tablas distintas. Sólo debería haber un vínculo entre la tabla de clientes y la otra tabla que hace referencia a información adicional de clientes. La existencia de datos duplicados dificultaría las actualizaciones y las eliminaciones, y plantearía el riesgo de tener datos modificados en una tabla pero no en la otra. Este ejemplo ilustra un problema de integridad de los datos. Veamos otro problema de integridad de los datos. Imagine que tiene una tabla de productos y otra tabla que contiene información sobre pedidos de los clientes. Aunque los datos estén normalizados, no existe integridad de los datos (en este ejemplo). Ahora supongamos que decide eliminar product1, lo que significa quitar una fila de la tabla de productos que corresponde a product1. Si el RDBMS le dejara hacerlo, significaría que, repentinamente, todas las filas de la tabla de detalles de los pedidos de los clientes que contenía este producto no podrían mostrar qué producto se solicitó porque dicho producto ya no existiría. Estas filas quedarían huérfanas, lo que podría causar desastrosos resultados para la compañía. Como puede ver, la integridad de los datos es un concepto muy importante que está relacionado con la precisión, la validez y la corrección de los datos. Para comprender mejor algunos de estos conceptos, veamos otro ejemplo. Imagine que es el propietario de una tienda en línea y desea gestionar su compañía usando una aplicación de software. Para usar una aplicación de software, debe comenzar por plantearse la utilización de una base de datos. Cualquier compañía, ya sea grande o pequeña, normalmente tiene una gran cantidad de datos que almacenar. Además, puesto que todos estamos rodeados de datos, los usuarios desean más acceso a estos datos con el fin de crear informes y realizar análisis. Por este motivo son tan útiles las bases de datos. Capítulo 8: Administrar los datos
X1165138BDY.indb 127
N OTA Las tablas siguientes se han mantenido simples a propósito (faltan algunas columnas) y se utilizan para ilustrar los conceptos que acabamos de tratar.
127
21/12/05 11:38:02
Volviendo a la tienda en línea, como mínimo deseará almacenar información sobre los clientes, productos, facturas, compras e inventario de existencias. Para resumir todos esas áreas, examinemos las tablas Product, OrderHeader y OrderDetail.
Tabla 8-1 Tabla Product
Tabla 8-2 Tabla OrderHeader
128
X1165138BDY.indb 128
Nombre de columna
Tipo de datos
¿Permitir valores nulos?
ProductID (CP)
integer
Not Null
ProductNumber
nvarchar(10)
Not Null
Name
nvarchar(50)
Not Null
Description
nvarchar(200)
Null
Photo
image
Null
Price
money
Not Null
Taxable
bit
Not Null
Nombre de columna
Tipo de datos
¿Permitir valores nulos?
OrderID (CP)
integer
Not Null
OrderDate
datetime
Not Null
DueDate
datetime
Not Null
CustomerID (CE)
integer
Not Null
TaxAmount
money
Not Null
Total
money
Not Null
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:04
Nombre de columna
Tipo de datos
¿Permitir valores nulos?
OrderID (CP) (CE)
integer
Not Null
LineDetailID (CP)
integer
Not Null
ProductID (CE)
integer
Not Null
Quantity
integer
Not Null
LineTotal
numeric(38,6)
Not Null
Tabla 8-3 Tabla OrderDetail
Sus tablas Product, OrderHeader y OrderDetail también podrían representarse gráficamente, como se ilustra en la Figura 8-1. Ésta es una manera sencilla de ver las bases de datos.
Figura 8-1 Diagrama parcial de base de datos para una pequeña compañía de venta en línea
Capítulo 8: Administrar los datos
X1165138BDY.indb 129
129
21/12/05 11:38:05
¿Qué son los valores nulos? Una de sus primeras observaciones es que hay una columna en las tablas denominada ¿Permitir valores nulos?, que también está reflejada en la Figura 8-1. Al diseñar una tabla debe determinar lo que es absolutamente necesario (No nulos) y lo que no lo es (Nulos). Por ejemplo, cuando inserte una nueva fila en la tabla Product, puede que no sea relevante que haya una fotografía del producto, pero podría ser un problema tener un producto sin número de producto. Ahora expliquemos cómo se relaciona la posibilidad de tener valores nulos con la integridad de los datos. Siempre que se diseña una tabla con una columna que no permite la existencia de valores nulos, el RDBMS rechazará cualquier inserción de una nueva fila que tenga una columna establecida en un valor nulo cuando no deba ser así. Cuando preste atención a esas columnas que no pueden contener valores nulos al diseñar las tablas, automáticamente agregará otra capa de integridad de datos asegurándose de que están presentes todos los datos necesarios antes de que se inserte el registro en la base de datos.
¿Qué son las claves principales y las claves externas? En la Figura 8-1 puede ver que algunas columnas tienen las letras (CP) para las claves principales de las tablas o una clave amarilla para las claves principales. Algunas otras columnas también contienen la indicación (CE) para indicar que se trata de una clave externa. Empecemos por explicar lo que es la clave principal.
Clave principal
Una clave principal es un valor utilizado para identificar de manera única una fila específica de una tabla. Una clave principal: ■ Puede estar compuesta de uno o varios nombres de columna: cuando se compone de más de una columna, se denomina clave compuesta. ■ Suele ser un campo numérico. ■ Normalmente la genera el RDBMS, en cuyo caso se denomina clave suplente. Con frecuencia, una clave suplente es (pero no siempre) un número secuencial. En SQL Server 2005 una clave suplente también se denomina una identidad. Las identidades comienzan por un número establecido, llamado inicialización de identidad y se va incrementando en otro número establecido, denominado incremento de identidad. Por ejemplo, si crea una tabla llamada Product, puede tener una columna con el nombre ProductID que está 130
X1165138BDY.indb 130
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:06
establecida como una identidad y es posible establecer la inicialización de identidad en 1 con un incremento de identidad de 1. Cuando se crea la primera fila en la tabla Product, el RDBMS generará el valor de ProductID y lo establecerá en 1. La fila siguiente tendrá un ProductID establecido en 2 y así sucesivamente. ■ Debe ser lo más corta posible, pero lo bastante larga para admitir el número de filas que representará. ■ Es inmutable, en el sentido de que nunca debe cambiar su valor. ■ También es una clave natural cuando la clave tiene una relación lógica con el resto de las columnas de la tabla. Por ejemplo, si tiene una tabla de libros, se podría usar el número ISBN como clave principal porque identifica exclusivamente un único libro. Este hecho sería una ventaja en comparación con una clave generada porque ocuparía menos espacio y, de todas formas, debe incluirse. ■ También se utiliza para relacionar dos tablas entre sí. En nuestro ejemplo de la tabla Product, la columna ProductID es la clave principal. En tiempo de diseño, también será una identidad. En principio, puede afirmar que el número de producto podría ser una clave principal y puede que tenga razón, pero en ciertos escenarios un número de producto podría usarse dos veces. Por ejemplo, imagine que tiene el producto número FG-001 con una revisión 1.0. Con el paso del tiempo, realiza cambios en el producto para responder a quejas de los clientes y le asigna el número de revisión 2.0. Desea que sus clientes continúen solicitando el mismo número de producto por muchas razones empresariales. En la base de datos, retiraría la revisión 1.0 del producto cambiando quizás una columna denominada Active y luego agregaría otra fila a la tabla con los nuevos detalles del producto, incluido el número de revisión 2.0, y lo establecería en Active. ¿Por qué no pueden usar la misma fila? Supongamos que seis meses después de crear la nueva revisión del producto, desea crear un gráfico para saber si los cambios realizados en el producto conllevaron menos devoluciones de los clientes. Sería difícil devolver datos fiables si sólo tuviera una fila para el producto, pero bastante fácil si tuviera dos filas, porque serían únicas en la base de datos, cada una de ellas con un valor de ProductID distinto. La tabla OrderDetail, posee una clave principal compuesta que es una combinación de OrderID y OrderDetailID. Esto significa que estas dos columnas garantizarían la exclusividad de cada una de las filas de la tabla OrderDetail. En la tabla OrderHeader, OrderID es la clave principal. Capítulo 8: Administrar los datos
X1165138BDY.indb 131
131
21/12/05 11:38:07
Clave externa
Una clave externa es una columna de una tabla que está relacionada con una columna de otra tabla. También permite crear relaciones entre las tablas. Una clave externa de una tabla siempre es una clave principal en otra tabla. Las claves externas se utilizan para forzar la integridad de los datos al formar parte de las restricciones de claves externas. Las restricciones de claves externas se crean para garantizar la protección de la integridad referencial y que no se produzcan infracciones de la misma. En los detalles de los pedidos hay dos claves externas. La primera es la clave externa ProductID de la tabla OrderDetail y está relacionada con la clave principal llamada ProductID de la tabla Product. La segunda es la clave externa OrderID de la tabla OrderDetail y está relacionada con la clave principal llamada OrderID de la tabla OrderHeader. En lo relativo a la nomenclatura de las claves externas, es una práctica recomendada definirlas usando el mismo nombre de sus claves principales análogas; de lo contrario, podría ser problemático para quienes examinen el modelo de datos lógico. Al principio de este capítulo realicé una introducción a la integridad de los datos. Al hacerlo, cité un ejemplo que podría causar problemas parecidos al del ejemplo de las tablas Product y OrderDetail. Agregando una restricción de clave externa entre estas dos tablas se impediría a los usuarios eliminar un producto de la tabla Product, lo que podría crear una gran cantidad de filas huérfanas en la tabla OrderDetail. Si se fija en la Figura 8-1, la restricción de clave externa entre las tablas Product y OrderDetail se representa como una línea que une ambas tablas y que se puede ver si se mira el nombre FK_Product_OrderDetail. Asignar nombres a las restricciones es una manera sencilla de entender para qué sirven. En nuestro ejemplo sólo tenemos tres tablas, pero es fácil imaginar que las restricciones sin nombre entre varias tablas pronto serían poco claras. Aquí encontramos otra restricción de clave externa, que es la que existe entre las tablas OrderHeader y OrderDetail, y que impediría que se eliminara un pedido antes de que se hubieran eliminado todos sus registros de OrderDetail coincidentes. En la Figura 81 puede ver que la tabla OrderHeader tiene otra clave externa denominada CustomerID. Por consiguiente, habría otra restricción de clave externa entre las tablas Customer y OrderHeader. Siguiendo los mismos principios que los de las demás restricciones de clave externa, se impediría que se eliminara un cliente de la tabla Customer antes de que se eliminaran todos los pedidos coincidentes en la tabla OrderHeader y todas las filas de detalle de pedidos de la tabla OrderDetail correspondientes a dichos pedidos. 132
X1165138BDY.indb 132
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:09
Si no hubiera ninguna restricción de clave externa en esta base de datos, sería fácil infringir la integridad de los datos. La base de datos tendría un gran problema: una bomba de relojería de filas huérfanas que ocupan espacio y ralentizan todas las consultas. Agregando esta restricción de clave externa, el RDBMS garantizaría que todas las filas de la tabla OrderDetail que hacen referencia a este producto se han eliminado antes de poder eliminar la fila del producto de la tabla Product.
¿Cómo se interacciona con una base de datos relacional? Hasta el momento, hemos hablado de tablas en las que se puede actualizar, agregar o eliminar filas, o realizar consultas en la base de datos para obtener resultados concretos. Quizás se haya estado preguntando lo siguiente: ¿cómo se interacciona con la base de datos? ¿Cómo se devuelven las respuestas a mis consultas? ¿Y cómo se crean esas tablas? Estoy seguro de que también se ha estado planteando muchas otras preguntas. La respuesta a todas ellas es SQL Server 2005 Express. SQL significa Structured Query Language (lenguaje de consulta estructurado) y se inventó en la década de 1970. El acrónimo se pronuncia SEQUEL en inglés y también se inició con la misma grafía, pero a causa de un conflicto de marcas comerciales en el Reino Unido en los años setenta, el nombre se abrevió al acrónimo SQL ya muy conocido. En ese momento, el acrónimo SEQUEL significaba Structured English Query Language (lenguaje de consulta estructurado en inglés). SQL es un lenguaje basado en el inglés que es muy similar a las preguntas realizadas en lenguaje humano. Por eso es tan fácil y tan rápido aprender programación básica en SQL. Veamos dos ejemplos: 1. SELECT * FROM CUSTOMER 2. SELECT COUNT(*) FROM PRODUCT El primer ejemplo puede traducirse en inglés como devolver todas (*) las filas de la tabla Customer o devolver la lista de clientes. El segundo ejemplo se puede traducir como una solicitud para que se devuelva el total de todas las filas contenidas en la tabla Product o para que se cuente el total de productos de la compañía. Cuando se envía una consulta SQL a una base de datos relacional, la base de datos devuelve un conjunto de resultados que simplemente contiene las filas que contienen las respuestas a la consulta. Mediante SQL también se pueden agrupar o sumar los resultados Capítulo 8: Administrar los datos
X1165138BDY.indb 133
133
21/12/05 11:38:10
de una consulta. SQL también se usa para crear tablas o eliminar (quitar) tablas. Ya conoce las claves principales, claves externas y las restricciones, pero probablemente no sabía que también se crean mediante SQL. También es conveniente saber que SQL es un estándar ANSI/ISO; por lo tanto, cualquier proveedor de RDBMS debe obedecer un conjunto de reglas. El SQL básico es un lenguaje de programación de nivel básico y, como tal, normalmente no es suficiente para solucionar todos los posibles problemas o necesidades de análisis que puede tener una aplicación. Tiene un conjunto de palabras clave bastante limitado. Dado que el objetivo principal es consultar los datos de una base de datos, los RDBMS más conocidos en el mercado tienen extensiones agregadas a SQL para permitir la adición de código de procedimientos. Estas adiciones convierten SQL en un lenguaje de programación completo que ayuda a solucionar problemas más complejos. La siguiente es una lista de extensiones frecuentes y sus fabricantes: Microsoft Transact-SQL (abreviado como T-SQL), Oracle PL/SQL e IBM SQL PL. Recientemente, además de estas extensiones, los fabricantes de RDBMS han agregado la compatibilidad con otros lenguajes de programación. Microsoft ha agregado la compatibilidad con el lenguaje .NET a las bases de datos de todas las versiones de SQL Server 2005, mientras que Oracle e IBM han agregado compatibilidad con Java. Hay más conceptos y teorías de las bases de datos que las aquí enumeradas y explicadas, pero nos hemos centrado en las necesidades inmediatas de bases de datos de este libro. Ahora aplicará esos conceptos de manera concreta en una aplicación de formularios Windows Forms que utilizará una base de datos de SQL Server Express 2005.
SQL Server 2005 Express en Visual Basic 2005 Express En esta sección, desarrollará una aplicación de formularios Windows Forms. Será una aplicación de control de vehículos que permitirá al usuario controlar los precios de vehículos a lo largo del tiempo y saber dónde se obtuvieron las listas de precios. Primero usará Visual Studio para crear la base de datos y las tablas, luego agregará algunos datos y validará algunos conceptos aprendidos en la primera parte de este capítulo. Después creará una aplicación para Windows que usará sus datos y generará una aplicación basada en datos que permitirá a los usuarios almacenar cualquier cantidad de datos. Consulte la Figura 8-2 para ver el diagrama de base de datos relativo al ejemplo de esta sección. 134
X1165138BDY.indb 134
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:12
Figura 8-2 Diagrama de base de datos de la aplicación Car tracker
MÁS INFORMACIÓN
Crear una base de datos con Visual Basic 2005 Express Antes de usar los datos, necesitaremos un lugar donde almacenarlos. Aprenderá a crear una base de datos en Visual Basic 2005 Express. También experimentará lo fácil que es crear todas las tablas precisas para hacer frente a las necesidades de nuestra aplicación de control de vehículos porque el equipo de SQL Server hizo un gran trabajo de integración de las herramientas en Visual Studio.
PARA CREAR UNA BASE DE DATOS CON VISUAL BASIC 2005 EXPRESS 1 Inicie Visual Basic 2005 Express. Cree una nueva aplicación para Windows y
2 asígnele el nombre CarTracker.
Ahora creará la base de datos que contendrá
3 todas las tablas de la aplicación. En el
Explorador de soluciones, haga clic con el botón secundario del mouse (ratón) en el proyecto CarTracker, seleccione Agregar y seleccione después Nuevo elemento.
Capítulo 8: Administrar los datos
X1165138BDY.indb 135
En el cuadro de diálogo Agregar nuevo
4 elemento, seleccione Base de datos SQL en
las Plantillas instaladas de Visual Studio. Escriba el nombre de archivo CarTracker.mdf y haga clic en el botón Agregar. Al hacerlo, creará una base de datos y conectará el archivo de base de datos (CarTracker.mdf) al proyecto CarTracker. Aparecerá el Asistente para la configuración 5 de orígenes de datos. No preste atención todavía a este cuadro de diálogo: pronto obtendrá información sobre el mismo. Por el momento, limítese a hacer clic en Cancelar.
SQL Server está bien integrado porque Visual Studio proporciona un excelente kit de desarrollo (SDK) para conectar otros componentes al entorno IDE.
MÁS INFORMACIÓN La extensión .mdf la utiliza la familia de productos SQL Server. El archivo .mdf contiene toda la base de datos; esto significa que todas las tablas y los demás elementos que pueden estar incluidos en la base de datos se encuentran en ese archivo. Lo único que no forma parte del archivo .mdf es la información de registro, que se guarda en un archivo .ldf. Este archivo se crea cuando se crea la base de datos. Tiene la extensión .ldf y se utiliza para almacenar la información de registro de la base de datos. Puede verlo si hace clic en el icono Mostrar todos los archivos del Explorador de soluciones.
135
21/12/05 11:38:13
El Explorador de soluciones debe contener ahora un nuevo elemento en el proyecto: el nuevo archivo
6 de base de datos denominado CarTracker.mdf, como se muestra en la figura 8-3.
Ahora comenzará a agregar tablas a la base de datos. Para ello, puede hacer doble clic en el archivo
7 CarTracker.mdf o hacer clic con el botón secundario del mouse en CarTracker.mdf y seleccionar
Abrir. Esto hará que Visual Studio se conecte con la instancia de SQL Server 2005 Express instalada en el equipo.
Figura 8-3 Explorador de soluciones con el archivo de base de datos CarTracker. mdf recién creado
En la parte izquierda de la pantalla, donde normalmente se abre el cuadro de herramientas, debe aparecer el Explorador de base de datos, como se puede ver en la figura 8-4. Si no ve el Explorador de base de datos, vaya al menú Ver y seleccione Explorador de base de datos. Bajo el nombre de la base de datos, debería ver una lista de elementos de base de datos representada por iconos de carpeta. Aunque no reconocerá la mayoría de ellos, verá dos elementos que ya le resultarán familiares: el diagrama de base de datos y las tablas. Pronto utilizará estos elementos. Sabrá que tiene conexión con la base de datos cuando vea el icono de base de datos con una especie de cable eléctrico. Cuando no tenga conexión, el icono de base de datos aparecerá con una X de color rojo. Sin embargo, ver una X roja no significa necesariamente que no tenga conexión. Podría haber desconectado antes, pero no se ha actualizado el Explorador de bases de datos. Para comprobar el estado de la conexión a la base de datos, debería hacer clic en el botón Actualizar de la barra de herramientas Explorador de bases de datos.
Figura 8-4 Explorador de bases de datos con la base de datos CarTracker conectada
Haga clic con el botón secundario del mouse en la base
8 de datos CarTracker.mdf en el Explorador de base de
datos y seleccione Cerrar conexión. A continuación debería ver la X roja junto al nombre de la base de datos. Ahora se ha producido la desconexión. Para volver a conectar, puede realizar tres acciones diferentes. Puede hacer doble clic en el nombre de la base de datos (por ejemplo, CarTracker. mdf) en el Explorador de base de datos, puede hacer clic en el botón Actualizar o bien puede hacer clic con el botón secundario del mouse en el nombre de archivo en el Explorador de base de datos y seleccionar Modificar conexión. . . . Si selecciona la opción de Modificar conexión, verá un cuadro de diálogo como el representado en la figura 8-5. Figura 8-5 El cuadro de diálogo Modificar conexión le permitirá volver a conectar con la base de datos CarTracker
136
X1165138BDY.indb 136
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:15
Ya que es aconsejable probar la conexión, puede hacer clic en el botón Probar conexión y se
9 comprobará la conexión especificada en ese momento. Además, se comprueba que SQL Server 2005
Express está preparado y puede recibir conexiones de las aplicaciones.
10 Haga clic en Aceptar para volver a conectar con la base de datos.
Crear tablas en la base de datos
N OTA Actualmente, sólo tiene una base de datos en los proyectos, pero no es infrecuente que sea necesario conectar con dos o más bases de datos y obtener información de ellas. Ése es el motivo de que aparezca Conexiones de bases de datos como un árbol en el Explorador de bases de datos, ya que representa cada una de esas bases de datos como un nodo de ese árbol. Sólo hay un nodo en el árbol, que es la base de datos CarTracker.
Ahora creará todas las tablas y relaciones necesarias para la aplicación CarTracker. Usando la información contenida en la figura 8-2 creará tablas, claves principales, identidades y relaciones de claves externas en la base de datos CarTracker, y todo ello sin salir de Visual Studio.
PARA CREAR TABLAS EN UNA BASE DE DATOS Comencemos por la tabla Color. En el Explorador de bases de datos, haga clic con el botón
1 secundario del mouse en el icono de carpeta de la tabla y seleccione Agregar nueva tabla. También
debería ver una cuadrícula vacía en la superficie del diseñador, que se denomina Diseñador de tablas. También verá que ha aparecido una nueva barra de herramientas denominada la barra de herramientas Diseñador de tablas. Esta barra incluye todas las herramientas necesarias para ayudarle a crear una tabla sin escribir una sola consulta SQL.
Ahora agregará una columna a la tabla Color. Escriba ColorID en el campo Nombre de columna del
2 Diseñador de tablas. Seleccione int como Tipo de datos y desactive la casilla de verificación Permitir
valores nulos, ya que esta columna será la clave principal de esta tabla. Una clave principal no puede ser nula porque forma parte de la exclusividad de una fila en la tabla.
Una cosa a la que debería prestar atención en este cuadro de diálogo es el Nombre de archivo de base de datos. Puesto que no ha guardado ningún archivo, todo sigue ubicado todavía en una carpeta temporal identificada por el contenido del cuadro de texto. Tan pronto como guarde todos los archivos del proyecto, la base de datos se guardará junto con los demás archivos de proyecto, en la misma ubicación en que se encuentren. Más tarde puede comprobar esa ubicación si va al menú Herramientas, selecciona Opciones. . . y examina el nodo Proyectos y soluciones del árbol. En el panel derecho de este cuadro de diálogo puede determinar dónde se almacenan los proyectos fijándose en el primer cuadro de texto, denominado Ubicación del proyecto de Visual Studio.
Antes de agregar la segunda columna a la tabla Color, establecerá esta columna como clave principal.
3 Para ello, debe hacer clic en el icono Establecer clave principal de la barra de herramientas
Diseñador de tablas.
El diagrama de base de datos representado en la Figura 8-2 indica que también es necesario que esta columna sea una identidad; por lo tanto, deberá modificar esa propiedad en la ventana Propiedades de columna, que aparece justo debajo del Diseñador de tablas. Desplácese hacia abajo hasta que vea el grupo Especificación de identidad. Haga clic en el signo + situado a la izquierda de las palabras Especificación de identidad para expandir este grupo. Ahora haga clic en el campo (Is Identity) y establézcalo en Yes. Por ahora, deje Inicialización de identidad e Incremento de identidad establecidos en 1. Capítulo 8: Administrar los datos
X1165138BDY.indb 137
N OTA De este punto en adelante, por cada control de árbol y cada control que sea un grupo (es decir, que tenga un signo +), usaremos la palabra expanda en lugar de repetir la expresión haga clic en el signo +.
137
21/12/05 11:38:17
N OTA Como recordatorio, cuando una columna es una identidad, SQL Server genera automáticamente un nuevo número cada vez que se crea una fila en una tabla. Empieza por el valor indicado por la propiedad Inicialización de propiedad y se va aumentando en las cantidades indicadas por el valor de la propiedad Incremento de identidad.
Para agregar otra columna, haga clic en la fila bajo el nombre de columna ColorID. Agregue las dos
4 columnas restantes según el diagrama mostrado en la figura 8-2. Puede establecer el tamaño de la
columna nvarchar ColorName en 30 escribiéndolo en el campo Tipo de datos. Una vez realizada esta operación, la tabla debe tener una apariencia como la mostrada en la figura 8-6.
Figura 8-6 Diseñador de tablas con todas las columnas de la tabla Color
Ahora que ha terminado el diseño, debe agregar la tabla a la base de datos. Para ello, es necesario guar-
5 dar la tabla. Haga clic en el icono Guardar o presione Ctrl+S. Cuando aparezca el cuadro de diálogo
N OTA En el Diseñador de tablas, el pequeño triángulo negro indica cuál es la fila actual.
Elegir nombre, como se muestra en la figura 8-7, asigne a la tabla el nombre Color y haga clic en Aceptar. Figura 8-7 Cuadro de diálogo Elegir nombre mostrando el nombre de la tabla Color
Expanda la carpeta Tablas en el Explorador de bases de datos para ver la lista de tablas existentes en
6 la base de datos; debería aparecer la nueva tabla Color. Cuando expanda la tabla Color para ver su
lista de columnas, deben aparecer las tres columnas que acaba de crear, como se puede observar en la Figura 8-8. Figura 8-8 Explorador de bases de datos con la carpeta Tables y la tabla Color expandidas
SUGERENCIA Siempre que haga clic en un nombre de columna en el Explorador de base de datos, verá sus propiedades enumeradas en la ventana Propiedades. Ésta es la misma ventana Propiedades que ha estado usando con una pequeña diferencia: se trata de una vista de sólo lectura y, por tanto, no le permite modificar la información.
138
X1165138BDY.indb 138
7 Cierre la tabla Color en el Diseñador de tablas haciendo clic en la X situada cerca del Explorador de soluciones. Haga clic en el icono Guardar todo de la barra de herramientas para guardar el proyecto en el disco.
8 Asegúrese de que el nombre del proyecto es CarTracker y haga clic en el botón Guardar.
Antes de crear otras tablas, lea este paso en su totalidad. Ahora que cuenta con los conocimientos
9 para crear una tabla, cree todas las tablas restantes (ColorType, Make y Listing) usando las mismas
técnicas que acaba de aprender. Asegúrese de que todas las tablas y todas sus columnas se vuelven a crear exactamente de la misma manera que en las tablas representadas en la figura 8-2. No se preocupe de establecer las relaciones, ya que las creará en los ejercicios siguientes. Después de crear cada tabla, guarde inmediatamente la nueva tabla y asegúrese de que aparece en el Explorador de bases de datos. A continuación, cierre la tabla en la superficie del diseñador como se indicaba anteriormente en el paso 7 de esta sección. Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:19
Crear relaciones entre las tablas Ya ha creado las tablas, pero no tienen ninguna relación entre sí. Ahora agregará esas relaciones y se asegurará de que la base de datos tiene integridad de datos para evitar la aparición de filas huérfanas. Igual que ocurre con muchos otros elementos de Visual Basic 2005 Express, hay más de una forma de crear esas relaciones. Una es más visual que la otra y empezará a usar este enfoque más visual para mantener la fidelidad con la idea principal del libro, que es la productividad. Para poder crear las relaciones de forma visual, hay un requisito previo que agregar al proyecto: un diagrama de base de datos. Puede que no tenga exactamente la misma apariencia que la de la Figura 8-2, pero será parecida.
PARA CREAR RELACIONES ENTRE TABLAS Vaya al Explorador de base de datos y haga clic con el botón secundario del mouse en el nodo
1 Diagramas de base de datos situado encima del nodo Tablas. Seleccione Agregar nuevo diagrama.
Aparecerá un cuadro de diálogo que indica que SQL Server 2005 Express no tiene todos los objetos de base de datos necesarios para crear diagramas de bases de datos.
Haga clic en Sí para que SQL Server cree los componentes que necesita para obtener un diagrama
2 de base de datos. Cuando haya terminado de crearlos, se le preguntará qué tablas desea agregar al
diagrama en el cuadro de diálogo Agregar tabla.
Seleccione todas las tablas que ha creado y haga clic en Agregar. El diagrama debería aparecer en
3 menos de un minuto. Haga clic en el botón Cerrar para indicar a Visual Studio que ya tiene todas las
tablas necesarias.
Haga clic en el botón Guardar todo o presione Ctrl+Mayús+S. Se le pedirá que guarde su diagrama
4 y elija un nombre. Asigne al diagrama el nombre CarTrackerDiagram.
Si no ve el diagrama de base de datos, primero vaya al nodo Diagramas de base de datos, expándalo
5 y, a continuación, abra el diagrama haciendo doble clic en él. Debe ver la superficie del diseñador con
SUGERENCIA Dependiendo de la resolución de pantalla, la vista podría quedar muy apretada. Si desea ver una parte mayor del diagrama, puede que sea necesario liberar o cerrar algunas ventanas, como el Explorador de soluciones o la ventana Propiedades; puede devolver estos elementos a la pantalla abriendo el menú Ver y seleccionando Explorador de soluciones o la ventana Propiedades. También puede cambiar el valor de zoom modificando el valor indicado en la lista desplegable Zoom.
todas sus tablas.
Capítulo 8: Administrar los datos
X1165138BDY.indb 139
139
21/12/05 11:38:21
Centrémonos en una relación que debemos crear. Observando la Figura 8-2, verá que la columna ColorID está presente en la tabla Listing porque hay una relación con la tabla Color. La línea que une ambas tablas es una relación de clave externa (FK en inglés). Es necesario que esta relación esté establecida o, de lo contrario, en la tabla Listing habrá nodos huérfanos siempre que se elimine una fila de la tabla Color. Esto significa que debe establecer una relación entre la tabla que tiene la clave principal y la que contiene la clave externa. En este caso, significa que debe crear una relación desde la tabla Color hacia la tabla Listing. En el diagrama de base de datos, haga clic en ColorID en la tabla Color, donde aparece la pequeña
6 llave amarilla.
Observe la Figura 8-9 para ver cómo debería quedar todo después de realizar esta manipulación.
7 Mantenga presionado el botón principal del mouse y arrastre ColorID hasta la tabla Listing; mientras
Figura 8-9 Crear la relación de clave externa entre las tablas CarType y Car
arrastra debe aparecer una línea de unión. Alinee el cursor del mouse para que quede sobre la columna con la que desea crear la relación; en su caso, sobre el campo ColorID de la tabla Listing. Cuando vea aparecer un pequeño signo +, suéltelo.
Si seleccionó y soltó correctamente el botón del mouse cuando estaba sobre
8 el campo ColorID de la tabla Color, debe ver un cuadro de diálogo Tablas y
columnas que le pide que confirme la creación de la relación de clave externa (CE, o FK en inglés). Es importante que en ambas tablas ColorID sea el nombre de columna que aparece para vincular ambas tablas de ese cuadro de diálogo. Si las tablas de la clave primaria y la clave externa son correctas y los nombres de las columnas son también correctos, haga clic en el botón Aceptar. Entonces debería aparecer el cuadro de diálogo Relaciones de clave externa,
9 como se puede ver en la Figura 8-10.
Figura 8-10 Cuadro de diálogo Relaciones de clave externa para las tablas Listing y Color
140
X1165138BDY.indb 140
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:22
10 Aunque puede cambiar algunas propiedades en este cuadro de diálogo, por el momento,
simplemente haga clic en Aceptar. Consulte la Figura 8-11 para ver el diagrama con la nueva relación creada. Figura 8-11 Diagrama modificado que muestra la nueva relación de clave externa entre las tablas Listing y Color
Lo primero en que debe fijarse en el diagrama es en el símbolo de infinito que aparece junto a la tabla Listing y en la llave amarilla situada junto a la tabla Color. El símbolo de infinito de la tabla Listing indica la cardinalidad de la tabla. Indica que, en esta relación, la tabla Car puede contener muchas filas con información procedente de la tabla de la clave principal correspondiente. La llave amarilla indica de qué tabla procede la clave principal. He reorganizado el diagrama para que las tablas estén más cercanas entre sí. Puede reorganizar las tablas como mejor le parezca arrastrándolas desde su barra de título (es decir, donde aparece el nombre de la tabla). A veces es necesario hacerlo para crear relaciones de modo que no termine teniendo un diagrama con una apariencia inusual. Sugiero que coloque la tabla Listing en medio de las otras tablas porque así será más fácil crear relaciones. También puede reorganizar en cualquier momento las tablas del diagrama haciendo clic con el botón secundario del mouse en cualquier lugar, salvo en una tabla de la superficie del diseñador del diagrama, y seleccionando Organizar tablas. También puede hacer que aparezcan en el diagrama las etiquetas para las relaciones establecidas haciendo clic con el botón secundario del mouse en la superficie del diseñador del diagrama y seleccionando Mostrar etiquetas de relación, como se puede ver en la figura 8-12.
Capítulo 8: Administrar los datos
X1165138BDY.indb 141
MÁS INFORMACIÓN Para reforzar el concepto del establecimiento de relaciones entre tablas, en este ejercicio usaremos otra forma de considerar esa relación. Hay dos motivos por los que la columna ColorID aparece en la tabla Listing como una clave externa. El primero de ellos es que se utiliza para un principio de normalización y diseño porque no desea tener datos duplicados. El segundo motivo es que se utiliza para mantener la integridad de los datos y, más específicamente, para evitar el problema de las filas huérfanas. Veamos el problema con algunos datos de ejemplo. Supongamos que hay una fila de Color llamada Dark Blue y que la tabla Listing contiene seis definiciones de anuncio distintas que tienen el valor Dark Blue. Si quita el color Dark Blue de la tabla Color, significaría que esos seis anuncios tendrían datos huérfanos. Por eso creó una relación de clave externa: para asegurarse de que si una aplicación o un usuario intenta quitar datos de la tabla Color, un proceso de SQL Server 2005 impediría la operación validando que no quedan “hijos” en la tabla Listing antes de permitir que se produzca la eliminación en la tabla Color.
141
21/12/05 11:38:24
Figura 8-12 Diagrama completado de la base de datos CarTracker
Ahora debe crear las otras relaciones de tipo FK (clave externa) usando la figura 8-2 o la tabla siguiente.
Tabla 8-4 Lista de relaciones de clave externa que crear
Columna
Tabla de clave principal
Tabla de clave externa
MakeID
Make
Listing
CarTypeID
CarType
Listing
MÁS INFORMACIÓN Siempre puede volver y revisar las propiedades de cualquier relación haciendo doble clic en la línea o haciendo clic con el botón secundario del mouse y seleccionando Propiedades en el menú contextual.
142
X1165138BDY.indb 142
Cuando haya terminado, el contenido del diagrama debería ser similar al mostrado en la Figura 8-12. Asegúrese de que las relaciones están bien organizadas fijándose en dónde están situados los símbolos de infinito y las llaves amarillas y, además, observando la tabla anterior como guía de comprobación.
11 Haga clic en el botón Guardar todo o presione Ctrl+Mayús+S para confirmar los cambios realizados en la base de datos. Haga clic en Sí cuando se le pregunte si desea guardar.
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:25
Escribir datos en tablas de SQL Server usando Visual Studio Ahora que ya que ha creado todas las tablas y relaciones, empezará a insertar datos en las tablas y a comprobar que las restricciones garantizan la integridad de la base de datos. Comencemos por agregar datos a todas las tablas. Primero agregará filas a la tabla Color.
PARA ESCRIBIR DATOS EN TABLAS DE SQL SERVER USANDO VISUAL STUDIO Para empezar a incluir filas en la tabla Color, haga clic con el botón secundario del mouse en la tabla
1 Color en el Explorador de bases de datos y seleccione Mostrar datos de tabla. La superficie del
diseñador debería tener una cuadrícula como la que aparece en la Figura 8-13.
Mientras escribe los datos, fíjese en la parte izquierda de la cuadrícula de datos de la tabla y verá un pequeño triángulo negro
, un icono de
lápiz
y un asterisco y
un pequeño triángulo negro o bien un asterisco
. El lápiz indica que va a hacer modificaciones en la fila. El asterisco indica que es una nueva fila y el pequeño triángulo negro señala la fila actual.
Figura 8-13 Tabla Color vacía en la cuadrícula de datos de tabla
Agreguemos ahora el primer color. Haga clic en el campo Color Name, escriba Dark Blue y presione
2 la tecla Tab para ir a la columna siguiente. Escriba true en el campo Metallic. Puesto que ese tipo de
columna es de bit, sus valores sólo pueden ser verdaderos (true) o falsos (false) porque el tipo bit es binario. Cuando haya terminado, presione la tecla Tab para ir a la siguiente fila.
Capítulo 8: Administrar los datos
X1165138BDY.indb 143
143
21/12/05 11:38:26
Agregue tres colores más para los vehículos (Red, Silver y Black) y establezca Red como
3 metalizado (Metallic) y los otros dos colores como no metalizados (Non-metallic, es decir,
en el valor false). Una vez realizada esta operación, la tabla debe tener una apariencia como la de la figura 8-14.
4 Agregue los datos siguientes a las tablas Make y CarType. Figura 8-14 Tabla Color con cuatro nuevas filas de datos
No escriba los datos de todas las columnas creadas como una identidad porque SQL Server 2005 Express generará el campo automáticamente cuando se cree la fila en la tabla. Si intenta escribir datos en una columna de identidad, no se le permitirá hacerlo. Si se encuentra en una columna de identidad, se especifica que la celda es de sólo lectura cerca de la barra de exploración situada cerca de la parte inferior del Diseñador de tablas.
Tabla Make MakeName
Country
GoodRoadster
Germany
SmallCar
France
BigSUV
USA
ReliableCar
Japan
Tabla CarType CarTypeName
NumberOfDoors
Roadster
2
SUV
5
Hatchback
5
Sedan
4
Coupe
2
Puede que no se haya percatado de que, al asignar un tipo a los datos, en realidad agregaba a la base de datos características de comprobación de los datos. Pruebe a modificar una de las filas Color cambiando la columna Metallic para que diga Helloworld en lugar de true o de false. Obtendrá un mensaje de error que le informa de que el campo Metallic es de tipo booleano. Para mostrar cómo se protege la integridad de datos usando las restricciones de clave externa, agregará dos filas a Listing. Cuando utilice la aplicación de formularios Windows Forms incluirá más filas. Haga clic con el botón secundario del mouse en la tabla Listing, seleccione Mostrar datos de tabla
5 y agregue las dos filas siguientes. 144
X1165138BDY.indb 144
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:28
Tabla Listing ColorID
MakeID
CarTypeID
DateSeen
Year
Price
Cylinder
HP
URL
EPGCity
EPGHighway
Notes
1
1
1
08/11/2005
2005
42500
6
240
http://www. litwareinc.com/
20
28
This is my dream car, follow regularly.
4
3
2
07/30/2005
2003
39775
8
340
http://www. cpandl.com/
10
15
Too much gas
Ahora comprobará que una de las restricciones de clave externa funciona correctamente. Abra la
6 tabla Make haciendo clic con el botón secundario del mouse en la tabla Make y seleccionando
Mostrar datos de tabla.
Intentemos eliminar la primera fila haciendo clic en el campo situado más a la izquierda, donde suele
7 aparecer el lápiz. La fila debería quedar seleccionada y todos los campos en color azul. Haga clic con
el botón secundario del mouse y seleccione Eliminar.
8 En la pantalla debe aparecer un cuadro de diálogo que le pregunta si realmente desea eliminar la fila. Haga clic en Sí.
9 Debería recibir un mensaje de error en un cuadro de diálogo que dice que no se eliminó la fila a
causa de la restricción de clave externa, tal y como sigue: Mensaje de error: Instrucción DELETE en conflicto con la restricción REFERENCE “FK_Listing_Make”. Este mensaje afirma por qué se creó la restricción de clave externa, que era evitar la aparición de filas huérfanas. La Figura 8-15 ilustra la apariencia que presenta el cuadro de diálogo de error y el tipo de información que se le proporciona para ayudarle a depurar el problema, si es necesario. En este caso, no es un problema, sino ¡una característica que ha creado!
10
Haga clic en Aceptar para salir de este cuadro de diálogo.
MÁS INFORMACIÓN Puede desplazarse por la tabla utilizando los controles de exploración de la parte inferior de la cuadrícula. Estos controles le permitirán acciones como ir a la primera y a la última fila, ir a la entrada anterior o a la siguiente, ir a un registro nuevo o escribir directamente el número de fila.
Figura 8-15 Cuadro de diálogo de error que muestra la relación de clave externa que impide la eliminación de una fila de la tabla Make
11 Pruebe las demás restricciones
relacionadas con la tabla Listing intentando eliminar la primera fila de la tabla CarType. Debería recibir el mismo mensaje de error.
Capítulo 8: Administrar los datos
X1165138BDY.indb 145
145
21/12/05 11:38:29
Ahora que todas las tablas del dominio tienen datos cargados, aprenderá a usar la base de datos en una aplicación de Windows Forms. Obtendrá información sobre ADO.NET y sobre los enlaces de datos con controles de formularios Windows Forms.
¿Qué son ADO.NET y el enlace de datos? Si desea obtener más información sobre SQL y Transact-SQL, descargue la documentación de SQL Server 2005 Express. Encontrará esta información en el vínculo siguiente: http://go.microsoft. com/fwlink/?LinkId=51842. La documentación de SQL Server 2005 Express está diseñada para responder a la mayoría de las preguntas que puede tener, pero también podría consultar la documentación de SQL Server 2005. Puede descargarla desde http://go.microsoft.com/fwlink/ ?LinkId=51843.
146
X1165138BDY.indb 146
Pocas veces se verá obligado a escribir manualmente todos los datos usando Visual Studio. Normalmente dejará que lo haga el usuario o lo hará mediante una aplicación. También puede importar datos desde otro origen de datos o crear los nuevos datos usando secuencias de comandos de SQL, pero éste es un concepto más avanzado que no se trata en este libro. Esta sección está dedicada a cómo generar aplicaciones para Windows que pueden conectarse a datos y recibirlos de SQL Server 2005 Express usando ADO.NET. La siguiente es una definición formal oficial de ADO.NET tomada de la biblioteca en línea de MSDN: ADO.NET ofrece un acceso coherente a orígenes de datos, como Microsoft SQL Server, así como a orígenes de datos facilitados mediante OLE DB y XML. Las aplicaciones para usuarios que comparten datos pueden utilizar ADO.NET para conectar a estos orígenes de datos y recuperar, manipular y actualizar los datos. ADO.NET separa limpiamente el acceso a datos de la manipulación de datos y crea componentes discretos que se pueden usar por separado o conjuntamente. ADO.NET incluye proveedores de datos de .NET Framework para conectarse a una base de datos, ejecutar comandos y recuperar resultados. Esos resultados se procesan directamente o se colocan en un objeto DataSet de ADO.NET con el fin de exponerlos al usuario para un propósito específico, junto con datos de varios orígenes, o de utilizarlos de forma remota entre niveles. El objeto DataSet de ADO.NET también puede utilizarse independientemente de un proveedor de datos de .NET Framework para administrar datos que son locales de la aplicación o que proceden de un origen XML. Las clases de ADO.NET se encuentran en System.Data.dll y están integradas con las clases de XML incluidas en System.Xml.dll. Al compilar código que utilice el espacio de nombres System.Data, haga referencia tanto a System.Data.dll como a System.Xml.dll. He presentado la definición larga y formal de ADO.NET porque contiene elementos que conocerá mientras trabaja con la aplicación Car Tracker. También lo hice porque deseaba que pudiera hacer referencia a ella siempre cuando trabaje con ADO.NET. Ésta es una definición menos formal que creo que resume en qué consiste ADO.NET. Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:31
Se puede decir que ADO.NET es la manera de .NET Framework de obtener acceso y manipular mediante programación bases de datos o datos que utilizan orígenes de datos XML. ADO.NET 2.0 ofrece nuevas maneras de tener acceso a datos de distintos orígenes. En Visual Basic 2005 Express, están limitadas a los orígenes de datos siguientes: bases de datos (de SQL Server Express y Microsoft Access), servicios Web y objetos personalizados. Es mucho más fácil (es decir, se requiere menos código) manipular datos en ADO.NET 2.0, sobre todo al usar todas las herramientas incluidas en Visual Studio 2005. Hay muchos nuevos asistentes y otras herramientas que hacen que sea más agradable trabajar con bases de datos. Visual Studio 2005 abarca gran cantidad de escenarios comunes con sus herramientas y asistentes, pero también ofrece muchas posibilidades cuando se usa mediante programación sin usar las herramientas visuales. En este libro se tratan sus aspectos básicos, pero nada le impide obtener más información sobre los enlaces de datos y ADO.NET y sobre la creación de aplicaciones muy eficaces. Antes de continuar, estudiemos mejor la aplicación Car Tracker. El principal objetivo de la aplicación es realizar un seguimiento de los anuncios de vehículos publicados en Internet. Puesto que las bases de datos ya están listas, ahora debe plantearse qué se incluirá en esta aplicación. En realidad, lo que necesita es sencillamente una manera de mostrar los anuncios, agregar nuevos anuncios, modificar o eliminar anuncios existentes y buscar en los anuncios usando una serie de cuadros desplegables que le permitan acotar las búsquedas en función de determinados criterios. Estos criterios de búsqueda provendrán directamente de las tablas del dominio (es decir, controles desplegables independientes para el tipo de vehículo, color, modelo, etc.). Cuando use controles desplegables u otros controles con datos que sabe que existen en la base de datos, no tiene necesidad de rellenar los datos manualmente. Preferirá usar las capacidades de enlace de datos de los controles. El Enlace de datos es una manera fácil y transparente de leer o escribir datos y de vincular desde la aplicación un control de un formulario Windows Forms y un origen de datos. ADO.NET realiza una intensa actividad en segundo plano (que es incluso mayor en .NET Framework 2.0), además de administrar la conexión con la base de datos. La administración de la conexión no se detiene en la apertura ni en el cierre de la aplicación, sino que también se ocupa de buscar la base de datos con la que está intentando conectar. Cuando se abre una conexión, significa que la aplicación se puede comunicar con la base de datos mediante llamadas a métodos de ADO.NET. Todos los intercambios (envío o recepción) de datos entre la aplicación y la base de datos se administran automáticamente con ADO.NET. Los datos en sí también los administra ADO.NET mediante distintos mecanismos: exploración de sólo lectura hacia delante, exploración en cualquier dirección en modo de lectura o escritura, evaluación de campos, etc. Y lo mejor de todo es que normalmente no es necesario escribir una gran cantidad de código para disfrutar de esas características.
Capítulo 8: Administrar los datos
X1165138BDY.indb 147
Visual Basic Express le permite trabajar con bases de datos de Microsoft Access, pero trabajando con SQL Server 2005 Express obtendrá todas las ventajas de la calidad Enterprise de SQL Server 2005, con el único inconveniente de que ofrece un conjunto más reducido de características.
N OTA No todos los controles de Windows Forms están “preparados para el enlace de datos”. Si lo están, tienen una propiedad DataBindings.
147
21/12/05 11:38:33
Desarrollo de la aplicación Car Tracker N OTA La ventana Orígenes de datos podría aparecer en cualquier otro lugar del IDE. Puesto que el entorno IDE es totalmente adaptable a sus preferencias, puede personalizar las ventanas y fichas para que aparezcan donde crea que le resultarán más productivas.
Figura 8-16 La ventana Orígenes de datos
Ahora continuará con el desarrollo de la aplicación Car Tracker. En primer lugar, debe crear un conjunto de datos que le proporcionará todas las características de enlace de datos necesarias para la aplicación Car Tracker. Ahora que las tablas están establecidas, puede configurar el conjunto de datos con todos los elementos que acaba de agregar a la base de datos. Antes de crear un conjunto de datos, debe saber qué es un conjunto de datos. Se puede definir un conjunto de datos como una representación en memoria de una o más tablas y se usa para almacenar las filas almacenadas devueltas por la consulta enviada a la base de datos. Entonces puede agregar, eliminar o actualizar filas en memoria. Cuando haya terminado el usuario, puede enviar, guardar o confirmar los cambios en la base de datos. El archivo CarTrackerDataSet.xsd se denomina archivo de Definición de esquema XML. El archivo .xsd garantiza que los datos estarán estructurados y respetarán el esquema. Utilizaremos este archivo más adelante en el proyecto, cuando expliquemos el enlace de datos. Para crear un conjunto de datos aprenderá a utilizar la ventana Orígenes de datos. Esta ventana proporciona acceso a todos los orígenes de datos configurados en la aplicación. Consulte la figura 8-16 para ver dónde se encuentra la ventana Orígenes de datos. Si no ve la ventana Orígenes de datos, puede obtener acceso a ella haciendo clic en el menú Datos y seleccionando Mostrar orígenes de datos. Si Mostrar orígenes de datos no aparece en el menú Datos, asegúrese de que ha cerrado todas las cuadrículas de datos de la tabla CarTracker y de que Form1 es visible.
PARA CREAR UN CONJUNTO DE DATOS En la ventana Orígenes de datos, haga clic en el vínculo Agregar nuevo origen de datos o haga clic
1 en el botón Agregar nuevo origen de datos de la barra de herramientas. Aparecerá el Asistente
para la configuración de orígenes de datos.
La primera pantalla del Asistente para la configuración de orígenes de datos le permite elegir el tipo
2 de origen de datos que desea crear. Puede elegir una base de datos, un servicio Web o uno de sus
objetos. Acaba de crear una base de datos para la aplicación Car Tracker, por lo que la elegirá en Tipo de origen de datos. Seleccione Base de datos y, a continuación, haga clic en Siguiente. En la próxima pantalla elegirá la conexión de datos. CarTracker.mdf debe estar ya seleccionada. Cuando creó la base de datos de SQL Server Express CarTracker en el proyecto, se creó automáticamente una conexión de datos. Puede hacer clic en el signo más (+) de la parte inferior del cuadro de diálogo para ver la apariencia que tiene la cadena de conexión. Esta cadena de conexión define cómo se conecta la aplicación a la base de datos. 148
X1165138BDY.indb 148
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:35
3 Haga clic en Siguiente en la pantalla Elegir la conexión de datos. La pantalla siguiente del asistente le pregunta si desea guardar esta cadena de conexión en el archivo de configuración de la aplicación. Como vio en la pantalla anterior, sabe dónde está almacenada la base de datos. Pero puede cambiar de opinión e implementar el archivo en otra ubicación. Si lo hace, no deseará modificar el código fuente y volver a compilarlo. Incluir la cadena de conexión en el archivo de configuración de la aplicación es, en realidad, una práctica recomendada. Este procedimiento le ofrece la ventaja de sólo modificar la imagen y reiniciar la aplicación sin necesidad de recompilar, con el fin de captar automáticamente los cambios efectuados en la cadena de conexión y conectar con esa nueva ubicación. La configuración de la aplicación se guarda en un archivo XML cuyo nombre se forma con el nombre del archivo ejecutable de la aplicación al que se le agrega .config a continuación del mismo. En la aplicación, el archivo se llama CarTracker.exe.config, aunque sólo verá app.config mientras trabaja en Visual Studio. Si desea guardar la cadena de conexión, también se le pide que proporcione un nombre de variable que se guardará en el archivo. Asegúrese de que la casilla de verificación Sí, guardar la conexión como está activada y haga clic en
4 Siguiente.
En la pantalla siguiente seleccionará todas las tablas de la base de datos que se incluirán en el
5 conjunto de datos y asignará un nombre al conjunto de datos. En su caso necesitará todas las tablas,
por lo que debe expandir el nodo Tablas y seleccionar todas las tablas. Deje el Nombre del conjunto de datos establecido en CarTrackerDataSet y haga clic en Finalizar.
El resultado de la configuración del conjunto de datos es un archivo .xsd o un documento de esquema XML que definirá la estructura interna del conjunto de datos. Recuerde que un conjunto de datos es una representación en memoria de una o varias tablas de la base de datos. ADO.NET usará este archivo de esquema cuando trabaje con la aplicación. Mientras ejecuta la aplicación, el usuario podrá agregar, eliminar o modificar filas del conjunto de datos (en la memoria del equipo). Los cambios permanecerán en memoria hasta que el usuario confirme los cambios en la base de datos, que en este ejemplo es el archivo CarTracker.mdf.
Capítulo 8: Administrar los datos
X1165138BDY.indb 149
149
21/12/05 11:38:37
En el Explorador de soluciones, haga doble clic en el archivo .xsd denominado CarTrackerDataSet.xsd.
6 Como se puede ver en la Figura 8-17, el resultado de crear el conjunto de datos es parecido al diagrama
Figura 8-17 Representación gráfica del conjunto de datos CarTracker
de la base de datos creado anteriormente. Su diagrama podría ser distinto dependiendo de la resolución de la pantalla y de cómo personalizara el IDE.
Sin embargo, hay algunas diferencias notables. Verá las mismas columnas que ha creado en la base de datos física, pero en la parte inferior de cada una de ellas, verá métodos: Fill, GetData(). Estos métodos son específicos del conjunto de datos y el código de ADO.NET generado por Visual Studio los usará para enlazar los datos a controles de Windows Forms, ¡controles que no existen todavía! Vuelva a la ventana Orígenes de datos y expanda las tablas del conjunto de datos. Verá la
7 representación de las tablas en memoria y, además, que cada columna tiene un pequeño icono que
le indica de qué tipo es. Estos iconos le pueden resultar familiares porque son parecidos a los controles del cuadro de herramientas. Consulte la Figura 8-18 para obtener una visión rápida de las tablas del conjunto de datos Color y Listing y los tipos de sus columnas.
Figura 8-18 Vista de las tablas de los conjuntos de datos Color y Listing desde dentro de la ventana Orígenes de datos
150
X1165138BDY.indb 150
Cierre la representación gráfica del conjunto de datos haciendo clic en la X situada en la esquina de
8 la superficie del diseñador.
En el Explorador de soluciones, haga doble clic en el archivo Form1.vb para abrir la superficie del
9 diseñador para el formulario Form1.
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:38
10 En la ventana Orígenes de datos, seleccione el nodo Listing del conjunto de datos y haga clic en la
punta de la flecha de la lista desplegable que aparece junto a la palabra Listing. Se le ofrecerán dos opciones: DataGridView o Details. DataGridView coloca todos los campos del conjunto de datos en un formato de tabla o de cuadrícula con múltiples filas, mientras que Details presenta todos los campos del conjunto de datos de fila en fila, con todos los campos como controles individuales. Para este ejemplo, seleccione Details. También verá que cada uno de los miembros del conjunto de datos tiene la misma flecha de lista desplegable, que le permite cambiar qué controles se colocarán en el formulario cuando se arrastre la tabla. Al permitirle elegir los controles antes de arrastrar la tabla del conjunto de datos hasta el formulario se evita tener que diseñar la interfaz de usuario manualmente pieza a pieza.
11 Cambie los campos ColorID, MakeID y CarTypeID al tipo ComboBox haciendo clic en la flecha desplegable que aparece junto a cada columna y seleccionando ComboBox.
Figura 8-19 Formulario Car Tracker cambiado de tamaño después de mover todos los controles
12 Seleccione el nodo Listing haciendo clic en él, y arrástrelo y colóquelo en la superficie del diseñador del formulario Form1.
13 Modifique ahora el tamaño del formulario como lo hizo en capítulos anteriores,
cambiando la propiedad Size del formulario. Cambie el tamaño del formulario un tamaño de manera que su propiedad Width sea 450 píxeles y Height sea 550 píxeles.
14 Mueva todos los controles para que la primera etiqueta quede en la esquina
superior izquierda, justo debajo de la franja de herramientas. Consulte la Figura 8-19 para ver una aproximación de cómo deberían quedar colocados los controles. ADVERTENCIA Dependiendo de la resolución de la pantalla, puede que sea necesario desplazarse para ver todos los controles.
Capítulo 8: Administrar los datos
X1165138BDY.indb 151
151
21/12/05 11:38:39
I M P O R TA N T E Al trabajar con archivos de base de datos locales, es necesario tener en cuenta que se tratan igual que cualquier otro archivo de contenido. Para los proyectos de escritorio, esto significa que, de manera predeterminada, el archivo de base de datos se copiará en la carpeta de resultados (es decir, en la carpeta bin) cada vez que se genere el proyecto. Después de presionar F5, éste es la apariencia que presentaría en el disco: CarTracker\CarTracker.mdf CarTracker\Form1.vb CarTracker\Bin\Debug\CarTracker.mdf CarTracker\Bin\Debug\CarTracker.exe En tiempo de diseño, las herramientas de datos y los asistentes utilizan el archivo CarTracker\CarTracker.mdf. En tiempo de ejecución, la aplicación utilizará la base de datos situada en la carpeta bin\debug. Como resultado de la copia, muchas personas tienen la impresión de que la aplicación no guardó los datos en el archivo de base de datos. Esta suposición tiene lugar porque hay implicadas dos copias del archivo de datos. Esto también ocurre al examinar esquemas o datos mediante el Explorador de base de datos. Las herramientas usan la copia de la carpeta de proyecto y no el archivo situado en la carpeta bin\debug. A continuación se ofrecen algunas maneras de solventar este comportamiento de copia: 1. Si selecciona el archivo de base de datos en la ventana Explorador de soluciones, verá en la ventana Propiedades una propiedad denominada Copiar en el directorio de resultados. De forma predeterminada está establecida en el valor Copiar siempre, lo que significa que los archivos de datos del proyecto se copiarán en la carpeta bin\debug cada vez que se genere el proyecto, sobrescribiendo así los archivos de datos existentes, si los hay. Puede establecer esta propiedad en No copiar y colocar después manualmente una copia del archivo de datos en la carpeta bin\debug. De esta manera, al generar después, el sistema de proyectos dejará el archivo de base de datos en la carpeta bin\debug y no intentará sobrescribirlo con el del proyecto. El inconveniente de este método es que seguirá teniendo dos copias. Por lo tanto, después de modificar el archivo de base de datos utilizando la aplicación, si desea realizar esos mismos cambios dentro del proyecto, deberá copiar manualmente los cambios realizados en el proyecto y viceversa. 2. Puede dejar el archivo de datos fuera del proyecto y crear una conexión al mismo en el Explorador de bases de datos. Cuando el IDE le pregunte si desea traer el archivo al proyecto, simplemente conteste que no. De esta manera, tanto en tiempo de diseño como en tiempo de ejecución se utilizará el mismo archivo de datos. El inconveniente de este método es que la ruta de acceso de la cadena de conexión estará especificada en el código y, por tanto, será más difícil compartir el proyecto e implementar la aplicación. Antes de implementarla, asegúrese de reemplazar en la configuración la ruta de acceso completa con una ruta de acceso relativa. Si desea obtener más información sobre las diferencias entre las rutas de acceso relativas y completas (junto con alguna información adicional sobre este comportamiento de copia), lea el artículo siguiente: http://blogs.msdn.com/smartclientdata/ archive/2005/08/26/456886.aspx. Verá que he tomado fragmentos de ese artículo y las he modificado para adaptarlos a nuestra aplicación.
152
X1165138BDY.indb 152
Como puede ver, acaban de pasar muchas cosas. Empecemos por examinar la superficie del diseñador. Todos los campos del conjunto de datos se han agregado como controles, y también se agregaron etiquetas basadas en el nombre del campo del conjunto de datos. Esta característica se denomina título inteligente. Visual Studio utiliza Pascal o Camel como mecanismo para insertar un espacio en las etiquetas cuando se utilizan títulos inteligentes. Cuando coloque los campos del conjunto de datos en el formulario, el título inteligente examina el uso de las mayúsculas de cada campo. Cuando encuentra una letra en mayúsculas o un carácter de subrayado (es decir, _) después de una letra en minúscula, inserta un espacio o reemplaza el guión de subrayado con un espacio. En los campos EPGCity y EPGHighway se puede encontrar una excepción a esta regla. Cuando utilice letras en mayúsculas para, por ejemplo, los acrónimos, Visual Studio no puede distinguir que se trata de dos palabras y, por tanto, no las separa. Deberá separar estos dos campos manualmente. También observará que se ha agregado una franja de herramientas que contiene casi los mismos botones que usó mientras trabajaba con el diseñador de tablas de bases de datos.
15 Lea la barra lateral azul Importante de la izquierda. Teniendo en
cuenta este comportamiento de copia, le sugiero que utilice el Enfoque nº 1 a pesar de que deberá realizar algunos pasos manualmente. Si desea depurar la aplicación desde Visual Studio, es preferible usar esta solución o, de lo contrario, no podrá ver los cambios aplicados al archivo de base de datos. El archivo de base de datos siempre volverá al inicial del proyecto, que es una operación parecida a restablecer toda la base de datos a lo que hay dentro de Visual Studio.
16 Seleccione el archivo de base de datos CarTracker.mdf en el
Explorador de soluciones y cambie la propiedad Copiar en el directorio de resultados a No copiar en la ventana Propiedades.
17 Presione F5 para compilar y ejecutar la aplicación. Recibirá un
mensaje de excepción porque el archivo no se copiará en el directorio bin\debug. Además, en el evento de carga del formulario que se desencadena cuando el código intenta rellenar el conjunto de datos, no encontrará la base de datos en el lugar especificado por la cadena de conexión. Por tanto, recibirá una SQLException que informa de que no se puede establecer conexión con la base de datos. Haga clic en el botón Detener depuración o presione Mayús+F5 para detener la depuración. Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:41
18 Con el Explorador de Windows, vaya al directorio del proyecto (debe estar en Mis documentos\Visual
Studio 2005\Projects\CarTracker\CarTracker\), y copie los archivos .mdf y .ldf al directorio bin\debug bajo CarTracker.
19 En Visual Basic Express, presione F5 para generar y ejecutar la aplicación de nuevo.
Figura 8-20 Ejecución de la aplicación Car Tracker
Debe ver los dos registros que ha insertado manualmente en la tabla Listing. También debe ser posible explorarlos usando la franja de herramientas, así como modificar, insertar y eliminar registros. Vea la figura 8-20 para obtener una instantánea de la aplicación Car Tracker en tiempo de ejecución.
20 Cambie la dirección URL de la fila en la posición 1 para que termine por .net en lugar de por .com.
21 Después de cambiar la dirección URL del registro, presione el icono de disco para confirmar los cambios en la base de datos.
22 Cierre la aplicación Car Tracker y reiníciela presionando F5. Ahora debe ver la
primera fila con la dirección URL modificada terminada en .net. Cierre de nuevo la aplicación.
23 Para comprobar que está trabajando con una versión en tiempo de diseño y en
tiempo de ejecución de la base de datos CarTracker, abra la tabla Listing y seleccione Mostrar datos de tabla en el Explorador de bases de datos. La primera fila debe contener una columna URL terminada en .com y no en .net.
Comprobado. El archivo de base de datos de Visual Studio se desacopla ahora con el que su aplicación está utilizando en tiempo de ejecución. Lea la nota Más información de la página siguiente para saber cómo hacer que los datos sean iguales tanto en tiempo de diseño como en tiempo de ejecución.
Bandeja de componentes Cuando arrastró la tabla Listing del conjunto de datos hasta la superficie del diseñador, puede que viera que se agregaron cuatro elementos al área gris situada debajo de la superficie del diseñador. Esta sección de la superficie del diseñador se denomina bandeja de componentes. Ésta es la sección que utiliza Visual Studio para los controles no visuales. En su caso, agregó una instancia del conjunto de datos CarTracker, un adaptador de la tabla Listing, un origen de enlace de Listing y, por último, un explorador de enlace de Listing. Expliquémoslos por separado. ■ Origen de enlace Puede considerar un origen de enlace como un “intermediario” o como una capa de direccionamiento indirecto. También puede calificarse de elemento intermedio entre un control enlazado a datos del formulario y un origen de datos, como Capítulo 8: Administrar los datos
X1165138BDY.indb 153
153
21/12/05 11:38:42
MÁS INFORMACIÓN Si desea tener en Visual Studio los mismos datos que posee al ejecutar la aplicación en modo de depuración, debe cerrar completamente el proyecto. Utilizando el Explorador de Windows, copie los archivos .mdf y .ldf desde la carpeta bin\debug a la carpeta del proyecto. Cuando abra de nuevo el proyecto, la base de datos tendrá el mismo contenido. Imagine que después desea modificar la estructura de la base de datos, como por ejemplo, agregando una columna a una tabla. Si no desea perder los datos contenidos en los archivos de base de datos almacenados en la carpeta bin\debug, debe volver a copiarlos en la carpeta del proyecto antes de modificar la estructura de tablas. Cuando termine de realizar las modificaciones, simplemente ha de volver a copiar los archivos .mdf y .ldf a la carpeta bin\ debug. Por supuesto, si la aplicación necesita esos nuevos cambios de base de datos, también debería modificar el conjunto de datos, pero ese proceso está fuera del ámbito tratado en este libro.
un conjunto de datos. Un origen de enlace proporciona servicios de administración y notificaciones (eventos) de moneda. El origen de enlace facilita al origen de datos muchos métodos como por ejemplo para la ordenación, el filtrado, la exploración y la edición de los datos de sus controles de enlace a datos. También está estrechamente vinculado con el componente siguiente: el explorador de enlace. Cuando aparezca un explorador de enlace, puede estar seguro de que está obteniendo un origen de enlace. ■ Explorador de enlace El explorador de enlace es un medio de habilitar la exploración y la manipulación de los datos. Tiene un componente de interfaz de usuario o, más específicamente, una franja de herramientas con botones que facilitan las funcionalidades proporcionadas por el origen de enlace. ■ Conjunto de datos con tipo Aunque sabe qué es un conjunto de datos, puede que no esté al tanto de qué es un objeto con establecimiento inflexible de tipos. Contiene tablas de datos del tipo DataTable que constituyen la representación en memoria de las tablas de bases de datos. Estas tablas de datos también tienen un adaptador de datos especial que se denomina adaptador de tabla. Para cada tabla de datos hay un adaptador de tabla. ■ Adaptador de tabla Un adaptador de tabla es un objeto de acceso a datos. Conecta con la base de datos (por ejemplo, de SQL Server 2005 Express), ejecuta las consultas y rellena de datos una tabla de datos cuando vuelve de SQL Server. Por lo tanto, es el punto central para todo el acceso a datos de una tabla concreta. Hay un adaptador de tabla por cada una de las tablas contenidas en el origen de datos. Un adaptador de tabla puede incluir más de una consulta SELECT.
¿Cómo incluir información más descriptiva en el formulario? Volvamos a nuestro proyecto CarTracker. Como puede ver, los cuadros combinados ColorID, MakeID y CarTypeID están ahí, pero muestran su ID y no el nombre asociado con ese ID. Esta información no resulta de utilidad para el usuario porque un ID no entraña ningún sentido y no podrá agregar o modificar filas fácilmente si no dispone de un formato legible para esas columnas. Por consiguiente, debe asegurarse de que los datos mostrados son descriptivos y de que el ID se almacena en la fila siempre que el usuario modifica la información. Hay una forma fácil de conseguirlo, que seguirá ahora para los tres cuadros combinados.
154
X1165138BDY.indb 154
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:44
PARA ESTABLECER ENLACES DE DATOS CON TABLAS DEL DOMINIO En la ventana Orígenes de datos, seleccione la tabla Color del conjunto de datos, arrástrela hasta la
1 superficie del diseñador del formulario, encima del cuadro combinado ColorID, y colóquela ahí.
Verá que se agregan a la bandeja de componentes otro adaptador de tabla (ColorTableAdapter) y otro origen de enlace (ColorBindingSource). Si va al cuadro combinado ColorID y hace clic en el pequeño triángulo de la etiqueta, verá aparecer el cuadro de diálogo Modo de enlace de datos, como se muestra en la Figura 8-21. Observará que con la acción de arrastrar y colocar enlazó el control de cuadro combinado con ColorBindingSource. A causa de esta acción, siempre que se muestre el cuadro combinado, mostrará los nombres de los colores en lugar de ColorID. Cuando el usuario elige un color en el cuadro combinado, el miembro de valor asociado que se usará en la fila seguirá siendo el ColorID, concretamente, el ColorID asociado con el ColorName. Fantástico, ¿no le parece? Y no hemos escrito ni una línea de código.
Figura 8-21 Información de etiqueta inteligente del cuadro combinado ColorID mostrando el Modo de enlace de datos
Repita el mismo proceso para las tablas Make y CarType del conjunto de datos, y los cuadros
2 combinados MakeID y CarTypeID correspondientes.
Genere y ejecute la aplicación y observe después cada uno de los cuadros combinados. Ahora
3 aparecen nombres de colores reales y no sólo identificadores de colores (ColorID), y lo mismo puede
decirse para CarType y Make. Los cuadros combinados también se rellenan con todos los valores contenidos en esas tablas y no sólo con el valor de esa fila concreta. Haga clic en la flecha de la lista desplegable y verá todos los demás posibles valores. Cierre la aplicación.
4 En el formulario, quite la parte “ID” de las etiquetas ColorID, MakeID y CarTypeID. Ahora ampliará el campo Notes convirtiéndolo en un cuadro de texto multilínea. Seleccione el campo
5 Notes y cambie la propiedad Multiline a true. Cambie también MaxLength a 250, Size:Height a 50
MÁS INFORMACIÓN Este enlace de datos inteligente es una nueva característica de Visual Studio llamada Configuración predeterminada inteligente. Esta característica busca en la tabla del conjunto de datos para ver si existe alguna columna del tipo string bien por el ID o bien por la clave principal. Si es así, intenta utilizarla para el enlace de datos.
y Size:Width a 250.
6 Elimine el cuadro de texto ListingID y su etiqueta.
Capítulo 8: Administrar los datos
X1165138BDY.indb 155
155
21/12/05 11:38:46
Ajuste el tamaño y la posición de los controles del formulario para que quede como el formulario que
7 se muestra en la figura 8-22; no es necesario que sea un duplicado exacto. Es conveniente recordar
los conceptos de diseño de interfaces de usuario del capítulo 5 y, a la vez, una buena preparación para el capítulo 9. Cambie la propiedad Text del formulario a Car Tracker.
Figura 8-22 Nueva apariencia visual de la aplicación
8 En el Explorador de soluciones, cambie el nombre de form1.vb a Main.vb. 9 Seleccione el formulario y cambie el valor de la propiedad BackColor a Highlight. Esta aplicación está ya casi terminada, pero faltan las capacidades de investigación. Actualmente, la única manera de realizar búsquedas es examinar todas las filas hasta encontrar la correcta. Ahora no le resultará difícil porque sólo tiene dos filas en la base de datos Car Tracker. Imagine que tuviera 500 filas: el método Scan no le serviría de nada. Por tanto, implementará capacidades de búsqueda agregando consultas a la aplicación usando el Diseñador de DataSet.
10 En la ventana Orígenes de datos, seleccione CarTrackerDataSet. Haga clic con el botón secundario del mouse y seleccione Editar DataSet con el Diseñador.
11 Seleccione la tabla de datos Listing y, después, seleccione la sección ListingTableAdapter de la parte inferior de la tabla.
156
X1165138BDY.indb 156
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:47
Cuando observe la ventana Propiedades, verá que Visual Studio generó automáticamente cuatro tipos de consultas: SELECT, INSERT, DELETE y UPDATE. Esas son las consultas que le ayudaron a conseguir una aplicación plenamente funcional sin escribir una sola línea de código. En la información anterior sobre los adaptadores de tablas, pudo ver que es posible tener varias consultas con un adaptador de tabla porque es el punto central de acceso a datos. Por tanto, agregará capacidades de búsqueda a la aplicación agregando consultas a los adaptadores de tablas y usando parámetros de la interfaz de usuario. En primer lugar, agregará la capacidad de buscar los vehículos que tienen un color determinado.
Figura 8-23 Agregar nuevas consultas a un adaptador de tabla
12 Haga clic con el botón secundario del mouse en la sección ListingTableAdapter y seleccione Agregar consulta. . . como se puede ver en la Figura 8-23.
Esta acción abrirá el Asistente para la configuración de consultas de TableAdapter. El asistente le ayudará a agregar otra consulta SELECT que utilizará parámetros para perfeccionar la búsqueda. También puede crear una consulta SELECT y convertirla en un procedimiento almacenado o usar un procedimiento almacenado existente. Como su propio nombre indica, se trata de un procedimiento que está almacenado en SQL Server y contiene instrucciones SQL, junto con otras construcciones de programación que usan un lenguaje llamado T-SQL o Transact-SQL. Una característica nueva de SQL Server 2005 Express es que los procedimientos almacenados también se pueden codificar en lenguajes administrados, como C# y Visual Basic. Los procedimientos almacenados se ejecutan en el servidor. Puesto que está utilizando SQL Server 2005 Express, esta característica no le debe preocupar porque SQL Server y la aplicación se ejecutan en el mismo equipo.
13 Seleccione Usar instrucciones SQL y, a continuación, haga clic
en Siguiente. Cuando se le pregunte qué tipo de consulta SQL desea usar, elija SELECT que devuelve filas y después haga clic en Siguiente. Fíjese en que podría haber agregado cualquier tipo de consulta SQL deseada.
14 Ahora se le presenta una ventana de edición para que
agregue la instrucción SQL que realizará una búsqueda de todas las filas que contienen un color específico de vehículo. Consulte la Figura 8-24 para ver la ventana de edición de comandos SQL. Haga clic en el botón Generador de consultas. . . para obtener una vista visual de la consulta.
15 Ahora agregará la tabla Color al diagrama para poder basar la
búsqueda en un color concreto. Para agregar la tabla Color, basta con hacer clic con el botón secundario del mouse en el área del diagrama y seleccionarAgregar tabla. . . Aparecerá el cuadro de diálogo Agregar tabla, como se muestra en la figura 8-25. Seleccione la tabla Color y haga clic en el botón Agregar. Cuando se haya agregado la tabla Color al diagrama, haga clic en el botón Cerrar. Capítulo 8: Administrar los datos
X1165138BDY.indb 157
Figura 8-24 Ventana de edición de comandos SQL preparada para personalizar la búsqueda del usuario
157
21/12/05 11:38:48
Figura 8-25 El cuadro de diálogo Agregar tabla
MÁS INFORMACIÓN El símbolo ‘%’ es el carácter comodín en SQL y puede significar cualquier cosa. Por ejemplo, en la cláusula WHERE anterior, significa que se debe devolver algo que tenga un color parecido al del parámetro colorname.
En el panel de código SQL del Generador de consultas, anexe el siguiente código SQL que ayudará
16 en el proceso de filtrado: WHERE
(Color.ColorName LIKE ‘%’ + @colorname + ‘%’)
Antes de continuar con la nueva consulta, asegúrese de
17 que devolverá los resultados esperados. Haga clic en el
botón Ejecutar consulta para abrir el cuadro de diálogo Parámetros de la consulta, como se puede ver en la Figura 8-26.
18 Pruebe a reemplazar la palabra NULL con blue y haga clic
en Aceptar. El panel Resultados del Generador de consultas sólo debe mostrar una fila. Usando la palabra black se devolvería la fila del vehículo cuyo color es black. Escriba simplemente la letra b y debería obtener las filas de los vehículos de color blue y black. Cuando la consulta funcione de manera satisfactoria, haga clic en Aceptar en el Generador de consultas. Figura 8-26 Cuadro de diálogo Parámetros de la consulta con una indicación para que se escriba un valor de nombre de color
158
X1165138BDY.indb 158
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:50
19 En la pantalla Especifique una instrucción SELECT de SQL del
asistente, haga clic en Siguiente. Es el momento de agregar la consulta a la aplicación.
20 Aparece una pantalla que le pide que designe un nombre para
los métodos que generará la consulta. Después de esta operación, estos métodos estarán disponibles en el adaptador de tabla Listing. Consulte la Figura 8-27 para ver esta pantalla que contiene los dos nuevos nombres de métodos. Para ambos nombres tiene que agregar su filtro. En su caso puede agregar ColorName, ya que filtró por ese nombre en la cláusula WHERE. Cuando haya terminado, haga clic en Siguiente.
21 Después de procesar durante unos segundos, el equipo debe
mostrar una pantalla de resultados que le informe de que la instrucción SELECT y los nuevos métodos Fill y Get están listos para usar. Haga clic en el botón Finalizar. Observe la sección del adaptador de datos de la tabla de datos Listing. Los nuevos métodos se agregarán en ese lugar.
22 Repita los pasos a partir del paso 12 y agregue otra consulta al
ListingTableAdapter para la tabla CarType. Utilice la siguiente cláusula WHERE:
WHERE (CarType.CarTypeName LIKE ‘%’ + @cartypename + ‘%’)
Asigne a los métodos fill y get los nombres FillByCarTypeName y GetDataByCarTypeName.
Figura 8-27 Cuadro de diálogo con indicación para que se cambien los nombres de los métodos para aumentar las capacidades de búsqueda
23 Repita los pasos a partir del paso 12 y agregue otra consulta al ListingTableAdapter para la tabla Make. Utilice la siguiente cláusula WHERE:
WHERE (Make.MakeName LIKE ‘%’ + @makename + ‘%’)
Asigne a los métodos fill y get los nombres FillByMakeName y GetDataByMakeName. Ya casi ha terminado, pero todavía debe enlazar esas nuevas consultas a controles del formulario. En cualquier control con enlace a datos del formulario puede seleccionar Agregar consulta… en el menú de la etiqueta inteligente. En su caso, desea agregar capacidades de búsqueda a todo el formulario y no sólo a un control en particular.
24 Vaya a la bandeja de componentes, haga clic en la etiqueta inteligente ListingTableAdapter y selec-
cione Agregar consulta. . . Verá un cuadro de diálogo Generador de criterios de búsqueda que le pedirá que cree una consulta nueva o que elija una existente. Como acaba de generar tres conjuntos nuevos de métodos, sólo tiene que seleccionar uno. Seleccione la opción Nombre de la consulta existente y seleccione después FillByColorName como se muestra en la figura 8-28 de la página siguiente. Capítulo 8: Administrar los datos
X1165138BDY.indb 159
159
21/12/05 11:38:52
25 Haga clic en el botón Aceptar. Verá que en la parte superior del formulario
se ha colocado una franja de herramientas con un botón de búsqueda que llamará al método cuando haga clic en él, proporcionándole así una manera de realizar búsquedas en función de determinados criterios. Esto se ha conseguido con sólo escribir en las tres cláusulas WHERE de las consultas concretas.
26 Repita el paso 24 y agregue las consultas FillByCarTypeName y
FillByMakeName, que agregarán dos franjas de herramientas más.
27 Agregue ahora al formulario un contenedor de franja de herramientas como
hizo en el capítulo 6. Establezca la propiedad Dock para rellenar el formulario. En el menú de etiquetas inteligentes, seleccione Cambiar primario de los controles para poner todas las franjas de herramientas en el panel superior y todos los demás controles en el panel de contenido. Si es necesario, utilice la ventana Esquema del documento para ver y ajustar la jerarquía de objetos del formulario.
28 Cuando haya terminado de cambiar la ubicación de los controles, extienda el
panel superior haciendo clic en su control de cambio de tamaño y tirando de él para que tenga el ancho de dos franjas de herramientas.
29 Asegúrese de que su aplicación es similar a la que se muestra en la
Figura 8-28 Generador de criterios de búsqueda con el método FillByColorName seleccionado
figura 8-29. Presione F5 para ver el resultado de su trabajo. Escriba “blue” en la franja de herramientas colorname y haga clic en FillByColorName para ver si muestra listas de vehículos de color azul. Pruebe con las demás características de la aplicación.
Figura 8-29 Pantalla de la aplicación Car Tracker
160
X1165138BDY.indb 160
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:38:54
Ésta es una aplicación simple que probablemente modificará para que pueda controlar más información, como por ejemplo imágenes de los vehículos. Pero ya no hay nada que no pueda agregar por sí mismo. La siguiente es una lista de cosas que puede hacer si desea continuar trabajando en esta aplicación: ■ Agregar validaciones para las entradas del ■ Agregar tres formularios para agregar datos usuario, como asegurarse de que el año del a las tablas del dominio (CarType, Make, vehículo no es superior al año actual + 2 Color) ■ Agregar imágenes a las bases de datos y al ■ Agregar más información a la lista de formulario vehículos, como información de contacto ■ Agregar una marca de verificación que ■ Permitir que se pueda hacer clic en la indique si se ha vendido el vehículo dirección URL ■ Guardar un anuncio como un archivo de texto
En resumen…
Capítulo 8: Administrar los datos
X1165138BDY.indb 161
¡Éste ha sido un capítulo grande con mucho material! Repasemos lo aprendido. Primero realizamos una introducción a las bases de datos y a los conceptos de las mismas. Vimos qué constituye una base de datos y qué puede haber en una base de datos. Aprendimos qué es la integridad de datos y cómo se relaciona con las claves principales y las claves externas. Después utilizó Visual Basic 2005 Express para crear una base de datos y sus tablas, y las rellenó con algunos datos iniciales utilizando diversas herramientas de Visual Basic 2005 Express. Después, implementó todas las relaciones de claves externas sin salir de Visual Studio y las validó. Después de escribir manualmente los datos, aprendió a permitir que los usuarios incluyan datos más fácilmente desarrollando una aplicación de muestra, Car Tracker, que utiliza ADO.NET y el enlace de datos. Por último, explicamos los nuevos conceptos de ADO.NET 2.0 y cómo, con muy poco código o sin él, se puede desarrollar una aplicación basada en datos plenamente funcional. Sólo hemos presentado una parte reducida de ADO.NET, ya que es un tema muy amplio. Si desea obtener más información, pruebe a buscar código o ejemplos en MSDN. Un buen lugar donde empezar es en los ejemplos de iniciación, 101 samples, para Visual Studio 2005. Preste especial atención a los ejemplos de acceso a datos y formularios Windows Forms. El vínculo es el siguiente: http://msdn.microsoft.com/vbasic/downloads/2005/code/ 101samples/. En el capítulo siguiente desarrollará la aplicación final de este libro: la aplicación Weather Tracker. Aprenderá nuevos conceptos, como el desarrollo, el uso de servicios Web, la configuración de los usuarios y mucho más en una aplicación completa que incluye todas las validaciones necesarias. 161
21/12/05 11:38:56
X1165138BDY.indb 162
21/12/05 11:38:58
Capítulo 9 Crear su propia aplicación de seguimiento meteorológico
9 Características de la aplicación Weather Tracker, 164
Crear la interfaz de usuario de la aplicación, 165 Usar servicios Web, 177 Y ahora, basta con usar ClickOnce, 198
X1165138BDY.indb 163
Ya hemos llegado al último capítulo del libro y hemos aprendido bastantes conceptos nuevos en este tiempo. En este capítulo tendrá la oportunidad de realizar una comprobación de lo aprendido desarrollando una aplicación completa. También trabajará con nuevos procesos, pero también deberá reafirmar y aplicar lo aprendido en capítulos anteriores para crear el producto final. A lo largo del libro ha desarrollado otras aplicaciones, pero puede que no haya llevado a cabo todas las validaciones basadas en los pasos explicados o en mis recomendaciones. Con esta aplicación pondrá en práctica todo lo aprendido. I M P O R TA N T E Este capítulo utiliza un servicio Web de información meteorológica de los Estados Unidos. Es de esperar que este servicio Web estará disponible y funcionará como se explica en este capítulo. Sin embargo, puesto que este servicio Web se encuentra en Internet, es posible que el servicio cambie o que no esté disponible. Si no dispone de conexión a Internet o si el servicio Web meteorológico no está disponible, la aplicación se lo indicará mostrando un mensaje. Si se realizan cambios o correcciones en este capítulo (o en el libro), se recopilarán y se agregarán a un artículo de Microsoft Knowledge Base. Para ver la lista de correcciones conocidas para este libro, visite el artículo siguiente: http://support.microsoft.com/kb/905034/
163
21/12/05 11:38:58
Características de la aplicación Weather Tracker En esta sección podrá ver con detalle las características usadas para crear la versión 1.0 de la aplicación de seguimiento meteorológico Weather Tracker. En su versión 1.0, esta aplicación contiene las siguientes características: ■ Se inicia y permanece en ejecución como un icono en el área de notificación. ■ Especifica configuraciones de usuario opcionales desde el menú contextual del icono del área de notificación. ■ Actualiza a petición toda la información meteorológica desde el menú contextual del área de notificación. ■ Utiliza un servicio Web para obtener la información (meteorológica). ■ Almacena y conserva la configuración de los usuarios mediante XML. ■ La aplicación se minimiza y no se cierra cuando el usuario hace clic en el botón Cerrar de la barra de título. La aplicación sólo se cierra cuando el usuario selecciona Salir en el menú contextual. ■ Contiene una pantalla de bienvenida que se muestra durante el inicio. ■ Contiene un cuadro Acerca de al que se puede tener acceso mediante el menú contextual. ■ Muestra en la bandeja del sistema la temperatura actual usando el icono de meteorología siguiente: para temperaturas de más de 100 grados F, se indica en rojo; cualquier temperatura menor de cero se muestra en azul; las temperaturas normales se presentan en color negro. En su versión 1.0, esta aplicación no contendrá las siguientes características: ■ No funciona para más de una ciudad al mismo tiempo. ■ No incluye controles con indicadores gráficos para datos de viento, presión, temperatura, etc. ■ Realiza conversiones entre unidades del sistema métrico y unidades anglosajonas.
Plan de alto nivel Con la aplicación Weather Tracker, se presenta brevemente al usuario la pantalla de bienvenida y luego la aplicación se coloca directamente en el área de notificación de la barra de tareas de Windows para mostrar la temperatura actual. Si la temperatura supera los 100 grados F, ésta aparecerá en color rojo comenzando por 00. En caso de que la temperatura sea inferior a 0 grados F (grados negativos), se indicará 164
X1165138BDY.indb 164
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:04
en azul. De lo contrario, la temperatura se mostrará en color negro. Si se produce algún problema, en lugar de la lectura de temperatura se indicará NA en color rojo. Si el usuario hace clic con el botón secundario del mouse (ratón) en el icono del área de notificación, se abre un menú contextual con opciones para abrir el formulario principal y recuperar la información meteorológica actual. Los datos actuales tienen un icono y proporcionan toda la información meteorológica ofrecida por el servicio Web. Si el usuario selecciona Refresh Weather Info (Actualizar información meteorológica) en el menú contextual del icono del área de notificación, desencadenará automáticamente una llamada al servicio Web meteorológico para que actualice ambos tipos de datos meteorológicos. Este proceso se realiza asincrónicamente y comienza por actualizar los datos actuales. Si el usuario selecciona Options (Opciones) en el menú contextual, se abrirá un cuadro de diálogo de opciones. De esta manera, podrá cambiar el código postal de la zona de la que se debe recuperar la información meteorológica. Si el usuario selecciona About (Acerca de) en el menú contextual, se mostrará un cuadro de diálogo de tipo Acerca de. En este capítulo, usaremos un planteamiento distinto al seguido en los capítulos anteriores. Siempre y cuando utilice los mismos componentes que especifiquemos, podrá personalizar la aplicación en lo relativo a tamaño, color y otros atributos. También presentaré mi solución en distintos pasos a lo largo de la fase de desarrollo; por tanto, si le gusta lo que ve, puede continuar trabajando en la aplicación con el contenido complementario ofrecido. También presentaremos una gran cantidad de texto y explicaremos las secciones relacionadas con las características indicadas anteriormente. Para crear la aplicación de este capítulo, se utilizará un planteamiento incremental en el que se implementará una característica, luego se integrará con el resto de la aplicación y, por último, se probará. A continuación, se continuará con la siguiente característica hasta que la aplicación quede terminada.
Crear la interfaz de usuario de la aplicación La interfaz de usuario (IU) del formulario principal contendrá toda la información meteorológica que se presentará al usuario. Consulte la Figura 9-1 para ver la apariencia que presentará el formulario principal cuando esté terminado. Como aprendimos en el capítulo anterior, utilizará el enlace de datos para enlazar los controles con los datos meteorológicos. Recordará que, al crear el origen de datos, tenía opción de elegir Base de datos, Servicio Web y Objetos. En esta aplicación, usaremos un servicio Web como origen de datos y los campos mostrados en el formulario tendrán enlace a datos con el conjunto de datos del servicio Web. Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 165
165
21/12/05 11:39:06
Figura 9-1 Vista del formulario principal de la aplicación Weather Tracker
PARA CREAR UN ORIGEN DE DATOS PARA UN CONTROL DE FORMULARIO PRINCIPAL Inicie Visual Basic 2005 Express y cree un nuevo proyecto de tipo Aplicación para Windows.
1 Asigne a la aplicación el nombre Weather Tracker.
2 En el Explorador de soluciones, cambie el nombre de Form1.vb a Main.vb. Usando la ventana Propiedades, cambie las propiedades del formulario principal (Main) usando la
3 tabla siguiente: I M P O R TA N T E Todos los iconos o archivos de imagen usados en este capítulo se encuentran en una carpeta llamada Images situada bajo la carpeta Chapter9 de la ubicación en la que instaló el contenido complementario. La ubicación predeterminada es \Mis documentos\Microsoft Press\ VB 2005 Express\.
Propiedad
Valor
Size:Width
550
Size:Height
350
BackColor
System:MenuHighlight
ForeColor
Web:White
Font
Tahoma 8 Bold Continúa en la página siguiente
166
X1165138BDY.indb 166
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:08
Propiedad
Valor
Icon
Sun.ico
MinimizeBox
False
MaximizeBox
False
StartPosition
CenterScreen
FormBorderStyle
FixedDialog
ShowInTaskbar
False
DoubleBuffered
True
WindowState
Minimized
Agregar capacidades de área de notificación Ahora que ha definido el formulario Main, agregará las capacidades del área de notificación. Hablemos ahora de la terminología usada. Si una aplicación utiliza un icono situado en el área de notificación (el área de la barra de tareas de Windows donde normalmente aparece el reloj), este icono se denomina icono de notificación, y se implementa con un control NotifyIcon. El icono puede tener un menú contextual con distintas acciones. En este caso, el icono tendrá un menú contextual que presenta las opciones siguientes: About, Refresh Weather Info, Options, Open y Exit.
Continúa desde la página 166
MÁS INFORMACIÓN DoubleBuffered ayuda a reducir o impedir el parpadeo de la pantalla cuando vuelve a dibujarse el formulario. El control del formulario utiliza un búfer secundario para actualizar los datos gráficos del formulario, con lo que se realiza una escritura rápida en la memoria de la superficie mostrada, reduciendo así la posibilidad de que se produzca el parpadeo. Si no está habilitada la propiedad DoubleBuffered, se redibujan progresivamente las distintas partes del formulario mostrado, produciendo así el parpadeo.
PARA CREAR UN CONTROL NOTIFYICON En el Cuadro de herramientas del grupo Controles comunes, arrastre un control NotifyIcon hasta
1 el formulario. El control aparecerá en la bandeja de componentes. Asígnele el nombre
notifyWeather.
2 Cambie la propiedad text a Weather Tracker.
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 167
N OTA El control NotifyIcon no tiene una representación de diseño de la superficie del formulario, por lo que se agrega a la bandeja de componentes, en el mismo lugar donde se agregaron los componentes de ADO.NET en el capítulo anterior.
167
21/12/05 11:39:09
En el Cuadro de herramientas del grupo Menús y barras de her-
3 ramientas, arrastre un control ContextMenuStrip hasta el formu-
lario y asígnele el nombre cmsNotify.
Mediante la etiqueta inteligente del control cmsNotify situado en
4 la bandeja de componentes,
seleccione Editar elementos. . . . Aparecerá el Editor de la colección de elementos. En el Editor de la colección de elementos, cambie las propie-
5 dades del control cmsNotify siguiendo las especificadas en la
tabla siguiente:
Propiedad
Valor System: GradientInactiveCaption
BackColor ShowImageMargin
False
En la lista desplegable Seleccionar elemento y agregarlo a la
6 siguiente lista, situada a la izquierda, seleccione MenuItem y
haga clic en el botón Agregar. Cambie las propiedades del control usando la tabla siguiente:
Propiedad
Valor
(Nombre)
tsmiAbout
Text
About . . .
ForeColor
System:MenuHighlight
En la lista desplegable Seleccionar elemento y agregarlo a la
7 siguiente lista, situada a la izquierda, seleccione Separator y
haga clic en el botón Agregar. Cambie la propiedad ForeColor a System:MenuHighlight.
En la lista desplegable Seleccionar elemento y agregarlo a la 8 siguiente lista, situada a la izquierda, seleccione MenuItem y haga clic en el botón Agregar. Cambie las propiedades del control usando la tabla siguiente: 168
X1165138BDY.indb 168
Propiedad
Valor
(Nombre)
tsmiRefresh
Text
Refresh Weather Info
ForeColor
System:MenuHighlight
En la lista desplegable Seleccionar elemento y agregarlo a la
9 siguiente lista, situada a la izquierda, seleccione Separator y
haga clic en el botón Agregar. Cambie la propiedad ForeColor a System:MenuHighlight.
10 En la lista desplegable Seleccionar elemento y agregarlo a la
siguiente lista, situada a la izquierda, seleccione MenuItem y haga clic en el botón Agregar. Cambie las propiedades del control usando la tabla siguiente:
Propiedad
Valor
(Nombre)
tsmiOptions
Text
Options...
ForeColor
System:MenuHighlight
11 En la lista desplegable Seleccionar elemento y agregarlo a la
siguiente lista, situada a la izquierda, seleccione Separator y haga clic en el botón Agregar. Cambie la propiedad ForeColor a System:MenuHighlight.
12 En la lista desplegable Seleccionar elemento y agregarlo a la
siguiente lista, situada a la izquierda, seleccione MenuItem y haga clic en el botón Agregar. Cambie las propiedades del control usando la tabla siguiente:
Propiedad
Valor
(Nombre)
tsmiOpen
Text
Open…
ForeColor
System:MenuHighlight
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:10
13 En la lista desplegable Seleccionar elemento y agregarlo a la siguiente lista, situada a la izquierda,
seleccione MenuItem y haga clic en el botón Agregar. Cambie las propiedades del control de acuerdo con la tabla siguiente:
Propiedad
Valor
(Nombre)
tsmiExit
Text
Exit
ForeColor
System:MenuHighlight
Ya ha terminado de agregar elementos a la franja de menús contextual. El Editor de la colección de elementos debería presentar la apariencia de la Figura 9-2.
Figura 9-2 Elementos del menú contextual
14 Haga clic en Aceptar para cerrar el Editor de la colección de elementos. Ahora es necesario asociar la franja de menús contextual con el control notifyWeather, que es bastante fácil de hacer.
15 Seleccione el control notifyWeather en la bandeja de componentes y, en la ventana Propiedades, cambie la propiedad ContextMenuStrip a cmsNotify.
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 169
169
21/12/05 11:39:11
En este momento está actuando como usuario. Para poder hacer clic en la aplicación cuando se encuentre en el área de notificación, el control notifyWeather requiere contar con un icono. Más adelante, la aplicación generará dinámicamente el icono, y éste indicará la temperatura existente en ese momento. Por consiguiente, es necesario asociar con la aplicación un icono temporal o, de lo contrario, no se podrá seleccionar en el área de notificación.
16 En la ventana Propiedades de notifyWeather, establezca la propiedad Icon en otheroptions.ico.
Figura 9-3 Menú contextual del control notifyWeather
Este archivo se encuentra en una carpeta denominada Images, situada bajo la carpeta Chapter9 de la ubicación en la que instaló el contenido complementario.
17 Presione F5 para ejecutar la aplicación.
. Si hace clic con el botón secundario del En el área de notificación debería aparecer este icono: mouse en este icono, se abre el menú contextual representado en la Figura 9-3. Cuando haya terminado, la única forma de detener la aplicación es hacer clic en el botón azul Detener depuración de la barra de herramientas de Visual Studio. Ahora agregará otra manera de detener la aplicación.
PARA DETENER UNA APLICACIÓN 1 Seleccione el control tsmiExit en la lista desplegable de la ventana Propiedades. Haga clic en el icono de eventos (rayo amarillo) de la ventana Propiedades y después haga doble clic
3 en el evento click. Aparece la vista Código.
Edite el controlador del evento tsmiExit_Click y agregue el método Shutdown, como se puede ver
4 en el código siguiente. Se crea un método Shutdown porque siempre es aconsejable hacer que el
código sea reutilizable, y un método Shutdown le permitirá hacerlo. 1
Private Sub tsmiExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles tsmiExit.Click 2 3
Me.Shutdown() End Sub
4 5 6
Private Sub Shutdown() If notifyWeather.Visible Then
7 8 9 10
170
X1165138BDY.indb 170
notifyWeather.Visible = False End If Application.Exit() End Sub
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:12
La primera instrucción del método Shutdown comprobará si el control notifyWeather está visible y, si es así, hará que desaparezca el icono de notificación del área de notificación. La última línea del método sale de la aplicación. Ahora podrá seleccionar la opción de menú Exit en el menú contextual para salir de la aplicación; no será necesario utilizar el botón Detener depuración. Puede probar la aplicación presionando F5 para asegurarse de que la opción de menú Exit funciona como se espera. Ahora puede salir de la aplicación, pero no dispone de ninguna manera de abrir el formulario principal, que contendrá toda la información meteorológica. Para ello, debe vincular el evento de doble clic del icono de control notifyWeather del área de notificación con la acción de abrir el formulario Main en el centro de la pantalla. En la vista Diseño, seleccione el control notifyWeather en la bandeja de componentes. En la lista de eventos
4 de la ventana Propiedades, haga doble clic en el evento MouseDoubleClick. Edite el controlador de eventos
notifyWeather_MouseDoubleClick y agregue el método Restore, como se puede ver en el código siguiente. 11 12
Private Sub Restore() If Me.WindowState = FormWindowState.Minimized Then
13 14 15
Me.WindowState = FormWindowState.Normal End If Me.Visible = True
16
End Sub
17
Private Sub notifyWeather_MouseDoubleClick(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles notifyWeather.MouseDoubleClick 18 19
Me.Restore() End Sub
De nuevo, se creó un método privado denominado Restore() en caso de que lo necesite en cualquier otro punto de la aplicación. La primera línea de código del método Restore está ahí porque es imposible saber en qué contexto se llamará al método. En su caso, cuando creó el formulario, estableció la propiedad WindowState en minimized y ShowInTaskbar en false para que el formulario se inicie minimizado y no se presente al usuario. Cuando inicie la aplicación, la primera vez que el usuario seleccione la opción de menú Open… (pronto escribiremos el código para ello) o haga doble clic en el control notifyWeather, el usuario no podrá ver el formulario si sólo ha establecido su propiedad Visible en true. Por consiguiente, debe comprobar en qué estado WindowState aparece el formulario. Si sigue estando minimizado, debe establecerlo en Normal para que el foco se encuentre en el formulario Main. Presione F5 para probar los cambios efectuados. Haga doble clic en el icono notifyWeather del área 5 de notificación y debería aparecer el formulario Main. Veamos ahora qué ocurre si el usuario hace clic en el botón Cerrar (la X roja). Si cierra la aplicación usando el botón Cerrar, se cierra de manera definitiva. Sin embargo, nuestros requisitos de diseño especifican que la aplicación sólo debería volver a minimizarse en el área de notificación cuando el usuario haga clic en el botón Cerrar. Por tanto, ahora interceptaremos un evento que se produce justo antes de que se cierre el formulario y justo antes de que se elimine el objeto formulario, que es un evento llamado FormClosing. Usando un evento FormClosing, puede conocer el motivo de que se esté cerrando el formulario y, de esa manera, interceptar el evento cuando el usuario haga clic en el botón Cerrar. Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 171
171
21/12/05 11:39:14
En la vista Diseño, seleccione el formulario Main. Vaya a la lista de eventos de la ventana Propiedades
6 y haga clic en el evento FormClosing. Agregue el código siguiente al controlador de eventos Main_
FormClosing. 20
Private Sub Main_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.
Forms.FormClosingEventArgs) Handles MyBase.FormClosing 21
If (e.CloseReason = CloseReason.UserClosing) Then
22
e.Cancel = True
23 24 25
MÁS INFORMACIÓN Si desea obtener más información sobre por qué puede estar cerrándose un formulario, puede buscar en el sistema de Ayuda escribiendo las siguientes palabras clave: enumeración CloseReason.
MÁS INFORMACIÓN También se llamará al evento UserClosing cuando el usuario presione Alt+F4 o si selecciona Cerrar en el menú de control del formulario (el menú que aparece al hacer clic en la esquina izquierda, donde suele estar situado el icono).
Me.Hide() End If End Sub
Parte del evento es FormClosingEventArgs, que contiene los argumentos que acompañan a la notificación del evento, así como el motivo por el cual se va a cerrar el formulario. Si el usuario está cerrando el formulario, al establecer la propiedad Cancel en true se detendrá el proceso de cierre y se evitará que se cierre el formulario. La siguiente instrucción es una llamada al método Hide. El método Hide es simplemente un sinónimo de establecer la propiedad Visible en false. El formulario sencillamente se ocultará. Cuando el usuario seleccione la opción Exit del menú contextual, se producirá el evento FormClosing; sin embargo, el motivo especificado no será UserClosing. La razón para cerrar será ApplicationExitCall y, por tanto, la aplicación continuará el proceso de cerrar. Ahora agregará el código para la opción de menú Open . . . Para escribir el código de este evento,
7 seleccione cmsNotify en la bandeja de componentes y haga doble clic en la opción de menú Open. . .
de la franja de menús de contenido. Se creará el controlador del evento click y llamará al método Restore para controlar la visibilidad del formulario, lo que se hace mediante el código de Me.Restore(). Escribirá el código necesario para asegurarse de que el formulario tiene el foco, de manera que quede por encima de las demás ventanas mostradas. Agregue el código siguiente al controlador de eventos tsmiOpen_Click: 26
Private Sub tsmiOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles tsmiOpen.Click 27 28 29
Me.Restore() Me.Focus() End Sub
Ahora, pruebe la aplicación con el siguiente escenario de prueba: Ejecute la aplicación presionando F5. Haga clic con el botón secundario del mouse en el icono de notificación y seleccione Open . . . En el centro de la pantalla debería aparecer el formulario Main. Minimice el formulario Main haciendo clic en el botón Cerrar. Una vez minimizado, haga doble clic en el icono de notificación. Debería ver de nuevo el formulario Main. Salga de la aplicación seleccionando la opción de menú Exit. 172
X1165138BDY.indb 172
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:16
Agregar la pantalla de bienvenida y el cuadro Acerca de Puesto que ya hemos explicado estos procedimientos en el Capítulo 6, no dedicaremos demasiado tiempo a ellos en esta sección. Simplemente es necesario agregar dos nuevos formularios al proyecto y asignarles los nombres SplashWeather.vb y AboutWeatherTracker.vb. No olvide usar la plantilla correcta cuando agregue el formulario al proyecto; si no lo hace, no podrá tener acceso a toda la información rellenada previamente. Utilizando la tabla siguiente, establezca las propiedades especificadas para el formulario SplashWeather. La ubicación de las etiquetas no importa; colóquelas donde mejor le parezca. Las imágenes necesarias se encuentran en la carpeta Images situada bajo la carpeta Chapter9 del contenido complementario. Componente
Propiedad
Valor
SplashWeather
StartPosition
CenterScreen
MainLayoutPanel
BackgroundImage
Mountain.jpg
Main LayoutPanel
BackgroundImageLayout
Stretch
ApplicationTitle
Font
Tahoma 20 Regular
ApplicationTitle
ForeColor
Web:White
Version
Font
Tahoma 9 Bold
Version
ForeColor
Web:White
Copyright
Font
Tahoma 9 Bold
Copyright
ForeColor
Web:White
Utilizando la tabla siguiente, establezca las propiedades especificadas para el formulario AboutWeatherTracker.
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 173
173
21/12/05 11:39:17
Componente
Propiedad
Valor
AboutWeatherTracker
Font
Tahoma 8
AboutWeatherTracker
BackColor
System:MenuHighlight
AboutWeatherTracker
StartPosition
CenterScreen
AboutWeatherTracker
ForeColor
Web:White
TextBoxDescription
Font
Tahoma 8
TextBoxDescription
BackColor
System:MenuHighlight
TextBoxDescription
ForeColor
Web:White
OKButton
FlatStyle
Flat
LogoPictureBox
Image
Sunset.jpg
A continuación, debe asociar estos dos formularios al resto de la aplicación.
PARA ASOCIAR FORMULARIOS A UNA APLICACIÓN Para asociar la pantalla de bienvenida, usará el Diseñador de proyectos. En el Explorador de solucio-
1 nes, haga clic con el botón secundario del mouse en el proyecto Weather Tracker y seleccione
Propiedades. En la ficha Aplicación, establezca la lista desplegable Splash Screen en SplashWeather. Mientras está en este punto, cambie el icono de la aplicación a Sun.ico. En la lista desplegable Icon,
2 seleccione <Examinar...>. Seleccione el archivo Sun.ico en la carpeta Images de Chapter9.
Haga clic en Información de ensamblado y especifique la información sobre el ensamblado del
3 proyecto. Esta información se usará para rellenar los campos de la pantalla de bienvenida y del cuadro
de diálogo About (Acerca de).
Para adjuntar el cuadro Acerca de, debe asociarlo con la opción de menú contextual About. . .
4 Vaya al formulario Main.vb en modo de diseño.
Seleccione cmsNotify en la bandeja de componentes y haga doble clic en la opción de menú
5 About . . . de la franja de menú contextual. Agregue el código siguiente al controlador de
eventos tsmiAbout_Click. 174
X1165138BDY.indb 174
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:18
1
Private Sub tsmiAbout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles tsmiAbout.Click 2
AboutWeatherTracker.ShowDialog()
3
End Sub
Agregar el cuadro de diálogo de opciones Ahora dispone de tres formularios. Por último, vamos a agregar el cuadro de diálogo Options que aparecerá cuando el usuario seleccione la opción de menú Options... del menú contextual desde el icono de notificación.
PARA AGREGAR EL CUADRO DE DIÁLOGO DE OPCIONES En el Explorador de soluciones, haga clic con el botón secundario del mouse en Weather Tracker,
1 seleccione Agregar y, por último, seleccione Windows Forms en el menú contextual.
En las plantillas, seleccione Windows Forms, asigne al formulario el nombre Options.vb y haga clic
2 en Agregar.
Siguiendo la tabla siguiente, establezca las propiedades y agregue los controles al formulario Options
3 para que tenga la misma apariencia que la representada en la Figura 9-4. Componente
Tipo de control
Propiedad
Valor
Options
Form
Font
Tahoma 8
Options
Form
BackColor
System:MenuHighlight
Options
Form
StartPosition
CenterScreen
Options
Form
ForeColor
Web:White
Options
Form
ControlBox
False
Options
Form
FormBorderStyle
FixedDialog
Options
Form
MaximizeBox
False
Options
Form
MinimizeBox
False
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 175
Figura 9-4 Cuadro de diálogo Options
Continúa en la página siguiente 175
21/12/05 11:39:19
Continúa desde la página anterior
Options
Form
Text
Options
Componente
Tipo de control
Propiedad
Valor
txtCurrentZipCode
Textbox
AcceptReturn
True
txtCurrentZipCode
Textbox
BackColor
System:InactiveCaption
lblCurrentZipCode
Label
Text
Current Zip Code:
btnOk
Button
BackColor
System:InactiveCaption
btnOk
Button
FlatStyle
Popup
btnOk
Button
Text
Ok
btnCancel
Button
BackColor
System:InactiveCaption
btnCancel
Button
Text
Cancel
btnCancel
Button
FlatStyle
Popup
Options
Form
AcceptButton
btnOk
Options
Form
CancelButton
btnCancel
PARA CONECTAR EL FORMULARIO CON EL MENÚ CONTEXTUAL 1 Muestre el formulario Main en modo de diseño. Seleccione cmsNotify en la bandeja de componentes y haga doble clic en la opción de menú
2 Options . . . de la franja de menú contextual.
3 Agregue las líneas de código siguientes al controlador de eventos tsiOptions_Click: N OTA
1
En este punto del capítulo, el estado del proyecto actual se guarda en la carpeta Chapter9 del contenido complementario, dentro de una carpeta llamada Weather Tracker UI. Para agregar la funcionalidad del servicio Web, puede continuar con su propio proyecto o usar el proyecto almacenado en la carpeta Weather Tracker UI.
EventArgs) Handles tsmiOptions.Click
176
X1165138BDY.indb 176
2 3
Private Sub tsmiOptions_Click(ByVal sender As System.Object, ByVal e As System. optionsForm.ShowDialog() End Sub
Al principio del código de Main.vb, justo debajo de Public Class Main, agregue la línea de código
4 siguiente:
Dim optionsForm as New Options()
Presione F5 para ejecutar la aplicación. Debería aparecer la pantalla de bienvenida. Utilice el menú
5 contextual del icono de notificación para abrir el cuadro de diálogo About y el cuadro de diálogo
Options. Cuando haya terminado, salga de la aplicación.
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:21
Ya ha terminado esta parte del proyecto. No olvide guardarlo. Ya es el momento de agregar lo importante del proyecto: usar los servicios Web.
Usar servicios Web Ha creado un envase precioso, pero este envase está bastante vacío por el momento. Para poder rellenar ese envase, debe tener acceso a la información meteorológica. Para ello, aprenderá a utilizar los servicios Web. Pero antes de eso: ¿qué es un servicio Web? Un servicio Web es una aplicación que se ejecuta en un servidor Web, como por ejemplo Microsoft Internet Information Services (IIS). Los servicios Web poseen una serie de métodos públicos expuestos a los que pueden llamar las aplicaciones. En Internet hay multitud de ejemplos de servicios Web. Puede utilizar servicios Web que realicen diversas operaciones, como buscar códigos postales, ver mapas, adquirir entradas para el cine, buscar información en motores de búsqueda como MSN o Google, y obtener información meteorológica, como pronto hará la aplicación. En el mundo de .NET tiene a su disposición clases y asistentes que le ayudarán a usar los servicios Web. Los servicios Web utilizan el lenguaje XML para enviar y devolver resultados. Todos los objetos están serializados (los mensajes se envían como una serie de fragmentos de información a través de Internet) y después, en el otro lado, se vuelven a convertir en objetos deserializándolos. Lo mejor de los servicios Web XML es que se pueden alojar y utilizar en cualquier sistema operativo y que se pueden desarrollar en cualquier lenguaje de programación. Puesto que emplean una serie de protocolos y reglas estándar, los servicios Web XML contribuyen a la interoperabilidad y la eficiencia. El futuro del mundo de transacciones a través de Internet reside en gran medida en el éxito de los servicios Web. En este proyecto utilizará un servicio Web de información meteorológica. Será necesario indicarle a Visual Studio dónde se encuentra el servicio Web para que pueda agregar una referencia Web al proyecto que apunta a este servicio. Siga estos pasos para llevar a cabo esta tarea.
I M P O R TA N T E El servicio Web meteorológico que usará en esta parte del capítulo requiere registrarse gratuitamente. Por supuesto, cuando decimos gratuito, debe tenerse en cuenta la disponibilidad y la confiabilidad del servicio Web. He intentado elegir un servicio Web de confianza, pero no se puede garantizar que estará disponible en todo momento. Puede buscar muchos servicios Web utilizando su motor de búsqueda favorito, pero hay algunos sitios Web que enumeran servicios Web: http://www.xmethods.com y http://www.webservicex.net/WS/ default.aspx.
I M P O R TA N T E Necesitará disponer de conexión a Internet para todo el capítulo; de lo contrario, nada funcionará a partir de este punto, especialmente en la sección siguiente, porque es en ella en la que establece comunicación con el servicio Web.
PARA AGREGAR SERVICIOS WEB AL PROYECTO USANDO VISUAL STUDIO Deberá registrarse en el servicio Web gratuito de información meteorológica para obtener un nombre de
1 usuario y una contraseña con la que podrá autenticarse. De hecho, usará esa información para recuperar la
información meteorológica. De no hacerlo, la experiencia de uso de la aplicación será limitada. Vaya a http://www.ejse.com/WeatherSignup/Signup.aspx para registrarse y recibir la información de conexión. Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 177
177
21/12/05 11:39:22
En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nombre del
2 proyecto y después seleccione Agregar referencia Web. . . Aparece el cuadro de diálogo Agregar
referencia Web. Para usar un servicio Web puede usar su explorador Web habitual sin escribir una sola línea de código. Normalmente puede dirigir el explorador Web a la dirección del servicio Web e invocar a los métodos que contienen. Sin embargo, puede haber ocasiones en que puede que no sea posible hacerlo. Se trata de una excelente manera de aprender lo que necesita un método Web y la apariencia que tienen sus resultados. Tenga en cuenta que no es posible comunicarse con todos ellos de esta manera. Como ejemplo, pruebe un servicio Web regional que devuelva una lista de todos los estados de los Estados Unidos: http://www. synapticdigital.com/webservice/ public/regions.asmx. Haga clic en el método listByCountry, escriba USA en el cuadro de texto amarillo y haga clic en Invoke. Obtendrá la lista de estados de Estados Unidos en otra ventana del explorador.
En el cuadro de texto Dirección URL, escriba la dirección URL del servicio Web meteorológico, http://
3 www.ejse.com/WeatherService/Service.asmx y haga clic en el botón Ir.
Si está conectado a Internet y el servicio Web de meteorología está disponible, verá una lista de los
4 métodos expuestos para los programadores. Consulte la Figura 9-5 para ver los resultados.
Figura 9-5 Lista de métodos expuestos en el servicio Web meteorológico
Cambie el valor de Nombre de referencia Web por WeatherWebService y haga
5 clic en el botón Agregar referencia. Visual Studio tardará unos momentos en crear
todos los archivos necesarios para poder usar ese servicio Web.
En la carpeta Referencias Web ahora debería tener un pequeño icono de un globo
6 terráqueo con el nombre que acaba de asignar a ese sitio Web. Se trata de una
referencia Web que apunta al servicio Web meteorológico encontrado en esa dirección URL. Ahora puede conectar con los métodos de este servicio Web y ejecutarlos. 178
X1165138BDY.indb 178
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:24
Haga clic en Mostrar todos los archivos en la barra de herramientas del Explorador de soluciones y
7 expanda el nodo WeatherWebService. Observará que Visual Studio creó tres elementos: un archivo
llamado Reference.map, un archivo denominado Service.wsdl y otro llamado Service.disco. Consulte la Figura 9-6 para ver la apariencia que debería tener el Explorador de soluciones. El servicio Web meteorológico es la piedra angular de esta aplicación; sin él, sólo tendría un bonito envase completamente vacío.
Reference.map es un archivo XML que contiene la dirección URL de ese servicio Web. Lo genera una herramienta llamada wsdl.exe. WSDL significa en inglés Lenguaje de descripción de servicios Web. El archivo reference.map está vinculado a un archivo proxy llamado reference.vb. Este archivo proxy es una representación local del servicio Web de Internet que le permite llamar a métodos de los proyectos sin encontrar errores de compilación ni de tiempo de ejecución. También le permite contar con IntelliSense en Visual Studio cuando utilice el servicio Web. El archivo proxy es una copia de una clase ubicada en el servidor Web donde se encuentra alojado el servicio Web. El archivo .wsdl es un archivo XML que describe el servicio Web y lo que ofrece. Por último, el archivo .disco es un archivo opcional para el descubrimiento del servicio Web. En el Capítulo 8, “Administrar los datos”, aprendimos que se pueden crear orígenes de datos a partir de un servicio Web, una base de datos o un objeto. Y eso es exactamente lo que aprovecharemos en esta sección. Veremos cómo la reutilización de herramientas y componentes permite aumentar la productividad. Utilizaremos las mismas técnicas que empleamos en las anteriores secciones dedicadas a las bases de datos, pero esta vez enlazaremos información procedente de todas partes del mundo, a través de Internet. Ahora llamará a los métodos Web públicos para obtener la información que necesite. Aquí es donde comienza la diversión. Como ya ha hecho con las bases de datos y los enlaces de datos, ahora seguirá los mismos procedimientos para el servicio Web. Vaya a la ventana Orígenes de datos que aparece junto al Explorador de soluciones. Observará que ya dispone de un origen de datos de servicio Web meteorológico. Por tanto, será fácil colocar la información que será necesario presentar en el formulario.
Figura 9-6 Servicio Web meteorológico agregado al proyecto
APARA AGREGAR INFORMACIÓN METEOROLÓGICA AL FORMULARIO 1 En primer lugar, asegúrese de que está viendo el formulario Main en la superficie del diseñador. En la ventana Orígenes de datos, expanda el nodo WeatherWebService y verá que hay cinco tipos
2 distintos de datos que puede recuperar el sitio Web. Todos ellos son conjuntos de datos.
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 179
179
21/12/05 11:39:26
Expanda el nodo WeatherInfo y cambie todos los tipos de elementos (excepto IconIndex) de ese conjunto
3 de datos de TextBox a Label haciendo clic en la flecha desplegable de cada elemento y seleccionando
Label en la lista.
Establezca IconIndex en PictureBox. Si no está disponible el tipo de cuadro de imagen, puede
4 agregarlo. En la lista desplegable, haga clic en la opción Personalizar. En el cuadro de diálogo
Opciones verá una lista desplegable con los posibles tipos de datos. Integer debe estar seleccionado de forma predeterminada porque Visual Studio reconoce que el campo devuelto por el método Web es un valor entero; si no es así, seleccione Integer. Justo debajo, debe aparecer una serie de casillas de verificación que representan una lista de controles asociados, lo que significa que se trata de una lista de controles con los que se puede asociar un entero. Cuando se desplace hacia abajo, debería ver el control PictureBox. Active la casilla de verificación que aparece junto a Inicio y, a continuación, haga clic en Aceptar. Ahora, para IconIndex, seleccione el tipo PictureBox en la lista desplegable. En la ventana Orígenes de datos, seleccione el nodo WeatherInfo y cambie la representación de los
5 datos de DataGridView a Details seleccionando esa opción en la lista desplegable. Cuando haya ter-
minado, la ventana Orígenes de datos debería tener la apariencia de la representada en la Figura 9-7.
Arrastre WeatherInfo y colóquela en la superficie del diseñador del formulario Main. Se agregan a la
6 bandeja de componentes WeatherInfoBindingSource y WeatherInfoBindingNavigator. Figura 9-7 Datos de WeatherInfo en el servicio Web meteorológico
Seleccione WeatherInfoBindingNavigator en la bandeja de componentes y cambie la propiedad
7 Visible a false. (Puede que sea necesario hacer clic en el botón Propiedades de la parte superior de
la ventana Propiedades para ver una lista de las propiedades.)
No se pueden ver los límites de todos los controles del formulario. Para facilitar el diseño, seleccione
8 todos los controles del formulario creando alrededor de los mismos un rectángulo de selección
grande con el mouse. En la ventana Propiedades, cambie la propiedad BorderStyle de None a FixedSingle. Alrededor de todos los controles deberían aparecer bordes negros. Una vez terminado el formulario, devolveremos el valor None a la propiedad BorderStyle. En el control PictureBox, establezca la propiedad Name en pbCurrentTemp, la propiedad BackColor
9 en Web:White, Size.Width en 55 y, por último, Size.Height en 45. 10 Elimine la etiqueta Icon Index.
11 Agregue un control Label y establezca la propiedad Text en Current Temperature. 12 Cambie el texto de la etiqueta Temprature: por Temperature:. 180
X1165138BDY.indb 180
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:27
13 Cambie la propiedad Name de la etiqueta situada a la derecha de Temperature: por
lblTemperatureCurrent. La etiqueta se identifica con un cuadro rojo en la Figura 9-8.
14 Usando la Figura 9-8 como guía, ajuste el tamaño y la ubicación de los controles en el formulario. Si lo desea, ajuste el tamaño y el estilo de fuente de las etiquetas.
Figura 9-8 Disposición de la información meteorológica actual
Configuración de usuario Para que funcione la aplicación Weather Tracker, será necesario especificar la información de registro en el servicio Web de información meteorológica. El nombre de usuario y la contraseña se guardarán en la configuración de la aplicación. La configuración de la aplicación es un conjunto de ajustes almacenados en un archivo XML que se conservan entre las distintas ejecuciones. El código postal actual también se guardará en este archivo.
PARA CREAR ENTRADAS DE CONFIGURACIÓN DE USUARIO En el Explorador de soluciones, haga clic con el botón secundario del
1 mouse en el proyecto Weather Tracker y seleccione Propiedades.
Figura 9-9 Configuración de la aplicación en el Diseñador de proyectos
Aparecerá el Diseñador de proyectos.
En la ficha Configuración, agregue entradas para Username,
2 Password y CurrentZipCode, como se puede ver en la Figura 9-9.
(Deberá especificar su nombre de usuario y su contraseña.)
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 181
181
21/12/05 11:39:29
Todas las entradas tienen establecimiento inflexible de tipos (es decir, son del auténtico tipo .NET) y están establecidas en el tipo String. Es posible que le preocupe el hecho de que el nombre de usuario y la contraseña están escritos en texto legible. En su caso, no es necesario un alto nivel de seguridad porque el servicio Web meteorológico es gratuito. Si necesitara hacerlo, podría cifrar esos ajustes para que fueran más seguros.
3 Guarde el proyecto y cierre el Diseñador de proyectos.
Trabajar en segundo plano Si intenta ejecutar ahora el formulario, no obtendrá ninguna información del servicio Web. Este proceso es distinto al seguido para trabajar con bases de datos, en el que se obtenía automáticamente una gran parte de código para recuperar los datos y rellenar los campos. Al trabajar con un servicio Web, debe hacer más que escribir el código para incluir los datos en el formulario. Expliquemos cómo hacerlo. En primer lugar, comunicarse con un sitio Web puede ser un proceso muy largo. Un proceso largo normalmente sólo significa unos segundos (quizás hasta 30 segundos), pero no puede dejarse al usuario con una interfaz de usuario bloqueada mientras la aplicación recupera la información. Por tanto, necesita una manera de N OTA Las secciones siguientes contienen decirle a la aplicación: “Busca esta información y avísame bastante código. Si no desea cuando la tengas.” Esta técnica de programación se denomina escribir todo este código, puede abrir el proyecto Weather Tracker programación multiproceso con devolución de llamadas. terminado incluido en el contenido complementario y copiar las En .NET Framework 2.0, este tipo de programación se secciones de código que considere simplifica creando una nueva clase llamada BackgroundWorker. necesario. Como su propio nombre implica, trabaja en una tarea en segundo plano; lo que no va implícito es que le vaya a indicar que ha finalizado la tarea.
PARA REALIZAR UNA TAREA EN SEGUNDO PLANO 1 Abra el formulario Main en la vista Diseño. Vaya al Cuadro de herramientas. En la sección Componentes, seleccione el control
2 BackgroundWorker y arrástrelo hasta el formulario. No posee parte de tiempo de diseño, por lo que
se agregará a la bandeja de componentes. Cámbiele el nombre por el de BackgroundCurrentWorker.
En la parte superior de la ventana Propiedades de BackgroundCurrentWorker, haga clic en el icono
3 eventos (rayo amarillo) y haga doble clic en el evento DoWork. 182
X1165138BDY.indb 182
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:30
4 Agregue el código siguiente al controlador de eventos BackgroundCurrentWorker_DoWork. 1
Private Sub BackgroundCurrentWorker_DoWork(ByVal sender As Object, ByVal e As System.
ComponentModel.DoWorkEventArgs) Handles BackgroundCurrentWorker.DoWork 2
‘ This method will execute in the background thread created
3
‘ by the BackgroundWorker component
4
Dim desiredZipCode As Integer = e.Argument
5
Dim weatherService As New WeatherWebService.Service()
6
e.Result = weatherService.GetWeatherInfo2( _
7
My.Settings.Username, _
8
My.Settings.Password, desiredZipCode)
9
End Sub
El controlador de eventos DoWork es el lugar en el que se realiza la llamada al servicio Web de información meteorológica. Comenzará por llamar al método GetWeatherInfo2 expuesto por el servicio Web. Cuando invoque el método GetWeatherInfo2, se ejecuta en un contexto independiente para que no bloquee la interfaz de usuario de la aplicación. De lo contrario, parecería que la aplicación se habría bloqueado. El método GetWeatherInfo2 toma tres parámetros (username, password, ZIP code) y devuelve un resultado de WeatherInfo. ¿Cómo puede saber qué parámetros necesita y el valor devuelto? Puede estudiar el archivo WSDL para comprenderlo. Además, al agregar el servicio Web meteorológico, Visual Studio genera el IntelliSense apropiado.
5 Agregue el método startBackgroundTaskCurrentDay siguiente. 10
Private Sub startBackgroundTaskCurrentDay()
11
‘ Execute the Background Task only if it’s not already working
12
If Not (BackgroundCurrentWorker.IsBusy()) Then
13
Me.UseWaitCursor = True
14 15 16
BackgroundCurrentWorker.RunWorkerAsync(CInt(currentZipCode)) End If End Sub
El método startBackgroundTaskCurrentDay inicia el control BackgroundWorker. Lo primero que debe hacer es comprobar si BackgroundWorker ya está ocupado con una llamada anterior; si no lo hace, se producirá una excepción de tipo InvalidOperationException. Con sólo comprobar si BackgroundWorker está ocupado se garantiza que no se producirá esa excepción al llamar al método RunWorkerAsync. De hecho, ésa es la única excepción que puede producir este método. Con una rápida consulta de la documentación podrá confirmarlo.
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 183
183
21/12/05 11:39:32
Ejecutar el método RunWorkerAsync es enviar una solicitud para que se inicie una operación asincrónicamente, que inicia el evento DoWork. Se invoca un controlador de eventos con el siguiente formato de nombre: <variable de backgroundworker>_DoWork. En su caso, el método BackgroundCurrentWorker_ DoWork se ejecuta cuando se inicia el evento DoWork.
6 Cambie a la vista Diseño y seleccione BackgroundCurrentWorker en el área de notificación. 7 En la lista de eventos de la ventana Propiedades, haga doble clic en el evento RunWorkerCompleted. Agregue el código siguiente al controlador de eventos BackgroundCurrentWorker_
8 RunWorkerCompleted. 17
Private Sub BackgroundCurrentWorker_RunWorkerCompleted(ByVal sender As Object, ByVal
e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundCurrentWorker. RunWorkerCompleted 18
Dim weatherInfo As WeatherWebService.WeatherInfo
19 20
If (e.Error Is Nothing) Then
21
Me.UseWaitCursor = False
22
‘ This event fires when the DoWork event completes
23
weatherInfo = e.Result
24
WeatherInfoBindingSource.DataSource = weatherInfo
25
pbCurrentTemp.Load(“.\Images\” + _
26
weatherInfo.IconIndex.ToString() + “.gif”)
27
‘ If Web service returned weather info. then
28
‘ update notify icon
29
currentTemperature = Me.ExtractTemperature()
30 31
Me.CreateIcon(CInt(Math.Round(currentTemperature))) ElseIf (e.Error.Message.IndexOf(“503”) > 0) Then
32
MessageBox.Show( _
33
“Weather Web service is unavailable, retry later!” + _
34
vbLf + “Retry later using the Refresh Weather Info menu.”, _
35 36
“Weather Web service unavailable”) ElseIf (e.Error.Message.IndexOf(“timed out”) > 0) Then
37
MessageBox.Show( _
38
“Unable to retrieve the information in the time “ + _
39
“allowed” + vbLf + “Retry later using the Refresh “ + _
40 41 42 43
184
X1165138BDY.indb 184
“Weather Info menu.”, “Weather Web service Timeout”) Else MessageBox.Show( _ “Problem with Weather Web service! Error message:” + _
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:33
44
vbLf + e.Error.Message + vbLf + “Retry Later!”, _
45 46 47
“Weather Web service problem”) End If End Sub
Si el servicio Web estaba disponible y los parámetros eran correctos, el método invocado estará trabajando en un contexto distinto y de manera independiente. Cuando haya terminado el trabajo, se le notificará que el método ha finalizado porque se iniciará un evento RunWorkerCompleted.
Para recuperar los resultados debe tener un controlador de eventos con el nombre siguiente: <variable de backgroundworker>_RunWorkerCompleted. En este método se utiliza un parámetro del tipo RunWorkerCompletedEventArgs que contiene todo lo necesario para obtener los resultados. Si se produjo alguna excepción en el controlador de eventos DoWork, podrá recuperarla comprobando la propiedad Error, que es del tipo Excepción. Si no hay ningún error, deberá recuperar los resultados manualmente. Recuerde que la propiedad Resultados proporciona un elemento del tipo Object, que no le servirá de ayuda por sí mismo. Es necesario asignarle una variable del mismo tipo que el del método del servicio Web usado para devolver los resultados. En su caso, si observa la firma del método para GetWeatherInfo2, WeatherInfo es el tipo de los resultados producidos. Por lo tanto, debe declarar una variable de ese tipo. Si hace memoria, cuando arrastró el conjunto de datos WeatherInfo hasta la superficie del diseñador, creó automáticamente controles enlazados a datos para todos esos campos. Por tanto, sólo es necesario asignar esa variable WeatherInfo como origen de datos para el BindingSource y tendrá un vínculo entre lo recibido del servicio Web y los controles del formulario. Ahora también hay un cuadro de imagen en la superficie del diseñador que se utilizará para mostrar un icono que representa la previsión meteorológica actual. La información se devuelve como un índice: la propiedad IconIndex. Debe cargar un archivo de imagen desde el disco duro al cuadro de imagen que arrastró hasta la superficie del diseñador usando el índice como nombre de archivo. Lo que sucede a continuación es la creación del icono que aparecerá en el área de notificación para representar la temperatura actual.
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 185
185
21/12/05 11:39:36
PARA AGREGAR CÓDIGO SUBYACENTE COMPLEMENTARIO 1 Al principio de Main.vb, agregue las siguientes instrucciones Imports. 1
Imports System.Runtime.InteropServices
2
Imports System.Net
2 Al principio del código de Main.vb, agregue las líneas siguientes justo debajo de Public Class Main. 3
Public Shared currentTemperature As Double
4
Public Shared currentZipCode As String = My.Settings.CurrentZipCode
La primera línea de código se declara como un campo Public Shared denominado currentTemperature. Que el campo sea compartido significa que no pertenece a ninguna instancia específica de esa clase, pero que sólo hay uno para toda la clase. El código currentZipCode de la línea siguiente también es un campo compartido. Se inicializa a partir de la configuración de usuario, pero cambiará una vez relleno el formulario Options.
3 Agregue el siguiente método ExtractTemperature. 5
Private Function ExtractTemperature() As Double
6
If (lblTemperatureCurrent.Text.Length = 0) Then
7
Return Integer.MinValue
8
Else
9
‘ Returning only the number portion ignoring the
10
‘ the F
11
Return CDbl(lblTemperatureCurrent.Text.Substring(0, _
12 13 14
lblTemperatureCurrent.Text.IndexOf(“°”c))) End If End Function
El método ExtractTemperature extrae la temperatura de la etiqueta lblTemperatureCurrent y la devuelve como un número.
4 Agregue el siguiente método UpdateWeather. 15 16
186
X1165138BDY.indb 186
Public Sub UpdateWeather() Try
17
Me.tsmiRefresh.Enabled = False
18
Me.tsmiOptions.Enabled = False
19
Me.startBackgroundTaskCurrentDay()
20
Me.tsmiRefresh.Enabled = True
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:37
21
Me.tsmiOptions.Enabled = True
22
Catch webEx As WebException
23
MessageBox.Show( _
24
“Web service currently unavailable” + vbCrLf + _
25
“Retry later using the Refresh Weather Info menu.”, _
26
“Web Exception”)
27 28
Me.tsmiRefresh.Enabled = True Catch ex As Exception
29
MessageBox.Show( _
30
“Unknown problem. Error message:” + vbCrLf _
31
+ ex.Message + vbCrLf + _
32
“Please, retry later!”, “Unknown error”)
33 34 35
Me.tsmiRefresh.Enabled = True End Try End Sub
El método UpdateWeather inicia la actualización de la información meteorológica llamando al método startBackgroundTaskCurrentDay agregado anteriormente. La información meteorológica debe actualizarse cuando se cambia el código postal o al seleccionar la opción Refresh Weather Info del menú contextual del icono de notificación. El método UpdateWeather también habilita o deshabilita opciones del menú contextual según corresponda.
Completar la funcionalidad principal de Weather Tracker En las secciones siguientes agregará más código para obtener una versión funcional de la aplicación Weather Tracker. Esto incluye crear el icono, comprobar la conectividad y la disponibilidad del servicio Web meteorológico, y otras tareas. En la sección siguiente agregará código para crear y eliminar el icono del área de notificación. Puede revisar el código, pero no lo explicaremos con gran detalle porque GDI+ y la “interoperabilidad” COM son temas demasiado avanzados para el propósito de este libro. Sin embargo, puede consultar los comentarios incluidos en el código.
PARA AGREGAR, CREAR Y ELIMINAR CÓDIGO DEL ICONO DE NOTIFICACIÓN 1 En Main.vb, agregue el método CreateIcon siguiente. 1
Private Sub CreateIcon(ByVal temperature As Integer)
2
Dim displayString As String
3
Dim drawnIcon As Bitmap
4
Dim brushToDrawString As SolidBrush
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 187
187
21/12/05 11:39:38
5
Dim iconColor As Color
6
Dim iconGraphic As Graphics
7
Dim fontFamily As New FontFamily("Arial")
8
Dim IconFont As New Font( _
9
fontFamily, _
10
11, _
11
FontStyle.Regular, _
12
GraphicsUnit.Pixel)
13 14
If (temperature = Integer.MinValue) Then
15
displayString = "NA"
16 17
iconColor = Color.Red ElseIf (temperature > 100) Then
18
iconColor = Color.Red
19 20
displayString = (temperature - 100).ToString() ElseIf (temperature < 0) Then
21
iconColor = Color.Blue
22 23 24 25 26
displayString = (temperature * -1).ToString() Else iconColor = Color.Black displayString = temperature.ToString() End If
27 28
' Start by creating a new bitmap the size of an icon
29
drawnIcon = New Bitmap(16, 16)
30 31
'To draw the string we need a brush
32
brushToDrawString = New SolidBrush(iconColor)
33 34
' Creating a new graphic object so that we
35
' can call the drawstring method with our
36
' temperature or NA if there is no temp.
37
iconGraphic = Graphics.FromImage(drawnIcon)
38 39
' Now we are drawing the temperature string onto
40
' graphic and therefore on the bitmap.
41
iconGraphic.DrawString(displayString, IconFont, _
42
brushToDrawString, 0, 0)
43
188
X1165138BDY.indb 188
44
' We are getting ready to convert the bitmap into
45
' an icon and to set the notifyWeather.Icon with
46
' this newly created icon
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:40
47
Dim hIcon As IntPtr = drawnIcon.GetHicon()
48
Dim customMadeIcon As Icon = _
49 50
Drawing.Icon.FromHandle(hIcon) notifyWeather.Icon = customMadeIcon
51 52
'Now that we're done manipulating the new icon
53
' we need to destroy the unmanaged resource,
54
'otherwise we'll have a handle leak.
55 56
DestroyIcon(hIcon) End Sub
2 Agregue el siguiente método DestroyIcon. 57
‘ The GetIcon method generated an unmanaged handle
58
‘ that we need to take care of otherwise there
59
‘ will be a handle leak.
60
<DllImport(“user32.dll”, EntryPoint:=”DestroyIcon”)> _
61
Public Shared Function DestroyIcon( _
62 63
ByVal hIcon As IntPtr) As Boolean End Function
Cuando la aplicación comience a cargarse, comprobará que el usuario tiene una conexión a Internet válida y operativa. Para comprobarlo, realizará una solicitud HTTP simple al sitio Web de Microsoft. Si recibe un código HTTP OK (por ejemplo, 200) del servidor Web, significa que pudo tener acceso correctamente a la página Web solicitada. Si se inicia alguna excepción, se debe a que se ha encontrado algún problema o que el sitio Web Microsoft.com no está disponible, lo que es bastante poco frecuente. Si no se detecta ninguna conexión válida a Internet, se mostrará un mensaje. También comprobará que el servicio Web meteorológico está activo y en ejecución incluso antes de realizar una llamada al mismo. De nuevo, si el servicio Web no está activo, se mostrará un mensaje.
PARA AGREGAR CÓDIGO DE COMPROBACIÓN 1 En Main.vb, agregue el método VerifyConnectedToInternet siguiente. 1 2 3 4 5 6
Public Function VerifyConnectedToInternet() As Boolean Try Dim request As WebRequest = _ WebRequest.Create(“http://www.microsoft.com/”) Dim response As HttpWebResponse = _ CType(request.GetResponse(), HttpWebResponse)
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 189
189
21/12/05 11:39:42
7
If (response.StatusCode = HttpStatusCode.OK) Then
8
Return True
9
Else
10
Return False
11
End If
12
Catch ex As Exception
13
Return False
14
End Try
15
End Function
2 Agregue el siguiente método VerifyWebService. 16
Private Function VerifyWebService() As Boolean
17
Try
18
Dim request As WebRequest = WebRequest.Create( _
19
“http://www.ejse.com/WeatherService/Service.asmx?op=GetWeatherInfo2”)
20
Dim response As HttpWebResponse = _
21
CType(request.GetResponse, HttpWebResponse)
22
If (response.StatusCode = HttpStatusCode.OK) Then
23
Return True
24
Else
25
Return False
26
End If
27
Catch Ex As Exception
28
Return False
29
End Try
30
End Function
PARA TERMINAR EL FORMULARIO PRINCIPAL En la vista Diseño, seleccione el formulario Main. En la ventana Propiedades, vaya a la lista de even-
1 tos y haga doble clic en el evento Load.
2 Agregue el código siguiente al controlador de eventos Main_Load. 1
Private Sub Main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
Me.Load
190
X1165138BDY.indb 190
2
‘Changing the title of our main form with the
3
‘application name and the version
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:44
4
Me.Text = My.Application.Info.Title + “ “ + _
5
My.Application.Info.Version.ToString()
6 7
‘Creating temporarily the NA icon.
8
Me.CreateIcon(Integer.MinValue)
9 10
If Not VerifyConnectedToInternet() Then
11
MessageBox.Show( _
12
“Your computer doesn’t seem to be connected “ + _
13
“to the Internet or your Internet connection “ + _
14
“is not working properly!”)
15
Me.tsmiOptions.Enabled = False
16
Me.tsmiRefresh.Enabled = False
17
ElseIf Not VerifyWebService() Then
18
MessageBox.Show( _
19
“The web service is unavailable at the moment.” + vbLf + _
20
“Retry later using the Refresh Weather Info menu.”, _
21
“Web Service Not available”)
22
If (currentZipCode = String.Empty) Then
23
Me.tsmiRefresh.Enabled = False
24
Else
25
Me.tsmiRefresh.Enabled = True
26 27
End If Else
28
‘If we have a valid zip code then we can proceed
29
tsmiRefresh.Enabled = False
30 31 32
Me.UpdateWeather() End If End Sub
El controlador de eventos Main_Load es el punto de inicio de la aplicación Weather Tracker. En este código, la construcción My se utiliza para generar el título de la aplicación usando el nombre y el número de versión almacenado en los parámetros del ensamblado, de la misma manera que utiliza esta información el cuadro About. A continuación, se dibuja en el área de notificación el icono NA (no disponible) de color rojo, que permanecerá así hasta que el servicio Web devuelva resultados positivos, en cuyo caso la temperatura se representará como un icono. Si no se puede comprobar la existencia de conexión a Internet o que el servicio Web meteorológico está activo, se muestra un mensaje y se desactivan las opciones correspondientes del menú contextual del icono de notificación. Si todo funciona como se espera, se inicia el proceso de obtención de la información meteorológica. En la vista Diseño, seleccione cmsNotify en la bandeja de componentes. En la franja del menú
3 contextual, haga doble clic en la opción Refresh Weather Info.
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 191
191
21/12/05 11:39:46
Agregue el código siguiente al controlador de eventos tsmiRefresh_Click. Este código inicia la
4 actualización de los datos meteorológicos cuando se selecciona la opción Refresh Weather Info del
menú contextual. 33
Private Sub tsmiRefresh_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles tsmiRefresh.Click 34 35 36
Me.tsmiRefresh.Enabled = False Me.UpdateWeather() End Sub
En la vista Diseño, seleccione todos los controles del formulario Main. Establezca la propiedad
5 BorderStyle en None. (Puede que sea necesario hacer clic en el botón Propiedades de la parte supe-
rior de la ventana Propiedades para ver una lista de las propiedades.) Puede que se esté preguntando qué vínculo existe entre el índice y el nombre de archivo y quién crea ese vínculo. Se trata de una convención usada por muchos proveedores de información meteorológica a través de Internet; por tanto, es algo que funcionará con muchos servicios si más adelante desea agregar otros.
Se deben copiar todas las imágenes de previsión meteorológica desde el contenido complementario a la misma carpeta en la que se encuentra la aplicación Weather Tracker. Es necesario crear una carpeta llamada Images y copiar en ella todos los archivos de imagen *.gif de información meteorológica.
PARA AGREGAR ICONOS DE INFORMACIÓN METEOROLÓGICA En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto Weather
1 Tracker, seleccione Agregar y, a continuación, elija Nueva carpeta. Asigne a la carpeta el nombre Images. Usando el Explorador de Windows, copie las imágenes *.gif (1.gif a 47.gif) desde el contenido
2 complementario hasta la carpeta Images que acaba de crear. (La ubicación predeterminada es
\Mis documentos\Visual Studio 2005\Projects\Weather Tracker\Weather Tracker\Images.)
En el Explorador de soluciones, haga clic con el botón secundario del mouse en la carpeta Images,
3 seleccione Agregar y, a continuación, elija Elemento existente. Aparecerá el cuadro de diálogo
Agregar elemento existente.
4 En la lista desplegable Tipo de archivo, seleccione Archivos de imagen. Asegúrese de que está buscando en la carpeta Images y seleccione todos los archivos .gif. Para
5 seleccionar todos los archivos, puede presionar Ctrl+A o presionar la tecla Mayús y hacer clic. Cuando estén seleccionados todos los archivos .gif, haga clic en el botón Agregar para agregar las
6 imágenes al proyecto Weather Tracker. 192
X1165138BDY.indb 192
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:48
En el Explorador de soluciones, seleccione todos los archivos .gif. En primer lugar, seleccione 1.gif y, a
7 continuación, mientras mantiene presionada la tecla Mayús, seleccione el último archivo .gif.
Estando seleccionados todos los archivos .gif, en la ventana Propiedades, establezca la propiedad
8 Copiar en el directorio de resultados en Copiar siempre, como se puede ver en la Figura 9-10.
Asegúrese de que la propiedad Acción de generación está establecida en Contenido.
Probar la aplicación Weather Tracker Antes de ejecutar la aplicación Weather Tracker, compruebe que se cumple correctamente lo siguiente: ■ Dispone de conexión a Internet. ■ Se ha registrado en el servicio Web meteorológico gratuito. ■ Ha especificado su nombre de usuario y contraseña en la configuración de la aplicación. Ahora verá si funciona la aplicación. Presione F5 para ejecutar Weather Tracker. Si se produce algún error de generación, revise los errores de la ventana Lista de errores y corríjalos. Si es necesario, puede revisar la aplicación terminada en la carpeta Complete. Cuando ejecute la aplicación, debería aparecer la pantalla de bienvenida y las letras NA de color rojo en el área de notificación para indicar que no se ha recuperado la temperatura actual. Si el servicio Web meteorológico está disponible, debería ver la temperatura actual de la zona de Redmond (Washington) en el área de notificación. (Tenga paciencia. Dependiendo de la carga que soporte el servicio Web en ese momento, puede que haya que esperar unos momentos.) Cuando haga doble clic en la temperatura en el área de notificación, debería ver información meteorológica detallada, como la de la Figura 9-11. Haga clic con el botón secundario del mouse en la temperatura para abrir el menú contextual. Cuando haya terminado, salga de la aplicación.
Figura 9-10 Iconos de información meteorológica agregados al proyecto
Figura 9-11 Aplicación Weather Tracker mostrando información meteorológica a través de un servicio Web
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 193
193
21/12/05 11:39:50
Trabajar con el cuadro de diálogo de opciones Por el momento, el código postal está ajustado en un valor concreto, y eso no es lo que deseamos. Por tanto, usará el cuadro de diálogo Options para permitir al usuario escribir el código postal de la zona cuya meteorología desea controlar. El código postal se conservará en disco para que, cuando el usuario reinicie la aplicación, se restaurará al último código postal especificado. Conservar la configuración del usuario de una ejecución a otra proporcionará al usuario una mejor experiencia. También realizará algunas comprobaciones para asegurarse de que el código postal especificado por el usuario es correcto. Comprobará que el código postal es un número y que se encuentra dentro de un intervalo específico. Para mostrar el texto correspondiente si el código postal está vacío o fuera del intervalo especificado utilizará el control proveedor de errores. El control proveedor de errores se utiliza para presentar al usuario información sobre los errores. Por ejemplo, si el usuario escribe información no válida en un cuadro de texto, se muestra un icono de error junto al control para indicar que se ha producido un error. De forma predeterminada, el icono de error es un pequeño círculo rojo con un signo de exclamación. Cuando el usuario hace clic en el icono de error, se muestra una descripción del error para explicar al usuario el motivo del mismo. La manera en que se presenta el error se puede cambiar. Por ejemplo, puede usar otro icono de error o hacer que el icono se ilumine intermitentemente. Una vez que el usuario subsane el error, establecerá la descripción del error en una cadena vacía para que desaparezca el icono del error.
PARA VALIDAR LOS DATOS INTRODUCIDOS POR EL USUARIO 1 Abra el formulario Options en la vista Diseño. En el Cuadro de herramientas del grupo Componentes, agregue al formulario un control
2 ErrorProvider. Este control aparecerá en la bandeja de componentes. 3 Asigne al control el nombre ErrorProviderCurrentZipCode. 4 Haga doble clic en el botón OK. 5 Agregue el código siguiente al controlador de eventos btnOk_Click. 1
Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnOk.Click
194
X1165138BDY.indb 194
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:39:53
2
If ValidateZip() Then
3
UpdateCurrentInfo()
4
Me.DialogResult = Windows.Forms.DialogResult.OK
5
Me.Close()
6
End If
7
End Sub
6 Agregue el siguiente método ValidateZip. 8
Private Function ValidateZip() As Boolean
9
Dim zipNumber As Integer
10
Dim ValidZipCode As Boolean = True
11 12
If (txtCurrentZipCode.Text <> String.Empty) Then
13
zipNumber = CInt(txtCurrentZipCode.Text)
14
If Not ((zipNumber > 999) And (zipNumber <= 99950)) Then
15
ErrorProviderCurrentZipCode.SetError( _
16
Me.txtCurrentZipCode, _
17
"Invalid Zip Code, enter a valid US zip code " + _
18
"(Between 1000 and 99950)")
19
ValidZipCode = False
20
Else
21
ErrorProviderCurrentZipCode.SetError( _
22
Me.txtCurrentZipCode, "")
23 24 25
End If Else ErrorProviderCurrentZipCode.SetError( _
26
Me.txtCurrentZipCode, _
27
"Invalid Zip Code, enter a valid US zip code " + _
28 29 30 31 32
"(Between 1000 and 99950)") ValidZipCode = False End If Return ValidZipCode End Function
El método ValidateZip se asegura de que el cuadro de texto ZIP code no está vacío y comprueba que su valor es superior a 999 e inferior o igual a 99950. Si no es así, se presenta un error usando el método SetError del control proveedor de errores. En la llamada a SetError, se especifica el cuadro de texto txtCurrentZipCode, que indica que el error está asociado con el control txtCurrentZipCode. Si el código postal parece ser válido, el método ValidZip devuelve True; de lo contrario, devuelve False.
7 Vuelva al formulario Options en la vista Diseño. Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 195
195
21/12/05 11:39:55
8 Seleccione el cuadro de texto txtCurrentZipCode. 9 En la ventana Propiedades, haga clic en el icono de eventos (rayo amarillo) para mostrar la lista de eventos.
10 Haga doble clic en el evento KeyDown. 11 Agregue el código siguiente al controlador de eventos txtCurrentZipCode_KeyDown. 33
Private Sub txtCurrentZipCode_KeyDown(ByVal sender As System.Object, ByVal e As System.
Windows.Forms.KeyEventArgs) Handles txtCurrentZipCode.KeyDown 34
If e.KeyCode < Keys.D0 OrElse e.KeyCode > Keys.D9 Then
35
' Determine whether the keystroke is a number from the keypad.
36
If e.KeyCode < Keys.NumPad0 OrElse e.KeyCode > Keys.NumPad9 Then
37
' Determine whether the keystroke is a backspace.
38
If e.KeyCode <> Keys.Back Then
39
If e.KeyCode <> Keys.Enter Then
40
MessageBox.Show("Only numeric characters please!")
41
End If
42
End If
43 44 45
End If End If End Sub
Este código comprueba las teclas pulsadas por el usuario mientras escribe el código postal. Si la tecla pulsada no es un número, se muestra un cuadro de mensaje.
PARA GUARDAR LA CONFIGURACIÓN Y ACTUALIZAR LOS DATOS METEOROLÓGICOS 1 En Options.vb, agregue el método UpdateCurrentInfo siguiente. 1 2
Private Sub UpdateCurrentInfo() If (Me.txtCurrentZipCode.Text <> My.Settings.CurrentZipCode) Then
3
My.Settings.CurrentZipCode = Me.txtCurrentZipCode.Text
4
Main.currentZipCode = Me.txtCurrentZipCode.Text
5
My.Settings.Save()
6 7 8
196
X1165138BDY.indb 196
Main.UpdateWeather() End If End Sub
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:40:00
El método UpdateCurrrentInfo guarda en la configuración de la aplicación el código postal especificado por el usuario. También llama al método UpdateWeather del código del formulario Main para actualizar la información meteorológica correspondiente al nuevo código postal. Cuando el usuario hace clic en el botón OK del cuadro de diálogo Options se llama al método UpdateCurrentInfo.
Probar la aplicación Weather Tracker Ahora probaremos el cuadro de diálogo Options. Presione F5 para ejecutar Weather Tracker. Cuando haya desaparecido la pantalla de bienvenida, haga clic con el botón secundario del mouse en el icono del área de notificación y haga clic en Options. En el cuadro de diálogo Options, pruebe el código de validación del código postal. Por ejemplo, intente escribir caracteres alfabéticos y también un código postal no válido. La Figura 9-12 muestra el control proveedor de errores cuando se escribe un código postal no incluido en el intervalo.
Figura 9-12 Control proveedor de errores informando de un error
Cuando haya terminado, escriba un código postal válido y haga clic en OK. Espere unos momentos y abra el formulario Main. Debería ver los datos meteorológicos correspondientes al nuevo código postal. Puede estar orgulloso de sí mismo. Ha desarrollado una aplicación con muchas características complejas ¡y funciona! La aplicación Weather Tracker realiza las características básicas especificadas al principio del capítulo. Pero hay mucho espacio para incluir mejoras. De hecho, si examina la carpeta Chapter9 del contenido complementario, encontrará una versión ampliada. Si lo desea, examine esta versión ampliada y, quizás, recorra el código para ver cómo funciona. La versión ampliada incluye las características siguientes: ■ Muestra información meteorológica del día actual, así como la previsión para los tres días siguientes. ■ Incluye un cuadro de diálogo Options con muchos más controles y ajustes de configuración. Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 197
197
21/12/05 11:40:03
■ Usa un servicio Web de códigos postales, que permite al usuario seleccionar los códigos postales en una lista. ■ Utiliza un servicio Web de estados o provincias, para que el usuario pueda buscar el código postal correspondiente a la ciudad deseada. ■ Permite al usuario seleccionar la unidad usada para las temperaturas, grados Celsius o Fahrenheit. ■ Usa un control Timer para actualizar automáticamente la información meteorológica a intervalos regulares (por ejemplo, cada 10 minutos). El usuario puede cambiar el intervalo de actualización. Ahora es el momento de aprender a distribuir Weather Tracker o cualquier otra aplicación.
Y ahora, basta con usar ClickOnce Con .NET Framework 2.0 tiene a su disposición una nueva tecnología de implementación llamada ClickOnce. Se trata de una característica fantástica que permite personalizar cómo se implementa la herramienta en los equipos de otras personas. Es muy sencillo; casi tan fácil como implementar aplicaciones Web, lo que normalmente implica copiar archivos en un servidor. ClickOnce permite al desarrollador distribuir la aplicación mediante un mecanismo robusto y confiable. Puede realizar la implementación en servidores Web, servidores de archivos o en un CD/DVD. .NET Framework se puede agregar al paquete de distribución junto con SQL Server 2005 Express si es necesario para la aplicación. ClickOnce controla muy bien la posibilidad de deshacer la implementación y la desinstalación de las aplicaciones, y es muy sencillo distribuir nuevas actualizaciones. En su caso, realizará la implementación en un CD o DVD.
PARA EMPAQUETAR Y PUBLICAR LA APLICACIÓN Para tener la seguridad de que se incluyen en la instalación de todos los archivos *.gif que represen-
1 tan los iconos de situación meteorológica, asegúrese de que en el Explorador de soluciones la propie-
dad Acción de generación está establecida en Contenido para todas las imágenes *.gif. (Este proceso se explicó anteriormente en este capítulo.) Vuelva a generar la aplicación por completo haciendo clic en Generar Weather Tracker en el
2 menú Generar.
En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto Weather
3 Tracker y seleccione Propiedades para abrir el Diseñador de proyectos. 198
X1165138BDY.indb 198
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:40:06
4 Haga clic en la ficha Publicar. Debería ver una pantalla que presenta una apariencia como la de la Figura 9-13.
Figura 9-13 Ficha Publicar del Diseñador de proyectos
Haga clic en el botón Archivos de aplicación para ver la lista de archivos que se incluirán en la
5 instalación. Deberían aparecer todos los archivos *.gif. Haga clic en OK.
Ahora debe seleccionar los requisitos previos de la aplicación. Cuando el programa de instalación se ejecute en el equipo del usuario, comprobará la existencia de estos elementos. Si no están presentes, el programa de instalación los descargará de Microsoft.com o de cualquier otro origen que haya configurado. Haga clic en el botón Requisitos previos. En el cuadro de diálogo Requisitos previos, active las
6 casillas de verificación .NET Framework 2.0 y Windows Installer 3.1. Asegúrese de que está
seleccionada la opción Descargar los requisitos previos del sitio Web del proveedor de los componentes. Haga clic en Aceptar.
7 Haga clic en el botón Asistente para publicación. Aparece la primera página del asistente, como se puede ver en la figura 9-14, que le pide que especifique una ubicación donde publicar la aplicación.
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 199
199
21/12/05 11:40:08
Haga clic en el botón Examinar. En el cuadro de diálogo Abrir
8 sitio Web, seleccione Sistema de archivos en la parte izquierda
y luego seleccione una ubicación del equipo en la que desee publicar la aplicación. Sugiero que cree una nueva carpeta llamada Weather Tracker. Puede usar el icono Crear nueva carpeta de la esquina superior izquierda para crear una nueva carpeta. Cuando haya terminado, haga clic en el botón Abrir y, a continuación, en Siguiente. En la página siguiente, seleccione cómo instalará la aplicación el
9 usuario. Podría ser un sitio Web, un recurso compartido UNC de
una red, o un CD o DVD. Seleccione la opción Desde un CD-ROM o un DVD-ROM y haga clic en Siguiente.
10 La siguiente página pregunta si desea que la aplicación
compruebe si hay actualizaciones cada vez que se inicie. Puesto que está implementando en un CD o DVD, no es necesario que la aplicación compruebe si hay actualizaciones. Seleccione la opción predeterminada, La aplicación no buscará actualizaciones y haga clic en Siguiente para continuar. Figura 9-14 Primera página del Asistente para publicación
11 Haga clic en Finalizar para publicar la aplicación. Pasados unos momentos, se crearán archivos de instalación en la carpeta seleccionada anteriormente. Para probar la instalación, haga doble clic en el archivo Setup.exe. Durante la instalación, se agregará un acceso directo al menú Programas. Para desinstalar la aplicación, utilice el icono Agregar o quitar programas del Panel de control. Una vez que la instalación funcione como se espera, puede implementar la aplicación con sólo grabar los archivos de instalación en un CD o DVD. N OTA
N OTA
Cada vez que publique la aplicación, se incrementará el número de versión de la publicación (no el número de versión de la aplicación), es decir, pasará a ser la versión 1.0.0.0, 1.0.0.1, y así sucesivamente.
Durante la instalación, si recibe un mensaje de error informándole de que la validación de la aplicación no fue correcta o si recibe otro mensaje de error, pruebe a volver a publicar la aplicación e intentarlo de nuevo
ClickOnce posee más características, pero esta breve demostración puede servirle como introducción para crear sus propios programas de instalación. 200
X1165138BDY.indb 200
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:40:10
En resumen... ¡Enhorabuena por haber llegado hasta aquí! Espero que haya aprendido mucho y se haya divertido desarrollando aplicaciones con Visual Basic 2005 Express. Si le gusta lo que ha aprendido (y espero sinceramente que así sea), el aprendizaje sólo acaba de empezar. Hay mucho más que aprender y probar. Este libro ofrece un pequeño ejemplo de los tipos de aplicaciones que puede crear. Mi consejo es que siga pensando en proyectos divertidos que puede crear. Se sorprenderá de lo mucho que puede hacer. En mi opinión, desarrollar una aplicación proporciona un fuerte sentimiento de realización personal. La gente está orgullosa de las aplicaciones que crea, ¡y también lo estará usted! Si acaba creando una aplicación que le resulte de utilidad, es muy posible que también pueda serlo para otras personas. Al final, podría estar ayudando a esas personas facilitándoles el fruto de su esfuerzo. También puede unirse a proyectos de desarrollo para divertirse y ayudar a otras personas aprendiendo mucho mientras tanto. Visite GotDotNet Workspaces (http://www.gotdotnet.com/workspaces/) para obtener muestras de útiles ejemplos de proyectos. En septiembre de 2005, empecé a escribir una columna en MSDN dedicada a la programación por diversión. La columna se llama Coding4Fun y se encuentra en http://msdn.microsoft.com/coding4fun/. Parte de esta columna de MSDN está relacionada con mejorar la aplicación Weather Tracker que ha creado aquí, así que no olvide leerla de cuando en cuando. También puede visitar mi blog en la dirección http://blogs.msdn.com/ ppelland/. Llevo cierto tiempo sin actualizar mi blog porque he estado muy ocupado escribiendo este libro además de ayudando al lanzamiento de Visual Studio 2005, pero puede tener la seguridad de que lo actualizaré en un futuro próximo (normalmente publico comentarios como mínimo 4 ó 5 veces a la semana). Puede usar mi sitio como otro lugar desde el que mantenerse informado sobre material útil de la línea de productos Express. Hasta entonces, ¡feliz desarrollo!
Capítulo 9: Crear su propia aplicación de seguimiento meteorológico
X1165138BDY.indb 201
201
21/12/05 11:40:13
X1165138BDY.indb 202
21/12/05 11:40:16
Glosario A
aplicación de consola Aplicación que se ejecuta desde la línea de comandos sin interfaz de Windows ni de tipo Web aplicación para Windows Software que proporciona al usuario distintas funciones, como procesadores de textos, bases de datos u hojas de cálculo argumento Variable que se pasa a un subprograma
B
DLL (biblioteca de vínculos dinámicos) Formato de archivo de biblioteca de aplicación binaria en Microsoft Windows
E encapsulación Oculta los métodos privados de una clase u objeto; garantiza que no se pueda cambiar un objeto enlace de datos Forma fácil y transparente de leer o escribir un vínculo entre un control de un formulario de Windows Forms y un objeto de datos de la aplicación
barra de herramientas Una fila o sección de iconos en los que se puede hacer clic para activar distintas funciones de un programa
evento Mensaje de software que indica que ha ocurrido algo en el programa
base de datos Colección de datos almacenados en archivos que usan una estructura sistemática
FCL (bibliotecas de clases de Framework) Conjunto de código previamente escrito para las tareas de programación comunes
C
F
cadena Secuencia de caracteres o palabras
H
clase Unidad de creación básica de la programación orientada a objetos; define los campos, propiedades, métodos y eventos de un objeto
heredar Objetos creados que son tipos especializados de objetos existentes y pueden compartir y extender su comportamiento sin necesidad de volver a implementarlo
compilador Programa que traduce las instrucciones escritas en un lenguaje informático a otro lenguaje informático; los compiladores traducen el código fuente en algún tipo de lenguaje de código máquina que puede ejecutar un equipo
hipervínculo Referencia a otro documento o ubicación incluida en un documento de hipertexto
controles Componentes de una interfaz gráfica de usuario, como cuadros de texto o botones
D depurador Programa usado para buscar los defectos de otro programa
I icono Imagen de pequeño tamaño usada para representar un programa, un archivo u otro objeto IDE (Entorno de desarrollo integrado) Herramientas de software que ayudan a los desarrolladores a escribir programas
203
X1165138BDY.indb 203
21/12/05 11:40:17
instancia Manifestación de una clase interfaz de usuario (IU) Medio por el cual los usuarios interactúan con un programa informático
J Jscript Motor de secuencias de comandos activas; versión de JavaScript realizada por Microsoft
L lenguaje de programación Método de proporcionar instrucciones a un equipo informático
M menú contextual Menú que ofrece distintas opciones al usuario dependiendo del lugar desde donde se obtenga acceso al mismo método Procedimiento o función; fragmento de código asociado con una clase u objeto Microsoft .NET Plataforma de desarrollo de software desarrollada por Microsoft miembro de datos Datos encapsulados en una clase u objeto motor de ejecución Herramienta de desarrollo para ejecutar programas
O reemplazar Una clase u objeto puede reemplazar un comportamiento heredado
P pantalla de bienvenida Imagen que aparece en la pantalla mientras se carga un programa; proporciona información al usuario sobre el proceso de carga y desaparece una vez finalizado el proceso
204
X1165138BDY.indb 204
Perl Lenguaje de programación que admite la programación de procedimientos u orientada a objetos propiedad Cualidad de un objeto pruebas de caja negra Comprobación funcional de un programa para asegurarse de que funciona correctamente punto de interrupción Pausa o punto de detención de un programa insertado intencionalmente para facilitar la depuración Python Lenguaje de programación orientado a objetos
R reemplazar Una clase u objeto puede reemplazar un comportamiento heredado referencia Dirección del espacio de memoria usada para almacenar información acerca de una variable
S SQL Server 2005 Express Versión de SQL Server 2005 diseñada para ayudar a los desarrolladores a crear aplicaciones que proporciona una base de datos que es gratuita y fácil de usar Sugerencia en pantalla Información breve sensible al contexto proporcionada en el lugar donde está colocado el cursor
V variable Estructura que almacena información temporalmente para su uso posterior en un programa Visual Basic 2005 Express Versión simplificada de Visual Basic que proporciona a los usuarios, estudiantes y principiantes una herramienta de programación y desarrollo para Windows fácil de usar
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:40:20
Índice Símbolos
% (símbolo de porcentaje), carácter comodín de SQL, 157 ( (paréntesis izquierdo), 61 . (punto) con IntelliSense, 60–62 .config, archivos, 149 .mdf, extensión de archivo, 135 .NET Framework, 2–4, 66 .xsd, archivos, 149 + (signo más), para las propiedades, 49
A
acceso a las comunidades y página de inicio, 12 Acerca de, cuadro de diálogo, 88–91, 173–175 adaptadores de tablas, 154 administración de datos, 125–161 administrar datos, 125–161 administrar excepciones, 121 ADO.NET, 146–160 Agregar conexión, cuadro de diálogo, 136 agregar formularios Windows Forms, 82–87 alinear con líneas de ajuste, 58–59 Alternar puntos de interrupción, opción, 117 aplicación weather tracker (ejemplo), 163–203 actualizar datos de weather, 196
administración de la configuración de los usuarios, 191–201 completar funcionalidad básica, 187–198 crear entradas de configuración de usuario, 181–182 en servicios Web, 177–198 empaquetar, 198–200 guardar configuración, 196 implementación ClickOnce, 198–200 interfaz de usuario, crear, 165–177 pruebas, 193, 197–198 publicar, 198–200 aplicaciones abrir (pantallas de bienvenida), 82–88, 173–175 aplicaciones de consola frente a aplicaciones para Windows, 26–27 bibliotecas DLL, 110 depurar. Ver depuración detener, 170 personalizar iconos, 100–106 referencias, 111–112 seleccionar iconos, 85 títulos, cambiar, 85 aplicaciones administradas, definición, 3. Ver también aplicaciones aplicaciones de consola, 10 aplicaciones para Windows, 26–27
codificar (ejemplo), 37–41 obtener ayuda. Vea la Ayuda aplicaciones para Windows, 10 aplicaciones de consola, 26–27 generar (ejemplo), 41–44 archivos de base de datos locales, 152 áreas de notificación, 168–173 argumentos de métodos, 52 Asistente para la configuración de consultas de TableAdapter, 157 Asistente para la configuración de orígenes de datos, 135 ayuda acceso, 33 instalar, 20 menú Ayuda, agregar, 89 ayuda en pantalla acceso, 33 instalar, 20 menú Ayuda, agregar a aplicaciones, 89 Ayuda local, 35 Ayudante de excepciones, 119
B
bandeja de componentes, 153–154 barra de estado, IDE, 31 barra de herramientas principal, IDE, 30 barra de herramientas, IDE, 30 barra de menús, IDE, 30 barras de estado, 96–99
205
X1165138BDY.indb 205
21/12/05 11:40:23
barras de progreso, 96–99 bases de datos relacionales. Ver bases de datos bases de datos, 126–134 claves principales y claves externas, 132–133 crear, 135–138 crear relaciones entre tablas, 139–142 interactuar, 133–134 introducir datos de tablas, 143–146 normalización e integridad, 127–129 bibliotecas de clases, 10 botones, iconos para botones, 100–106 Buscar siguiente, botón, 70 Buscar, característica, 69 ByRef, palabra clave, 118 ByVal, palabra clave, 118
C
cadenas de conexión, 148 cambiar nombre de símbolos, 68–71 botones, 87 cambiar nombre, 68–71 botones, 87 capturar excepciones, 121 carácter de comodín, % (símbolo de porcentaje), SQL, 157 caracteres ASCII, 27 cardinalidad, 141 Carpeta de destino, de la instalación, 20 carpeta de instalación del software, 20 Centro de seguridad, 22 CheckBox, control, 73 claves externas, 130, 132–133 crear relaciones, 140–141 eliminar filas de tablas, 145 claves naturales, 131
206
X1165138BDY.indb 206
claves principales, 130–131 claves suplentes, 130 claves, base de datos, 130–133 código cómo leer, 38 fragmentos de código (IntelliSense), 11, 62–64 recorrer, 113 verificación, agregar a weather tracker, 189–190 código de verificación, agregar, 189–190 código subyacente, agregar complementario, 186–187 columnas, agregar a tablas de bases de datos, 137 ComboBox, control, 73 comentarios en el código, 77 compilar, 38 Común, ficha (IntelliSense), 62 Comunidad de Codezone, 36 conexiones de datos, 148 configuración predeterminada inteligente, 155 conjuntos de datos con tipo, 154 conjuntos de datos, crear, 148 consultas, 133–134 contenedores de barras de herramientas, 94–96 iconos de botones, 100–106 control Button, 72 control de cambios, 60 control de formulario principal, origen de datos, 167 controles comunes de Windows, lista de, 72–74 controles de explorador Web, 50
controles de formularios, 11. Ver también controles específicos por nombre agregar, 50 alinear con líneas de ajuste, 58–59 cambiar nombre, 68–71 comunes, lista de, 72–74 cuadros de diálogo, 88–93 enlace de datos, 147 orden z, 95 propiedades, 48. controles de Windows, lista de, 72–74 controles, 11. Ver también controles específicos por nombre agregar a formularios, 50 alinear con líneas de ajuste, 58–59 cambiar nombre, 68–71 comunes, lista de, 72–74 control de formulario principal, origen de datos, 167 cuadros de diálogo, 88–91, 88–93, 91–93, 173–175 cuadro de diálogo Acerca de, 88–91 enlace de datos, 147 orden z, 95 propiedades, 48. corrección automática de código, 64–66 corregir aplicaciones. Ver depuración corregir errores, 64–66 pruebas de caja negra, 93 validación de datos, 193 crear aplicaciones. Ver compilar Ctrl+Barra espaciadora (IntelliSense), 60 cuadro de herramientas, IDE, 30 cuadros de diálogo, 88–93 Acerca de, cuadro de diálogo, 88–91, 173–175
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:40:36
Navigate (Explorar), cuadro de diálogo, 91–93
D
depurar, 64–66, 110–123 pruebas de caja negra, 93 desencadenar eventos, 75–78 barras de progreso, 96–99 deshabilitar puntos de interrupción, 117 desinstalación de versiones anteriores del software, 17 detección de errores en tiempo real, 64–66 detección y corrección de errores, 64–66 pruebas de caja negra, 93 detectar errores, 64–66 pruebas de caja negra, 93 detener aplicaciones, 170 diagramas de base de datos, 139 Diseñador de proyectos, 84 Diseñador de tablas, 137–138 Diseñador de Windows Forms, 11, 42–43 diseñador. Ver Diseñador de Windows Forms DLL (bibliotecas de vínculos dinámicos), 110 documentación (ayuda) acceso, 33 instalar, 20 menú Ayuda, agregar a aplicaciones, 89 DoubleBuffered, propiedad, 167 duración de la pantalla de bienvenida, 88
Índice
X1165138BDY.indb 207
E
Editar y continuar, característica, 12, 116 ejecución simultánea, 16 ejecutar (aplicaciones), 53 eliminar filas de tablas, 145 eliminar puntos de interrupción, 117 empaquetar aplicaciones, 198–200 encapsulación, 52 enlace de datos, 147 errores de codificación, detección, 64–66 errores en la codificación, detectar, 64–66 estilo de diseño, 47–53 etiquetas inteligentes, 12, 64 etiquetas, alinear con líneas de ajuste, 58–59 eventos, desencadenar, 75–78 barras de progreso, 96–99 excepciones no administradas, 118 excepciones. Ver también depuración capturar, 121 no administradas, 118 Explorador de bases de datos, 136 explorador de enlace, 154 Explorador de soluciones, 30, 32–37 cambiar nombres de símbolos, 71 explorador Web, crear (ejemplo), 45–55 personalizar y adaptar, 81–107 explorador, crear (ejemplo), 45–55 personalizar y adaptar, 81–107
F
filas de tablas, eliminar, 145 filtrado de IntelliSense, 62 filtrar, IntelliSense, 62
formulario principal, weather tracker, finalizar, 190–192 formularios agregar, 82–87 áreas de notificación, 168–173 formularios modales, 91 principal, finalizar weather tracker, 190–192 formularios modales, 91 formularios Windows Forms, 82–87 fragmentos de código (IntelliSense), 11, 62–64 funcionalidad básica, aplicación weather tracker, 187–198
G
Generador de criterios de búsqueda, 159 guardar código, 38
H
Habilitar estilos visuales de XP, casilla de verificación, 86 herencia, 6–7
I
iconos áreas de notificación, 168–173 personalizar en las aplicaciones, 100–106 seleccionar para las aplicaciones, 85 iconos de weather, agregar, 192–193 IDE, 28–31 componentes, 30–38 personalizar, 39–41 identidad, especificaciones, 137, 144 image, propiedad (botones de franjas de herramientas), 101 implementación ClickOnce, 12
207
21/12/05 11:40:38
información de copyright, 85 Información de ensamblado..., botón, 85 información de weather, agregar al formulario, 179–181 iniciar aplicaciones, 82–88 Inmediato, ventana, 123 Inspección, ficha (depuración), 123 instalación de Visual Basic 2005 Express, 15–23 integridad de datos y normalización, 127–129 integridad, datos, 127–129, 144 claves externas, 132–133 IntelliSense, 11, 59–64 interacción del usuario (cuadros de diálogo), 88–93 Acerca de, cuadro de diálogo, 88–91, 173–175 Navigate (Explorar), cuadro de diálogo, 91–93 interacción, uso (cuadros de diálogo), 88–93 Acerca de, cuadro de diálogo, 88–91, 173–175 Navigate (Explorar), cuadro de diálogo, 91–93 interactuar con bases de datos relacionales, 133–134 Introducción, sección, 29 introducir datos en las tablas de bases de datos, 143–146 invocar fragmentos de código, 63 KeyUp, evento, 104
L
Label, control, 72 leer código, 38
208
X1165138BDY.indb 208
líneas de ajuste, 58–59 ListBox, control, 74
origen de enlace, 153 Orígenes de datos, ficha, 148
menús, crear, 92–93 MenuStrip, controles, 89 métodos reemplazados, 6 Microsoft Update, 22 miembros de datos, 52 Mostrar todos los archivos, botón, 70 MSDN Express Library instalar, 20. Ver también la Ayuda MSDN Feeds, sección, 30 MSDN Online ,35 multiproceso, 183–191 MVP (profesionales expertos), 37 My, construcción, 11 My, espacio de nombres, 66–68
página de inicio, IDE, 29 Panel de diseño de tabla, control, 83 pantallas de bienvenida, 82–88, 173–175 pasar por referencia/valor, 118 persistencia de la configuración de los usuarios, 191–201 Preguntas, sección, 37 Professional, valor (propiedad RenderMode), 97 programación orientada a objetos (OOP), 4–9, 69 propiedades de los controles de formularios, 48. Proyectos recientes, sección, 29 proyectos, 45 agregar servicios Web, 179 nuevas aplicaciones de consola, 31 nuevas aplicaciones para Windows, 41 pruebas de caja negra, 93 pruebas. Ver depuración publicar su aplicación, 198–200 punto (.) con IntelliSense, 60–62 puntos de interrupción, 112–123
M
N
Navigate (Explorar), cuadro de diálogo, 91–93 nombres de aplicaciones, 46 normalización, datos, 127–129 nuevos proyectos, iniciar aplicaciones de consola, 31 aplicaciones para Windows, 41 Null, 130 NumericUpDown, control, 74
O
OOP (programación orientada a objetos), 4–9, 69 Opciones, cuadro de diálogo (ejemplo), 175–178, 191–201 Orden alfabético, botón, 49 orden z, 95 organizar tablas, 141 origen de datos para el control del formulario principal, 167
P
R
RAD (desarrollo rápido de aplicaciones), 57 RadioButton, control, 73 recorrer el código, 113 reference.map, archivo, 180 referencias a aplicaciones, 111–112 relaciones entre tablas, crear, 139–142 RenderMode, propiedad, 97
Generar un programa con Microsoft Visual Basic 2005 Express
21/12/05 11:40:39
restricciones para claves externas, 132–133 retardo, pantalla de bienvenida, 88
S
SaveFileDialog, control, 76 segundo plano, trabajar en él, 183–191 Servicios Web XML, 11 servicios Web, 179–191 shutdown, método, 170 signo más (+), para las propiedades, 49 símbolo de porcentaje (%), carácter comodín de SQL, 157 software de protección contra programas espía, 16 SQL (lenguaje de consulta estructurado), 133–134
T
tablas, bases de datos, 126 claves principales y claves externas, 132–133 crear, 137–138 crear relaciones, 139–142 introducir datos en tablas, 143–146 normalización e integridad, 127–129 organizar, 141 realizar consultas, 133–134 Textbox, control, 72 texto simple, 27 tiempo de presentación de la pantalla de bienvenida, 88 titulares de Visual Basic Express, 29 titulares, 29 título de la aplicación, 85 Todo, ficha (IntelliSense), 62 ToolStrip, control, 75 ToolTip, control, 74 Transact-SQL, 157 T-SQL (Transact-SQL), 157 Índice
X1165138BDY.indb 209
U
Using, instrucciones, 117
V
validar datos, 193 Variables locales, ficha (depuración), 114–122 versiones CTP de Visual Studio 2005, 17 versiones Express de Visual Studio 2005, 9–12 instalar, 15–23 versiones preliminares de Visual Basic 2005 Express, 17 visibilidad, paneles, 96 vista Esquema del documento, 95 Visual Basic .NET, 4–9 Visual Basic 2005 Express, 9–12 instalar, 15–23 visualizadores del depurador, 12, 120 visualizadores, 120
W
Windows Update, 22
209
21/12/05 11:40:41
X1165138BDY.indb 210
21/12/05 11:40:42