Programación Con VisualBasic - NET Parte I Con Índice
Programación Con VisualBasic - NET Parte I Con Índice
Programación Con VisualBasic - NET Parte I Con Índice
Managua, Nicaragua
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
INDICE DE CONTENIDO
1 Introduccin a Visual Basic .Net .................................................................................. 5
1.1 1.2 1.3 1.4 1.5 1.6 1.7
1.7.1 1.7.2
Qu es .NET? ................................................................................................................... 5 Informacin general acerca de .NET Framework .............................................................. 5 Caractersticas de Common Language Runtime ................................................................ 7 Biblioteca de clases de .NET Framework .......................................................................... 7 Desarrollo de aplicaciones cliente...................................................................................... 8 Desarrollo de aplicaciones de servidor .............................................................................. 8 Entorno Integrado de Desarrollo...................................................................................... 10
Mejoras cosmticas ...................................................................................................................10 Aceleradores del desarrollo .......................................................................................................11
3.2 3.3
3.3.1 3.3.2 3.3.3
3.4
3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6
4.2 4.3
4.3.1
4.4
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN 4.4.1 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 Label..........................................................................................................................................24 TextBox.....................................................................................................................................25 Button........................................................................................................................................25 Checkbox ..................................................................................................................................26 Groupbox ..................................................................................................................................27 Panel..........................................................................................................................................27 Radiobutton ...............................................................................................................................27
Orden de tabulacin ......................................................................................................... 28 Validar el contenido del control....................................................................................... 29 Otros Controles ................................................................................................................ 29
LinkLabel ..................................................................................................................................29 Listbox ......................................................................................................................................30 CheckedListBox........................................................................................................................31 ComboBox ................................................................................................................................32 Picturebox .................................................................................................................................32 Timer.........................................................................................................................................33 TabControl ................................................................................................................................33 TrackBar....................................................................................................................................33 ProgressBar ...............................................................................................................................34 ListView ...............................................................................................................................34 TreeView ..............................................................................................................................36 DateTimePicker....................................................................................................................37 MonthCalendar.....................................................................................................................38 DomainUpDown ..................................................................................................................38 NumericUpDown .................................................................................................................39 RichTextBox ........................................................................................................................39 ImageList..............................................................................................................................40 HelpProvider ........................................................................................................................41 ToolTip.................................................................................................................................41 StatusBar ..............................................................................................................................42 NotifyIcon ............................................................................................................................43 ErrorProvider........................................................................................................................43
Creacin de controles en tiempo de ejecucin................................................................. 43 Coleccin de controles..................................................................................................... 44 Clase Form ....................................................................................................................... 44 Mens............................................................................................................................... 45
Agregar mens y elementos de men a formularios Windows Forms .................................45 Agregar funcionalidad a los elementos de men ..................................................................46
4.12
PGINA 2
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN 5.1.4 5.1.5 Tipos de datos de caracteres......................................................................................................50 Tipos de datos varios.................................................................................................................50
5.2
5.2.1 5.2.2
Variables .......................................................................................................................... 51
Declaracin de variables ...........................................................................................................52 Variables de tipo objecto...........................................................................................................52
5.3
5.3.1 5.3.2 5.3.3
5.4
5.4.1 5.4.2
5.5
5.5.1 5.5.2 5.5.3 5.5.4
Matrices ........................................................................................................................... 58
Matrices como objetos ..............................................................................................................58 Clase de matriz..........................................................................................................................58 Inicializar matrices ....................................................................................................................59 Cambiar el tamao de matrices .................................................................................................60
5.6
5.6.1 5.6.2 5.6.3 5.6.4 5.6.5
Operadores ....................................................................................................................... 60
Operadores aritmticos..............................................................................................................60 Operadores Concatenacin........................................................................................................61 Operadores relacionales o de comparacin ...............................................................................61 Operadores lgicos....................................................................................................................63 Combinacin eficaz de operadores............................................................................................64
5.7
5.7.1 5.7.2 5.7.3 5.7.4 5.7.5 5.7.6
Procedimientos............................................................................................................. 73
6.1
6.1.1 6.1.2
6.2
6.2.1 6.2.2
6.3
6.3.1 6.3.2 6.3.3
6.4
6.4.1 6.4.2
PGINA 3
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN 6.4.3 6.4.4 6.4.5 6.4.6 6.4.7 6.4.8 Argumentos variables y no variables ........................................................................................77 Mecanismo para pasar argumentos ...........................................................................................78 Argumentos opcionales .............................................................................................................79 Llamar a procedimientos con argumentos opcionales...............................................................79 Determinar si un argumento opcional est presente..................................................................79 Matrices de parmetros .............................................................................................................80
7.2
7.2.1 7.2.2
Manipulacin de fechas y horas. Estructura DateTime. .................................................. 84 Manipulacin de Intervalos de Tiempo. Estructura TimeSpan........................................ 85 Mtodos pblicos. ............................................................................................................ 85 Conversiones implcitas y explcitas................................................................................ 86
La palabra clave CType.............................................................................................................87
7.7
PGINA 4
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
El Internet ha entrado en una nueva fase. Primero, fue usado para desplegar las pginas Web estticas. Los negocios encontraron pronto que esto no los ayudaba significativamente. Luego, Internet evolucion al contenido dinmico y permiti el comercio electrnico. El siguiente paso es moverse hacia aplicaciones que se ejecutan completamente en Internet. Y Visual Basic .NET promueve el desarrollo de estas nuevas aplicaciones para Web. Los servicios Web permiten a los objetos ser localizados en cualquier parte y ser llamados desde cualquier aplicacin a travs de Internet (ya no hace falta tratar de configurar DCOM). Por supuesto, extender las aplicaciones a travs Internet implica un aumento en los riesgos de seguridad. Sin embargo, el Framework .NET tiene incorporadas muchas caractersticas de seguridad que le permitirn proteger sus aplicaciones. La seguridad de tipos es algo obligatorio que se revisa desde el tiempo de diseo. Esto impide al cdigo tener acceso a ubicaciones de la memoria a las que no tiene autorizacin. Esto tambin le permite definir cmo se tiene acceso a sus objetos. Antes de que el cdigo se ejecute, se verifica si es seguro a nivel de tipos. Si no es seguro a nivel de tipos, slo se ejecutar si sus polticas de seguridad lo permiten. Visual Basic tiene muchos cambios nuevos. En este captulo le daremos un vistazo de alto nivel a esos cambios arquitectnicos. Este vistazo le ayudar a profundizar en los detalles en los siguientes captulos teniendo una imagen global.
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Proporcionar un entorno de ejecucin de cdigo que reduzca lo mximo posible la implementacin de software y los conflictos de versiones. Ofrecer un entorno de ejecucin de cdigo que garantice la ejecucin segura del mismo, incluso del creado por terceras personas desconocidas o que no son de plena confianza. Proporcionar un entorno de ejecucin de cdigo que elimine los problemas de rendimiento de los entornos en los que se utilizan secuencias de comandos o intrpretes de comandos. Ofrecer al programador una experiencia coherente entre tipos de aplicaciones muy diferentes, como las basadas en Windows o en el Web. Basar toda la comunicacin en estndares del sector para asegurar que el cdigo de .NET Framework se puede integrar con otros tipos de cdigo. administradas y no administradas. En .NET Framework no slo se ofrecen varios hosts de motor de tiempo de ejecucin, sino que tambin se admite el desarrollo de estos hosts por parte de terceros. Por ejemplo, ASP.NET aloja el motor de tiempo de ejecucin para proporcionar un entorno de servidor escalable para el cdigo administrado. ASP.NET trabaja directamente con el motor de tiempo de ejecucin para habilitar aplicaciones de ASP.NET y servicios Web XML, que se tratan ms adelante en este tema. Internet Explorer es un ejemplo de aplicacin no administrada que aloja el motor de tiempo de ejecucin (en forma de una extensin de tipo MIME). Al usar Internet Explorer para alojar el motor de tiempo de ejecucin, puede incrustar componentes administrados o controles de Windows Forms en documentos HTML. Al alojar el motor de tiempo de ejecucin de esta manera se hace posible el uso de cdigo mvil administrado (similar a los controles de Microsoft ActiveX), pero con mejoras significativas que slo el cdigo administrado puede ofrecer, como la ejecucin con confianza parcial y el almacenamiento aislado de archivos seguros. En la ilustracin siguiente se muestra la relacin de Common Language Runtime y la biblioteca de clases con las aplicaciones y el sistema en su conjunto. En la ilustracin se representa igualmente cmo funciona el cdigo administrado dentro de una arquitectura mayor. .NET Framework en contexto
.NET Framework contiene dos componentes principales: Common Language Runtime y la biblioteca de clases de .NET Framework. Common Language Runtime es el fundamento de la tecnologa. El motor de tiempo de ejecucin se puede considerar como un agente que administra el cdigo en tiempo de ejecucin y proporciona servicios centrales, como la administracin de memoria, la administracin de subprocesos y la interaccin remota, al tiempo que aplica una seguridad estricta a los tipos y otras formas de especificacin del cdigo que garantizan su seguridad y solidez. De hecho, el concepto de administracin de cdigo es un principio bsico del motor de tiempo de ejecucin. El cdigo destinado al motor de tiempo de ejecucin se denomina cdigo administrado, a diferencia del resto de cdigo, que se conoce como cdigo no administrado. La biblioteca de clases, el otro componente principal de .NET Framework, es una completa coleccin orientada a objetos de tipos reutilizables que se pueden emplear para desarrollar aplicaciones que abarcan desde las tradicionales herramientas de interfaz grfica de usuario (GUI) o de lnea de comandos hasta las aplicaciones basadas en las innovaciones ms recientes proporcionadas por ASP.NET, como los formularios Web Forms y los servicios Web XML. .NET Framework puede alojarse en componentes no administrados que cargan Common Language Runtime en sus procesos e inician la ejecucin de cdigo administrado, con lo que se crea un entorno de software en el que se pueden utilizar caractersticas
PGINA 6
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN En las secciones siguientes se describen con ms detalle los componentes y caractersticas principales de .NET Framework. Adems, el motor de tiempo de ejecucin aumenta la productividad del programador. Por ejemplo, los programadores pueden crear aplicaciones en el lenguaje que prefieran y seguir sacando todo el provecho del motor de tiempo de ejecucin, la biblioteca de clases y los componentes escritos en otros lenguajes por otros colegas. El proveedor de un compilador puede elegir destinarlo al motor de tiempo de ejecucin. Los compiladores de lenguajes que se destinan a .NET Framework hacen que las caractersticas de .NET Framework estn disponibles para el cdigo existente escrito en dicho lenguaje, lo que facilita enormemente el proceso de migracin de las aplicaciones existentes. Aunque el motor de tiempo de ejecucin est diseado para el software del futuro, tambin es compatible con el software actual y el software antiguo. La interoperabilidad entre el cdigo administrado y no administrado permite que los programadores continen utilizando los componentes COM y las DLL que necesiten. El motor de tiempo de ejecucin est diseado para mejorar el rendimiento. Aunque Common Language Runtime proporciona muchos servicios estndar de motor de tiempo de ejecucin, el cdigo administrado nunca se interpreta. Una caracterstica denominada compilacin JIT (Just-In-Time) permite ejecutar todo el cdigo administrado en el lenguaje mquina nativo del sistema en el que se ejecuta. Mientras tanto, el administrador de memoria evita que la memoria se pueda fragmentar y aumenta la zona de referencia de la memoria para mejorar an ms el rendimiento. Por ltimo, el motor de tiempo de ejecucin se puede alojar en aplicaciones de servidor de gran rendimiento, como Microsoft SQL Server e IIS (Servicios de Internet Information Server). Esta infraestructura permite utilizar cdigo administrado para escribir lgica empresarial, al tiempo que se disfruta del superior rendimiento de los mejores servidores empresariales del sector que puedan alojar el motor de tiempo de ejecucin.
Common
Common Language Runtime administra la memoria, ejecucin de subprocesos, ejecucin de cdigo, comprobacin de la seguridad del cdigo, compilacin y dems servicios del sistema. Estas caractersticas son intrnsecas del cdigo administrado que se ejecuta en Common Language Runtime. Con respecto a la seguridad, los componentes administrados reciben grados de confianza diferentes, en funcin de una serie de factores entre los que se incluye su origen (como Internet, red empresarial o equipo local). Esto significa que un componente administrado puede ser capaz o no de realizar operaciones de acceso a archivos, operaciones de acceso al Registro y otras funciones delicadas, incluso si se est utilizando en la misma aplicacin activa. El motor de tiempo de ejecucin impone seguridad en el acceso al cdigo. Por ejemplo, los usuarios pueden confiar en que un archivo ejecutable incrustado en una pgina Web puede reproducir una animacin en la pantalla o entonar una cancin, pero no puede tener acceso a sus datos personales, sistema de archivos o red. Por ello, las caractersticas de seguridad del motor de tiempo de ejecucin permiten que el software legtimo implementado en Internet sea excepcionalmente variado. Adems, el motor de tiempo de ejecucin impone la solidez del cdigo mediante la implementacin de una infraestructura estricta de comprobacin de tipos y cdigo denominada CTS (Common Type System, Sistema de tipos comn). CTS garantiza que todo el cdigo administrado es autodescriptivo. Los diferentes compiladores de lenguajes de Microsoft y de terceros generan cdigo administrado que se ajusta a CTS. Esto significa que el cdigo administrado puede usar otros tipos e instancias administrados, al tiempo que se aplica inflexiblemente la fidelidad y seguridad de los tipos. Adems, el entorno administrado del motor de tiempo de ejecucin elimina muchos problemas de software comunes. Por ejemplo, el motor de tiempo de ejecucin controla automticamente la disposicin de los objetos, administra las referencias a stos y los libera cuando ya no se utilizan. Esta administracin automtica de la memoria soluciona los dos errores ms comunes de las aplicaciones: la prdida de memoria y las referencias no vlidas a la memoria.
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Adems, los componentes de terceros se pueden integrar sin dificultades con las clases de .NET Framework. Por ejemplo, las clases de coleccin de .NET Framework implementan un conjunto de interfaces que puede usar para desarrollar sus propias clases de coleccin. stas se combinarn fcilmente con las clases de .NET Framework. Como en cualquier biblioteca de clases orientada a objetos, los tipos de .NET Framework permiten realizar diversas tareas de programacin comunes, como son la administracin de cadenas, recopilacin de datos, conectividad de bases de datos y acceso a archivos. Adems de estas tareas habituales, la biblioteca de clases incluye tipos adecuados para diversos escenarios de desarrollo especializados. Por ejemplo, puede utilizar .NET Framework para desarrollar los siguientes tipos de aplicaciones y servicios: Aplicaciones de consola Aplicaciones GUI de Windows (Windows Forms) Aplicaciones de ASP.NET Servicios Web XML Servicios de Windows Windows Forms) implementado en Internet como una pgina Web. Esta aplicacin es muy parecida a otras aplicaciones cliente: se ejecuta de forma nativa, tiene acceso a los recursos locales e incluye elementos grficos. En el pasado, los programadores creaban esas aplicaciones mediante C o C++ en combinacin con MFC (Microsoft Foundation Classes) o con un entorno RAD (Rapid Application Development, desarrollo rpido de aplicaciones) como Microsoft Visual Basic. En .NET Framework se incorporan aspectos de estos productos, que siguen existiendo, en un nico entorno de desarrollo coherente que simplifica de forma espectacular el desarrollo de las aplicaciones cliente. Las clases de Windows Forms contenidas en .NET Framework estn diseadas para utilizarse en el desarrollo de GUI. Puede crear ventanas, botones, mens, barras de herramientas y dems elementos de pantalla fcilmente con la flexibilidad requerida para adaptarse a la evolucin de las necesidades de su empresa. Por ejemplo, .NET Framework proporciona propiedades simples para ajustar los atributos visuales asociados con los formularios. En determinadas circunstancias, el sistema operativo subyacente no permite cambiar estos atributos directamente y, entonces, .NET Framework vuelve a crear los formularios de forma automtica. sta es una de las mltiples maneras en que .NET Framework integra la interfaz del programador, con lo que la creacin de cdigo resulta ms sencilla y ms coherente. A diferencia de los controles ActiveX, los controles de Windows Forms tienen acceso con una confianza parcial al equipo de un usuario. Esto significa que el cdigo binario o que se ejecuta de forma nativa puede tener acceso a algunos de los recursos del sistema del usuario (como elementos de la GUI y acceso limitado a los archivos) sin tener acceso ni comprometer los dems recursos. Debido a la seguridad de acceso a cdigo, muchas aplicaciones que antes era necesario instalar en el sistema de un usuario, ahora se pueden implementar con seguridad a travs del Web. Las aplicaciones pueden implementar las caractersticas de una aplicacin local a la vez que se implementan como una pgina Web.
Por ejemplo, las clases de Windows Forms son un conjunto completo de tipos reutilizables que simplifican enormemente el desarrollo de interfaces GUI para Windows. Si escribe una aplicacin Web Form de ASP.NET, puede utilizar las clases de Web Forms.
de
aplicaciones
Las aplicaciones cliente constituyen lo ms parecido a una aplicacin de estilo tradicional en la programacin basada en Windows. En este tipo de aplicaciones se muestran ventanas o formularios en el escritorio, lo que permite al usuario realizar una tarea. Entre las aplicaciones cliente se incluyen los procesadores de texto y las hojas de clculo, adems de aplicaciones empresariales, como herramientas de entrada de datos, de informes, etctera. En las aplicaciones cliente se suelen emplear ventanas, mens, botones y otros elementos de la interfaz grfica de usuario, y suelen tener acceso a recursos locales como el sistema de archivos y a dispositivos perifricos como las impresoras. Otro tipo de aplicacin cliente es el tradicional control ActiveX (reemplazado ahora por el control de
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN que permite al cdigo administrado personalizado controlar el comportamiento del servidor. Este modelo proporciona todas las caractersticas de Common Language Runtime y la biblioteca de clases, adems de obtener el rendimiento y la escalabilidad del servidor host. En la ilustracin siguiente se muestra un esquema de red bsico donde se ejecuta cdigo administrado en diferentes entornos de servidor. Los servidores como IIS y SQL Server pueden realizar operaciones estndar mientras la lgica de la aplicacin se ejecuta en el cdigo administrado. Cdigo administrado en el servidor ya no es necesario que el cdigo comparta el mismo archivo con el texto HTTP (aunque puede seguir hacindolo, si lo prefiere). Las pginas de Web Forms se ejecutan en lenguaje mquina nativo porque, al igual que todas las aplicaciones administradas, sacan todo el provecho del motor de tiempo de ejecucin. En cambio, las pginas ASP no administradas siempre utilizan secuencias de comandos e intrpretes de comandos. El desarrollo de pginas de ASP.NET es ms rpido, ms funcional y ms sencillo que el desarrollo de pginas ASP no administradas, porque interactan con el motor de tiempo de ejecucin como una aplicacin administrada. .NET Framework proporciona tambin una coleccin de clases y herramientas para ayudar al desarrollo y uso de las aplicaciones de servicios Web XML. Los servicios Web XML se basan en estndares como SOAP (un protocolo de llamadas a procedimientos remotos), XML (un formato de datos extensible) y WSDL (el Lenguaje de descripcin de servicios Web). En .NET Framework se utilizan estos estndares para fomentar la interoperabilidad con soluciones que no son de Microsoft. Por ejemplo, la herramienta Lenguaje de descripcin de servicios Web incluida en .NET Framework SDK puede consultar un servicio Web XML publicado en el Web, analizar su descripcin de WSDL y producir cdigo fuente de C# o Visual Basic que la aplicacin puede utilizar para convertirse en cliente del servicio Web XML en cuestin. El cdigo fuente puede crear clases derivadas de las clases de la biblioteca de clases que controlan completamente la comunicacin subyacente mediante SOAP y anlisis de XML. Aunque puede utilizar la biblioteca de clases para usar los servicios Web XML directamente, la herramienta Lenguaje de descripcin de servicios Web y las dems herramientas incluidas en el SDK facilitan el trabajo de desarrollo con .NET Framework. Si desarrolla y publica su propio servicio Web XML, .NET Framework proporciona un conjunto de clases que cumplen todos los estndares de comunicacin subyacentes, como SOAP, WSDL y XML. El uso de esas clases le permite centrarse en la lgica del servicio, sin preocuparse de la infraestructura de comunicaciones que se requiere en el desarrollo de software distribuido. Por ltimo, al igual que las pginas de Web Forms en un entorno administrado, el servicio Web XML se ejecutar con la velocidad del lenguaje mquina nativo mediante la comunicacin escalable de IIS.
ASP.NET es el entorno host que permite a los programadores utilizar .NET Framework con las aplicaciones para el Web. Sin embargo, ASP.NET no es slo un host de motor de tiempo de ejecucin: se trata de una completa arquitectura para el desarrollo de sitios Web y objetos distribuidos en Internet mediante cdigo administrado. Los formularios Web Forms y los servicios Web XML utilizan IIS y ASP.NET como mecanismos de publicacin de las aplicaciones y ambos disponen de una coleccin de clases compatibles en .NET Framework. Los servicios Web XML, que constituyen una evolucin importante de la tecnologa basada en el Web, son componentes distribuidos de aplicaciones de servidor similares a los sitios Web comunes. Sin embargo, a diferencia de las aplicaciones basadas en el Web, los componentes de servicios Web XML no tienen interfaz de usuario y no estn orientados a exploradores como Internet Explorer y Netscape Navigator. En su lugar, los servicios Web XML consta de componentes de software reutilizables diseados para que los utilicen otras aplicaciones, como aplicaciones cliente tradicionales, aplicaciones basadas en el Web o, incluso, otros servicios Web XML. Como resultado, la tecnologa de servicios Web XML est desplazando rpidamente el desarrollo y la implementacin de aplicaciones hacia el entorno altamente distribuido de Internet. Si ha utilizado versiones anteriores de la tecnologa ASP, apreciar de inmediato las mejoras que ofrecen ASP.NET y Web Forms. Por ejemplo, puede desarrollar pginas de Web Forms en cualquier lenguaje compatible con .NET Framework. Adems,
PGINA 9
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
Se usa una disposicin de pestaas para mostrar los formularios MDI hijos dentro del entorno de desarrollo. Las ventanas de cdigo, las pantallas de ayuda, las ventanas de diseo de formularios y la pgina de inicio todas pueden ubicarse unas sobre otras y mostrarlas en un mismo panel. En vez de mostrar los controles en una cuadrcula, los controles se presentan de forma vertical, con una descripcin a lado de cada uno.
Beneficio cdigo en una ventana y depurando en otra, los desarrolladores puede simular de forma ms precisa la experiencia del usuario final. Aunque no se puede ver toda la informacin al mismo tiempo, al menos se tiene el beneficio de ocupar menos espacio real de pantalla.
Caja de herramientas
1.7.1
Mejoras cosmticas
Aunque se han hecho numerosos cambios al IDE, los que usted probablemente notar primero son los cambios cosmticos a la funcionalidad existente. Las versiones anteriores de Visual Basic han intentado establecer un equilibrio entre mantener el espacio disponible en la pantalla y permitir acceso a uno slo a tanta funcionalidad como sea posible. La tabla Cambios Cosmticos describe algunas de las formas en que estos mejoras se han implementado en VB.NET. Caracterstica Soporte para Descripcin Los Beneficio Ejecutando
el
En versiones anteriores de Visual Basic, tenas que sealar cada control para ver el nombre del control. (Esto era en especial frustrante cuando se desarrollaban controles personalizados, debido a que frecuentemente podan tener todos el mismo icono por defecto.=
PGINA 10
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Caracterstica Cdigo expandible Descripcin Usando una interfaz similar a los esquemas de Microsoft Word, ahora puede dividir el cdigo en secciones y ocultarlas o expandirlas con un simple clic. En lugar de tener que presionar F1, el IDE .NET ahora observa lo que se hace y presenta ayuda sensible al contexto en su propia ventana. Beneficio Los desarrolladores ahora pueden mantener una vista de alto nivel su cdigo, permitindoles migrar a travs de sus aplicaciones de forma ms eficiente. Se tiene disponible continuamente ayuda precisa para los desarrolladores en tiempo real. Caracterstica Explorador de soluciones Descripcin A diferencia del Explorador de proyectos de las versiones anteriores, el Explorador de soluciones presenta un repositorio para administrar recursos de desarrollo heterogneos. Beneficio equivocado. Ahora puede administrar componentes que no han sido creados con VB. (La habilidad de que VB trabaje mejor con otros lenguajes de programacin es una de las fuerzas impulsoras detrs de la iniciativa .NET.) Lo que antes se haca manualmente ahora puede hacerse usando arrastrar-y-pegar. Por ejemplo, si tiene un procedimiento almacenado en un servidor en SQL, puede directamente ubicar el procedimiento almacenado y hacer la actualizacin directamente en pantalla. Ahora puede hacer ms programando visualmente, reduciendo las posibilidades de error. Por ejemplo, si tiene un procedimiento almacenado en SQL Server, podra ubicar el procedimiento almacenado y arrastrarlo al PGINA 11
Ayuda
Explorador de servidores
1.7.2
Aceleradores desarrollo
del
Ahora puede ver los servidores disponibles para una aplicacin cliente/servidor o de Internet y directamente incorporar sus recursos en el cdigo.
Por supuesto, no todas las caractersticas nuevas del IDE son simplemente accesorias. Los desarrolladores de VB.NET tambin han proporcionado nuevas interfaces para usar la funcionalidad existente de forma ms eficaz. Las caractersticas presentadas en la Tabla Aceleradores de desarrollo tienen sus evidentes predecesores en VB 6.0, pero ahora permiten a los desarrolladores generar sus aplicaciones ms eficazmente. Caracterstica Diseador de mens Descripcin Usando el nuevo Diseador de mens, ahora puede editar mens directamente en el formulario al que est asociado el men. Beneficio Antes, tena que seleccionar el elemento Editor de men en el men Herramientas. Este cambio acelera el desarrollo y reduce los errores asociados con el uso de un formulario
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Caracterstica Descripcin Beneficio panel correspondiente. VB se encarga del resto de la codificacin de forma automtica. La Pgina de inicio proporciona una ubicacin central para establecer preferencias, leer noticias de productos, ponerse en contacto con otros programadores y obtener acceso a otro tipo de informacin que le permita mejorar su rendimiento con Visual Studio. estos contenedores le permite beneficiarse del entorno de desarrollo integrado de varias formas: Puede administrar la configuracin de la solucin en su totalidad o dividida en proyectos individuales Puede utilizar el Explorador de soluciones para controlar los detalles de la administracin de archivos al mismo tiempo que se centra en los elementos que constituyen la labor de programacin Puede agregar elementos tiles a varios proyectos de la solucin o a la solucin sin tener que hacer referencia a dichos elementos en cada proyecto Puede trabajar en diversos archivos, independientes de soluciones o proyectos
Pgina inicio
de
La pantalla de apertura que aparece cuando se inicia VB, ahora se genera usando DHTML.
soluciones
Las soluciones y los proyectos contienen elementos en forma de referencias, conexiones de datos, carpetas y archivos necesarios para crear la aplicacin. Un contenedor de tipo solucin puede contener varios proyectos y un contenedor de tipo proyecto normalmente contiene varios elementos. El uso de
PGINA 12
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Los elementos de la solucin son independientes del proyecto trabajar en archivos fuera del contexto de una solucin o proyecto. Presentacin jerrquica Una nica solucin y sus proyectos se muestran mediante una presentacin jerrquica, que proporciona informacin actualizada sobre el estado de la solucin, los proyectos y los elementos. Esto le permitir trabajar en varios proyectos al mismo tiempo. Los elementos de la carpeta Elementos de la solucin son archivos independientes del proyecto creados adems de los archivos de proyecto. Estos elementos representan archivos fundamentales para el desarrollo de los proyectos, pero no pertenecen a un proyecto en particular. Las hojas de estilos en cascada son elementos comunes de una solucin. Una sola hoja de estilos, por ejemplo, puede estandarizar el formato de numerosas pginas Web en varios proyectos. Cuando se cierra la solucin, la hoja de estilos permanece junto a las pginas Web. Cuando vuelve a abrirse la solucin, la hoja de estilos aparece debajo del nodo Elementos de la solucin del Explorador de soluciones. Los archivos de proyecto que aparezcan en el Explorador de soluciones debajo del proyecto al que se van a agregar estn incluidos en generaciones de proyectos o soluciones. No se generar ningn archivo de solucin que aparezca en la carpeta Elementos de la solucin. Puede utilizar control de cdigo fuente con los elementos de solucin y con proyectos y archivos de proyectos. Los elementos de una solucin son fundamentales para los proyectos de una solucin. Aunque se administren en forma de vnculos y pueda guardarlos en cualquier ubicacin, puede que desee guardarlos en el directorio de la solucin. El archivo de la solucin (.sln) recuerda y, lo que es ms importante, realiza un seguimiento de la ubicacin de los elementos de la solucin. Elementos y contenedores La administracin de los elementos que se muestran en el Explorador de soluciones se basa en la relacin del elemento con los contenedores del proyecto y de la solucin. Los elementos pueden relacionarse de las siguientes formas: Como elementos del proyecto, que aparecen debajo de una carpeta de proyecto en el Explorador de soluciones; por ejemplo, formularios, archivos de cdigo fuente y clases. Como elementos de la solucin, que aparecen en la carpeta Elementos de la solucin en el Explorador de soluciones. Como archivos varios, es decir, archivos que no estn asociados a ningn proyecto ni a ninguna solucin y que se muestran en la carpeta Archivos varios. El Explorador de soluciones es flexible en el sentido de que permite trabajar independientemente de un proyecto, en otras palabras, pueden modificarse y crearse archivos sin un proyecto. El Explorador de soluciones muestra este tipo de archivos en la carpeta Archivos varios. Tambin es posible trabajar con archivos asociados nicamente a la solucin. Estos elementos se mostrarn en la carpeta Elementos de la solucin.
PGINA 13
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN El Explorador de soluciones proporciona una vista organizada de los proyectos y sus archivos, as como acceso rpido a los comandos relativos a ellos. Normalmente, una barra de herramientas asociada a esta ventana ofrece los comandos que se utilizan con ms frecuencia con el elemento resaltado en la lista. Para tener acceso al Explorador de soluciones, seleccione Explorador de soluciones en el men Ver. Vista de rbol Esta vista estndar del Explorador de Soluciones presenta la solucin activa como un contenedor lgico de uno o ms proyectos y de los elementos asociados a ellos. Puede abrir elementos de proyecto para modificarlos, adems de llevar a cabo otras tareas de administracin directamente desde esta vista. Dado que diferentes tipos de proyectos harn que tambin los elementos se almacenen de manera diferente, la estructura de carpetas en el Explorador de soluciones no refleja necesariamente el almacenamiento fsico real de los elementos enumerados. Cuando la opcin "Realizar seguimiento del elemento activo en el Explorador de Soluciones" est seleccionada en el cuadro de dilogo Proyectos y soluciones, Entorno, Opciones, el Explorador de soluciones abre automticamente la carpeta del elemento activo, se desplaza hasta su nodo en vista de rbol y selecciona su nombre. El elemento seleccionado va cambiando conforme se trabaja con los distintos archivos en un proyecto o solucin o con los distintos componentes en un diseador de entorno de desarrollo integrado (IDE). Cuando esta opcin est desactivada, la seleccin en el Explorador de soluciones no cambia automticamente. Para asociar un archivo a una solucin, pero no a un proyecto especfico, agregue el archivo directamente a la solucin. Se mostrar entonces un nuevo nodo para el archivo agregado en la carpeta Elementos de la solucin. Otros archivos que an no se hayan asociado a la solucin activa o a alguno de sus proyectos se colocarn en la carpeta Archivos varios. stos suelen ser archivos abiertos o creados en su disco local mientras trabajaba con un proyecto. Nota Para mostrar todos los archivos de la carpeta Archivos varios, seleccione la opcin "Mostrar archivos varios en el Explorador de soluciones" en el cuadro de dilogo Documentos, Entorno, Opciones. Al seleccionar esta opcin, se activa tambin el comando Ver en el explorador del men Archivo, para mostrar documentos Web externos no incluidos en una aplicacin Web. Proyecto en negrita El proyecto que se muestra en negrita est seleccionado como Proyecto de inicio con fines de ejecucin y depuracin. Si hay ms de un proyecto de inicio, entonces se muestra en negrita el nodo de la solucin en la vista de rbol. Los proyectos de inicio se ejecutan automticamente al iniciar el depurador de Visual Studio. Aunque, de forma predeterminada, se considere proyecto inicial al primer proyecto creado en la solucin, es posible cambiar con facilidad los proyectos que debern ejecutarse primero al generar o ejecutar una solucin. Con la opcin "Generar proyectos de inicio y dependencias nicamente al ejecutar" del cuadro de dilogo Proyectos y soluciones, Entorno, Opciones seleccionada, slo se generarn el proyecto inicial y sus dependencias cuando se presione F5 o se seleccione el comando Iniciar en el men Depurar. O bien Cuando se presione CTRL + MAYS + b o se escoja el comando Generar solucin del men Ejecutar. Con esta opcin desactivada, cualquiera de estas acciones generar todos los proyectos, dependencias y archivos de soluciones. Solucin en negrita Cuando una solucin se muestra en negrita, indica que la opcin para ejecutar varios proyectos al iniciar el depurador est habilitada. Aunque la opcin est habilitada, no significa que se hayan seleccionado proyectos para ejecutarse; de forma predeterminada, estn configurados para que no se ejecuten. Comandos Puede abrir archivos, agregar y quitar elementos y realizar otras tareas de administracin. Cada plantilla de proyecto dispone de sus propias carpetas e iconos para indicar la naturaleza de los elementos del proyecto. Puede agregar carpetas y elementos que se ajusten a las necesidades de su proyecto de desarrollo individual. Los iconos pueden indicar diferente informacin acerca de un elemento. Por ejemplo, segn el proyecto, podra ver un icono que indica que el elemento es un archivo HTML o que un archivo est bajo el control del cdigo fuente. Adems, cada plantilla de proyecto determina qu herramientas y diseadores estn asociados a un tipo de archivo, as como los PGINA 14
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN comandos disponibles para la administracin de elementos. Seleccin Al seleccionar una solucin, proyecto o elemento en la lista, automticamente se actualizan los comandos disponibles. Por ejemplo, el comando Copiar Web slo est disponible en la barra de herramientas del Explorador de soluciones si hay una aplicacin Web seleccionada en la lista. Puede hacer doble clic en un archivo para mostrarlo en el diseador, herramienta o editor asociado al tipo de archivo. Para cambiar el editor predeterminado de algunos tipos de archivo, haga clic con el botn secundario en el archivo y, despus, elija Abrir con en el men contextual. Seleccin mltiple Es posible seleccionar varios elementos de un solo proyecto o varios elementos que abarquen varios proyectos. Seleccione varios elementos si desea llevar a cabo operaciones por lotes (con el fin de abrir simultneamente varios archivos para editar, por ejemplo) o cuando desee determinar o editar las propiedades que comparten dos o ms elementos de solucin. Al seleccionar varios elementos, los comandos disponibles representan la interseccin de los comandos comunes a todos los elementos seleccionados. Abre el cuadro de dilogo Copiar proyecto para copiar un proyecto Web completo o un conjunto de proyectos Web de un servidor Web a otro. Tambin puede duplicar un proyecto Web en el mismo servidor con un nombre nuevo. Este comando slo est disponible cuando hay un proyecto Web seleccionado. Abrir Abre el elemento seleccionado en el editor predeterminado para ese elemento, tal y como determina la plantilla de proyecto. El editor predeterminado de un tipo de archivo especfico se puede cambiar en el cuadro de dilogo Abrir con; haga clic con el botn secundario en el archivo, en el Explorador de soluciones, y seleccione Abrir con en el men contextual. Por ejemplo, puede cambiar el editor de recursos por el editor de texto para los archivos de recursos. Ver cdigo Abre el archivo seleccionado para editarlo en el Editor de cdigo. Actualizar Actualiza el estado de los elementos del proyecto o solucin que se haya seleccionado. Sugerencia: Si forma parte de un grupo de desarrollo que trabaje con archivos de proyectos compartidos que se hayan combinado y se mantengan bajo control de cdigo fuente, seleccione este botn para mostrar el estado actual de los archivos incluidos en su solucin activa. Propiedades Muestra la interfaz de usuario de propiedades correspondiente al elemento seleccionado en la vista de rbol.
la
barra
de
En la barra de herramientas del Explorador de soluciones slo aparecen los botones especficos del elemento seleccionado en la lista. Por ejemplo, si selecciona un archivo .asax, aparece un conjunto de botones en la barra de herramientas. Sin embargo, si se selecciona un archivo .asp, slo aparece el botn Propiedades. Debido a que el proyecto seleccionado determina los iconos de la barra de herramientas, esta lista es una representacin parcial de los que podra encontrar al trabajar en el Explorador de soluciones. Mostrar todos los archivos Muestra todos los elementos de proyecto, incluso los excluidos y los que normalmente estn ocultos. Inicialmente, el proyecto determina qu elementos estn ocultos. Copiar proyecto
PGINA 15
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN El elemento se ha movido, cambiado el nombre o eliminado del directorio del proyecto y no se encuentra. Protegido El elemento se ha incluido en una base de datos de control de cdigo fuente. Desprotegido en exclusiva El elemento est desprotegido desde una base de datos de control de cdigo fuente slo para un desarrollador. El resto de desarrolladores no puede obtener acceso al archivo. Desprotegido para uso compartido El elemento est desprotegido desde una base de datos de control de cdigo fuente para su uso compartido por parte de un equipo de desarrollo. Las diferentes versiones del elemento se combinarn en el momento de la proteccin. La Vista de clases se diferencia del Examinador de objetos en que est pensada para proyectos y smbolos de la solucin, ms que para componentes externos o a los que se haga referencia. Adems, muestra la estructura de anidacin real de los smbolos, a diferencia de la vista plana del Examinador de objetos. La Vista de clases se diferencia del Explorador de soluciones en que proporciona una vista lgica del cdigo, mientras que el explorador proporciona una vista fsica de la solucin centrada en los archivos. Nota No es necesario compilar los proyectos para ver sus smbolos en la Vista de clases, ya que segn se agregan o modifican smbolos a un proyecto, sta se actualiza dinmicamente para reflejar los cambios. Como resultado, no es necesario un comando de actualizacin. Para abrir la ventana Vista de clases, presione CTRL+MAYS+C o elija Vista de clases en el men Ver. Vista de clases - Ordenar por <vista> El botn Ordenar por le permite elegir una vista de los datos determinada. La Informacin sobre herramientas del botn muestra el nombre de la vista actual. Las opciones disponibles son: Ordenar alfabticamente: los smbolos se enumeran alfabticamente por sus nombres en orden ascendente (a - z). Ordenar por tipo: los smbolos del mismo tipo se enumeran juntos; todas las clases aparecen juntas, todas las interfaces aparecen juntas, etc. Este orden no se puede cambiar. Ordenar por acceso: los smbolos se enumeran segn su tipo de acceso, como public, protected o private. Agrupar por tipo: los smbolos del mismo tipo se agrupan bajo una carpeta virtual. Este orden no se puede cambiar.
Nueva carpeta Mtodo alternativo para organizar smbolos utilizados con frecuencia, este botn crea una nueva carpeta a la que puede arrastrar smbolos y otras carpetas y tener fcil acceso a ellos.
PGINA 16
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Iconos de la Vista de clases La Vista de clases muestra varios iconos, cada uno representa un tipo de smbolo diferente, como un espacio de nombres, una clase, una funcin o una variable. La siguiente tabla presenta los iconos que se muestran en la Vista de clases, con una descripcin de cada uno. Icono Descripcin Espacio de nombres Clase Interfaz Estructura Unin Enum TypeDef Mdulo Intrnseco Delegado Excepcin Mapa Global Mtodo o funcin Operador Propiedad Campo o variable Evento Constante Elemento de tipo enumerado Elemento de mapa Declaracin externa Macro Plantilla Desconocido o error programadores y obtener acceso a otro tipo de informacin que le permita mejorar su rendimiento con Visual Studio. Para ver la Pgina de inicio, seleccione Mostrar pgina de inicio en el men Ayuda. Determinados paneles, como los que figuran en la ficha Recursos en lnea, reciben actualizaciones peridicas a travs de Internet. El entorno de desarrollo integrado (IDE) descargar estas actualizaciones de forma automtica cada vez que seleccione uno de estos paneles estando conectado a Internet. Si no est conectado, el panel mostrar la ltima informacin recibida. Adems, el filtro actual de Ayuda seleccionar el contenido en lnea de modo que slo aparezca la informacin relevante. Nota Al cambiar un filtro de Ayuda en la Pgina de inicio, se cambia tambin el filtro aplicado a la documentacin de MSDN. A continuacin se describen cada una de las fichas de la Pgina de inicio.
3.3.1 Mi perfil.
Utilice esta ficha de la Pgina de inicio para establecer sus preferencias de trabajo en el entorno de desarrollo integrado (IDE). Para ver la Pgina de inicio, seleccione Mostrar pgina de inicio en el men Ayuda. Perfil Muestra los perfiles predeterminados que establecen automticamente las opciones Esquema de teclado, Diseo de ventana y Filtro de Ayuda. Si cambia una de las configuraciones predeterminadas una vez seleccionado un perfil predefinido, el nombre del perfil cambia a "(Personalizado)". Programador de Visual Studio: especifica la opcin Predeterminados de Visual Studio para Esquema de teclado, Diseo de ventana y Filtro de Ayuda. Programador de Visual Basic: especifica la opcin Visual Basic 6.0 para Esquema de teclado, Diseo de ventana y el Filtro de Ayuda de Visual Basic. Programador de Visual C++: especifica la opcin Visual C++ 6.0 para Esquema de teclado, Diseo de ventana y el Filtro de Ayuda de Visual C++. Programador de Visual InterDev: especifica la opcin Visual Basic 6.0 para Esquema de teclado, Predeterminados de Visual Studio para Diseo de ventana y ningn Filtro de Ayuda. PGINA 17
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Programador de macros de VS: especifica la opcin Predeterminados de Visual Studio para Esquema de teclado, Diseo de ventana y Filtro de Ayuda de las macros de Visual Studio. Programador de Visual C#: especifica la opcin Predeterminados de Visual Studio para Esquema de teclado, Diseo de ventana y el Filtro de Ayuda de Visual C#. Programador de Visual J#: especifica la opcin Predeterminados de Visual Studio para Esquema de teclado, Ventana de diseo de Visual Studio y el Filtro de Ayuda de Visual J#. Programador avanzado: especifica la opcin Predeterminados de Visual Studio para Esquema de teclado, Mnimo para Diseo de ventana y Filtro de Ayuda. Este perfil slo est disponible con Visual Studio Edicin acadmica. Esquema de teclado Muestra las posibles configuraciones de teclas de mtodo abreviado que puede utilizar. Tambin puede crear combinaciones de teclado personalizadas o cambiar combinaciones de teclado en el panel Teclado de las opciones Entorno del cuadro de dilogo Opciones. Diseo de ventana Muestra las posibles configuraciones de ventana predeterminadas. Una vez seleccionado un diseo, se pierde cualquier personalizacin realizada con anterioridad y se aplica el diseo seleccionado. Predeterminados de Visual Studio: este diseo oculta automticamente el Explorador de servidores y la ventana Cuadro de herramientas a lo largo del extremo izquierdo del IDE; el Explorador de soluciones y la Vista de clases se acoplan mediante fichas a la derecha, con la ventana Propiedades y la ventana Ayuda dinmica acopladas mediante fichas por debajo. Visual Basic 6: este diseo oculta automticamente el Explorador de servidores a lo largo del extremo izquierdo del IDE y acopla el Cuadro de herramientas a la izquierda; el Explorador de soluciones y la Vista de clases se acoplan mediante fichas a la derecha, con la ventana Propiedades y la ventana Ayuda dinmica acopladas mediante fichas por debajo. Visual C++ 6: este diseo coloca las ventanas Vista de recursos, Vista de clases y Explorador de soluciones acopladas mediante fichas a la izquierda; la ventana Propiedades y las ventanas Ayuda dinmica se acoplan mediante fichas por debajo, tambin a la izquierda. Estudiante: este diseo coloca las ventanas Vista de clases y Explorador de soluciones acopladas mediante fichas a la izquierda, con la ventana Ayuda dinmica debajo; y las ventanas Lista de tareas y Resultados acopladas mediante fichas en la parte inferior. Sin herramientas: este diseo slo muestra el espacio de edicin, sin ninguna ventana de herramientas abierta. Filtro de Ayuda Muestra los posibles filtros predeterminados para la documentacin de Microsoft Developer Network (MSDN) y la informacin mostrada en paneles de la Pgina de inicio. El filtro de Ayuda que seleccione no se aplicar al contenido mostrado en la ventana Ayuda dinmica. Tambin puede cambiar el filtro de Ayuda aplicado desde las ventanas Contenido, ndice y Buscar de MSDN. Mostrar Ayuda Especifica si se muestra la Ayuda dentro de una ventana en el IDE o en una ventana independiente disponible fuera del IDE. Al iniciar mostrar Especifica qu interfaz de usuario aparece al iniciar Visual Studio. Elija entre Mostrar pgina de inicio, Cargar ltima solucin cargada, Mostrar el cuadro de dilogo Abrir proyecto, Mostrar el cuadro de dilogo Nuevo proyecto y Mostrar el entorno vaco.
3.3.2 Proyectos.
Esta ficha de la Pgina de inicio proporciona una lista de soluciones recientes y le permite obtener acceso a cuadros de dilogo clave para crear proyectos nuevos y abrir proyectos existentes. Para ver la Pgina de inicio, seleccione Mostrar pgina de inicio en el men Ayuda. Nombre Muestra los nombres de las soluciones creadas anteriormente. Modificado Muestra el da y la hora en que se actualiz por ltima vez la solucin. Abrir proyecto Muestra el cuadro de dilogo Abrir proyecto. PGINA 18
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Nuevo proyecto Muestra el cuadro de dilogo Nuevo proyecto. Plantilla de proyecto Se utiliza para crear proyecto EXE estndar de Visual Basic 6.0. Plantilla clases Biblioteca de Clases o componentes reutilizables que puedan compartirse con otros proyectos. Este tipo de proyecto se considera que no tiene ventanas y no contendr una clase formulario de Windows Forms de Controles personalizados para utilizarlos en formularios Windows Forms Web ASP.NET
Plantilla de Aplicacin Aplicaciones Web ASP.NET Web de ASP.NET Mobile para PDA (asistentes personales digitales), telfonos mviles y otros dispositivos mviles. Plantilla ASP.NET Servicio Web Los servicios Web XML se crean con ASP.NET, funcionalidad que puede publicarse y recibir llamadas de aplicaciones externas de Controles personalizados para utilizarlos en pginas de formularios Web Forms Nota para Visual Basic Este tipo de proyecto es anlogo al proyecto de controles ActiveX de Visual Basic 6.0. de Aplicaciones comandos. de lnea de
de Aplicaciones de larga duracin que no tienen una interfaz de usuario. Las aplicaciones de servicios de Windows (antes denominadas "servicios NT") pueden supervisar elementos tales como el rendimiento del sistema.
Plantilla Nuevo proyecto Proyectos en blanco dentro de en carpeta existente una carpeta de aplicacin existente que sirven para utilizar archivos de aplicacin Aplicaciones autnomas un proyecto preexistente. Esta tradicionales para Windows o una plantilla puede utilizarse tanto con interfaz rica para una aplicacin proyectos locales como con Web distribuida. proyectos Web. Nota para Visual Basic Esto Proyecto vaco. La plantilla crea reemplaza las plantillas de Plantilla Proyecto vaco PGINA 19
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Plantilla de proyecto
para almacenar la informacin de Al igual que con cualquier otra aplicacin la aplicacin; las referencias, .NET, se pueden crear aplicaciones Windows en un archivos o componentes deben editor de texto, hacer llamadas a mtodos y clases agregarse manualmente. .NET, compilar la aplicacin en la lnea de comandos y distribuir el programa ejecutable resultante. Plantilla Proyecto Web Para usuarios avanzados que vaco desean empezar a programar en un Tambin puede utilizar Visual Studio .NET. entorno vaco y agregar su propia Cuando utilice Visual Studio .NET para crear funcionalidad basada en el aplicaciones Web, estar creando esencialmente la servidor. misma aplicacin que podra crear a mano. La ventaja de utilizar Visual Studio .NET es que proporciona herramientas que hacen que el desarrollo de 3.4.1 Creando Aplicaciones aplicaciones sea mucho ms rpido, sencillo y confiable. Entre estas herramientas se incluyen: Una parte importante de Visual Studio.NET es la capacidad de crear aplicaciones Windows que se ejecutan localmente en los equipos de los usuarios. Diseadores visuales para Visual Studio .NET permite crear la aplicacin con su formularios Windows Forms con interfaz de usuario mediante formularios Windows controles de arrastrar y colocar. Forms. Editores de cdigo inteligentes que incluyen finalizacin de instrucciones, comprobacin de 3.4.2 Aplicaciones Windows de Visual sintaxis y otras caractersticas de IntelliSense. Studio Compilacin y depuracin Una aplicacin Windows de Visual Studio se integradas. desarrolla en torno al Framework .NET, un amplio Utilidades de administracin de conjunto de clases que permiten programar proyectos para la creacin y aplicaciones sofisticadas. Por ejemplo, puede crear administracin de archivos de aplicaciones Windows mediante cualquier lenguaje de aplicacin, incluida la programacin .NET (Visual Basic, C#, Extensiones implementacin en servidores de administradas para C++ y muchos otros) y las intranet o Internet. utilidades de depuracin .NET. Si ya utiliz Visual Studio antes, este tipo de funciones le parecern familiares, porque son Las aplicaciones Windows creadas con clases similares a las disponibles en versiones anteriores de .NET proporcionan otros beneficios. Es posible Visual Basic y Visual C++. Visual Studio .NET las obtener acceso a los servicios del sistema operativo y ampla para ofrecer un entorno de primer nivel para beneficiarse de las ventajas que proporciona el programar aplicaciones Windows. entorno de ejecucin del usuario. Puede tener acceso a datos utilizando ADO.NET. GDI+ permite realizar funciones avanzadas de dibujado y pintado en los formularios. Las aplicaciones Windows pueden 3.4.4 Desarrollo de aplicaciones realizar llamadas a mtodos que se exponen a travs Windows de servicios Web XML, lo cual invita a aprovechar la El desarrollo de aplicaciones Windows con informacin y los recursos de procesamiento de Visual Studio puede tomar muchas formas diferentes. diferentes fuentes y socios. Se pueden crear aplicaciones de formularios Windows Forms y servicios Windows que aprovechen todas las posibilidades de .NET Framework, o utilizar Visual C++ para crear aplicaciones Win32.
PGINA 20
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
de
servicios
de
Si utiliza Microsoft Visual Studio .NET o Microsoft .NET Framework SDK, podr generar servicios fcilmente al crear una aplicacin que se instale como servicio. Este tipo de aplicacin se denomina Servicio de Windows. Con las funciones del marco de trabajo, es posible crear servicios, instalarlos, iniciarlos, detenerlos y controlar su comportamiento.
4 Controles Windows
de
formularios
Parmetros Prompt Requerido. Expresin de tipo String que se muestra como mensaje en el cuadro de dilogo. La longitud mxima de Prompt es de aproximadamente 1024 caracteres, segn el ancho de los caracteres utilizados. Si Prompt va a tener ms de una lnea, stas pueden separarse mediante un carcter de retorno de carro (Chr(13)), un carcter de avance de lnea (Chr(10)) o la combinacin retorno de carro-avance de lnea (Chr(13)) & (Chr(10)) entre cada lnea. Title Opcional. Expresin de tipo String que se muestra en la barra de ttulo del cuadro de dilogo. Si se omite Title, en la barra de ttulo aparecer el nombre de la aplicacin. DefaultResponse Opcional. Expresin de tipo String que se muestra en el cuadro de texto como respuesta predeterminada en caso de que no se suministre otra entrada. Si se omite DefaultResponse, el cuadro de texto se mostrar vaco. XPos Opcional. Expresin numrica que especifica, en twips, la distancia entre el borde izquierdo del cuadro de dilogo y el borde izquierdo de la pantalla. Si se omite XPos, el cuadro de dilogo quedar centrado horizontalmente. YPos Opcional. Expresin numrica que especifica, en twips, la distancia entre el borde superior del cuadro de dilogo y el borde superior de la pantalla. Si se omite YPos, el cuadro de dilogo se situar, en sentido vertical, a aproximadamente un tercio del alto total de la pantalla.
PGINA 21
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Comentarios: Si desea especificar ms que el primer argumento, deber utilizar la funcin InputBox en una expresin. Si omite alguno de los argumentos de posicin, deber conservar el correspondiente delimitador de coma. Ejemplo En este ejemplo se muestran distintas formas de utilizar la funcin InputBox para pedir al usuario que introduzca un valor. Si se omiten las posiciones x e y, el cuadro de dilogo quedar centrado automticamente respecto a ambos ejes. La variable MyValue contiene el valor introducido por el usuario al hacer clic en Aceptar o presionar la tecla ENTRAR. Si el usuario hace clic en Cancelar, se devolver una cadena de longitud cero.
Dim message, title, defaultValue As String Dim myValue As Object message = "Enter a value between 1 and 3" ' Set prompt. title = "InputBox Demo" ' Set title. DefaultValue = "1" ' Set default value. ' Display message, title, and default value. myValue = InputBox(message, title, defaultValue) ' Display dialog box at position 100, 100. myValue = InputBox(message, title, defaultValue, 100, 100)
carro (Chr(13)), un carcter de avance de lnea (Chr(10)) o la combinacin retorno de carro/avance de lnea (Chr(13)) & (Chr(10)) entre cada lnea. Buttons Opcional. Expresin numrica que corresponde a la suma de los valores que especifican el nmero y tipo de botones que se han de mostrar, el estilo de icono que se va a usar, la identificacin del botn predeterminado y la modalidad del cuadro de mensaje. Si se omite Buttons, el valor predeterminado ser cero. Title Opcional. Expresin de tipo String que se muestra en la barra de ttulo del cuadro de dilogo. Si se omite Title, en la barra de ttulo aparecer el nombre de la aplicacin. Configuracin En la siguiente tabla se incluyen los valores de enumeracin de MsgBoxStyle: Enumeracin OKOnly OKCancel Valor 0 1 2 3 4 5 16 32 48 64 0 256 Descripcin Muestra Aceptar. slo el botn botones
Muestra los botones Anular, Reintentar y Omitir. Muestra los botones S, No y Cancelar. Muestra los botones S y No. Muestra los botones Reintentar y Cancelar. Muestra el icono Mensaje crtico. Muestra el icono Consulta de advertencia. Muestra el icono Mensaje de advertencia. Muestra el icono Mensaje de informacin. El primer botn es el predeterminado. El segundo botn es el predeterminado. PGINA 22
Parmetros Prompt Requerido. Expresin de tipo String que se muestra como mensaje en el cuadro de dilogo. La longitud mxima de Prompt es de aproximadamente 1024 caracteres, segn el ancho de los caracteres utilizados. Si Prompt va a tener ms de una lnea, stas pueden separarse mediante un carcter de retorno de
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Enumeracin DefaultButton3 ApplicationModal Valor 512 0 Descripcin El tercer botn predeterminado. es Excepciones o errores el Tipo de excepcin el al ArgumentException de la Condicin Prompt no es una expresin String o Title no es vlido. El proceso no se est ejecutando en modo interactivo de usuario.
Aplicacin modal: usuario debe responder cuadro de mensaje antes continuar trabajando en aplicacin actual.
SystemModal
4096
Sistema modal: se suspenden todas las InvalidOperationException aplicaciones hasta que el usuario responda al cuadro de mensaje. Especifica la ventana del cuadro de mensaje como ventana de primer plano.
Uno o ms parmetros no son miembros las 524288 Texto alineado a la derecha.InvalidEnumArgumentException de enumeraciones 1048576 Especifica que el texto debe MsgBoxResult aparecer para ser ledo de o derecha a izquierda en los MsgBoxStyle. sistemas rabe y hebreo. Comentarios Si el cuadro de dilogo muestra un botn Cancel, presionar la tecla ESC tendr el mismo efecto que hacer clic en Cancel. Si el cuadro de dilogo contiene un botn Help, existe ayuda contextual para ese cuadro de dilogo en concreto. Sin embargo, no se devolver ningn valor hasta que se haga clic en uno de estos botones. Nota Si desea especificar ms que el primer argumento, deber utilizar la funcin MsgBox en una expresin. Si omite alguno de los argumentos de posicin, deber conservar el correspondiente delimitador de coma. Ejemplo: En este ejemplo se utiliza la funcin MsgBox para mostrar un mensaje de error crtico en un cuadro de dilogo con botones S y No. El botn No se considera la respuesta predeterminada. Todo ello se consigue combinando los valores de constante de MsgBox en una expresin numrica. En este caso, si se agrega 4 (la combinacin de botones S/No) y 16 (la ventana Mensaje crtico) y 256 (el segundo botn como botn predeterminado) se obtiene un total de 276. El valor que devuelve la funcin MsgBox depende del botn que elija el usuario: S devuelve un valor 6; No un valor 7.
Dim msg As String Dim title As String Dim style As MsgBoxStyle
65536
El primer grupo de valores (0 a 5) describe el nmero y tipo de botones mostrados en el cuadro de dilogo; el segundo grupo (16, 32, 48, 64) detalla el estilo de icono; el tercero (0, 256, 512) determina el botn predeterminado; el cuarto (0, 4096), la modalidad del cuadro de mensaje; y, por ltimo, el quinto grupo especifica si la ventana del cuadro de mensaje est en primer plano o no, as como la alineacin y la direccin que ha de tener el texto. A la hora de sumar nmeros para crear el valor final del argumento Buttons, se deber utilizar nicamente un nmero de cada grupo. Valores devueltos Valor OK Cancel Abort Retry Ignore Yes No 1 2 3 4 5 6 7
PGINA 23
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
Dim response As MsgBoxResult msg = "Do you want to continue?" ' Define message. style = MsgBoxStyle.DefaultButton2 Or _ MsgBoxStyle.Critical Or MsgBoxStyle.YesNo title = "MsgBox Demonstration" ' Define title. ' Display message. response = MsgBox(msg, style, title) If response = MsgBoxResult.Yes Then ' User chose Yes. ' Perform some action. Else ' Perform some other action. End If
3.
Nota Puede hacer doble clic en un control del Cuadro de herramientas para agregarlo al margen superior izquierdo del formulario con su tamao predeterminado.
en
el
Existe una gran variedad de controles que se puede insertar en los formularios Windows Forms, segn las necesidades de la aplicacin. La mayora de los formularios se disean mediante la adicin de controles a la superficie del formulario, para definir una interfaz de usuario. Un control es un componente de un formulario que se utiliza para mostrar informacin o aceptar los datos introducidos por el usuario. Para dibujar un control en un formulario 1. Abra el formulario. 2. En el Cuadro de herramientas, haga clic en el control que desee agregar al formulario. 3. En el formulario, haga clic en el punto en que desee que se encuentre la esquina superior izquierda del control y arrastre hasta donde desee que se encuentre la esquina inferior derecha del control. El control se agregar al formulario con la ubicacin y el tamao especificados. Cada control tiene definido un tamao predeterminado. Puede agregar un control al formulario con su tamao predeterminado arrastrndolo desde el Cuadro de herramientas al formulario. Para agregar un control a un formulario 1. Abra el formulario. 2. En el Cuadro de herramientas, haga clic en el control que desee y arrstrelo al formulario.
Para editar las propiedades de uno o ms controles 1. En el cuadro de dilogo, seleccione el control que desee modificar. Nota Si selecciona varios controles, slo ser posible modificar las propiedades que sean comunes a todos ellos. 2. En la ventana Propiedades, cambie las propiedades del control. Para deshacer los cambios de las propiedades de un control 1. Asegrese de que el control tiene el foco en el Editor de cuadros de dilogo. 2. Elija Deshacer en el men Edicin (si el foco no est en el control, este comando no estar disponible).
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN tiempo de ejecucin sobre el estado de una aplicacin. Por ejemplo, se puede agregar un control Label a un formulario para mostrar el estado de cada archivo cuando se procesa una lista de archivos. Label participa en el orden de tabulacin de un formulario, pero no recibe el foco (el siguiente control del orden de tabulacin recibe el enfoque). Por ejemplo, si la propiedad UseMnemonic est establecida en true y se especifica un carcter mnemotcnico (el primer carcter despus del smbolo &) en la propiedad Text del control, cuando el usuario presiona ALT + la tecla mnemotcnica, el foco se mueve hacia el siguiente control del orden de tabulacin. Esta caracterstica permite desplazarse por un formulario mediante el teclado. Adems de mostrar texto, el control Label puede mostrar asimismo una imagen mediante la propiedad Image, o una combinacin de las propiedades ImageIndex e ImageList. Nota Para que Label sea transparente, hay que establecer la propiedad BackColor a Color.Transparent. Para limitar la cantidad de texto escrito en un control TextBox, establezca la propiedad MaxLenght en un nmero de caracteres especfico. Los controles TextBox se pueden utilizar tambin para aceptar contraseas y otra informacin delicada. Es posible utilizar la propiedad PasswordChar para enmascarar caracteres escritos en una versin de una sola lnea del control. Para restringir que se escriba texto en un control TextBox, se puede crear un controlador de eventos para el evento KeyDown con el fin de validar cada carcter escrito en el control. Tambin se puede restringir toda entrada de datos en un control TextBox; para ello, establezca la propiedad ReadOnly en true. Nota La mayor parte de la funcionalidad del control TextBox se hereda de la clase TextBoxBase.
4.4.3 Button
El control Button de los formularios Windows Forms permite al usuario hacer clic en l para ejecutar una accin. Cuando se hace clic en el botn, da la sensacin de que se ha presionado y soltado. Cada vez que el usuario hace clic en un botn, se invoca al controlador del evento Click. El cdigo se ubica en el controlador del evento Click para ejecutar la accin deseada. El texto que se muestra en el botn se almacena en la propiedad Text. Si este texto supera el ancho del botn, se ajustar en la lnea siguiente. No obstante, si el control no dispone del alto suficiente, el texto aparecer cortado. La propiedad Text puede contener una tecla de acceso, que permite al usuario presionar la tecla ALT junto con la tecla de acceso para "hacer clic" en el control. La propiedad Font y la propiedad TextAlign controlan la apariencia del texto. El control Button puede mostrar tambin imgenes, por medio de las propiedades Image e ImageList. Se puede hacer clic en Button utilizando el mouse (ratn), la tecla ENTRAR o la BARRA ESPACIADORA si el botn tiene foco. Se establece la propiedad AcceptButton o CancelButton de un objeto Form para permitir a los usuarios hacer clic en un botn presionando ENTRAR o ESCAPE incluso si el botn no tiene foco. Esto proporciona al formulario el comportamiento de un cuadro de dilogo. Al mostrar un formulario mediante el mtodo ShowDialog, se puede utilizar la propiedad
4.4.2 TextBox
El control TextBox permite al usuario escribir texto en una aplicacin. Este control tiene funcionalidad adicional que no se encuentra en el control de cuadro de texto de Windows estndar, como el enmascaramiento de caracteres de contrasea y la edicin de mltiples lneas. Habitualmente, se utiliza un control TextBox para mostrar, o aceptar como entrada, una sola lnea de texto. Es posible utilizar las propiedades Multiline y ScrollBars para permitir que se muestren o escriban varias lneas de texto. Establezca las propiedades AcceptsTab y AcceptsReturn en true con el fin de permitir una mayor manipulacin de texto en un control TextBox multilnea. El texto que se muestra en el control se encuentra almacenado en la propiedad Text. De forma predeterminada, en un cuadro de texto se puede escribir 2048 caracteres como mximo. Si establece la propiedad MultiLine en true, podr escribir un mximo de 32 KB de texto. La propiedad Text puede establecerse en tiempo de diseo con la ventana Propiedades, en tiempo de ejecucin mediante cdigo o por medio de la introduccin de datos por el usuario en tiempo de ejecucin. El contenido actual de un cuadro de texto puede recuperarse en tiempo de ejecucin mediante la lectura de la propiedad Text.
PGINA 25
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN DialogResult de un botn para especificar el valor devuelto de ShowDialog. Nombre Descripcin Abort El valor devuelto por el cuadro de dilogo es Abort (suele enviarse desde un botn Anular). El valor devuelto por el cuadro de dilogo es Cancel (suele enviarse desde un botn Cancelar). El valor devuelto por el cuadro de dilogo es Ignore (suele enviarse desde un botn Omitir). El valor devuelto por el cuadro de dilogo es No (suele enviarse desde un botn No). El cuadro de dilogo devuelve Nothing. Esto significa que el cuadro de dilogo modal contina ejecutndose. El valor devuelto por el cuadro de dilogo es OK (suele enviarse desde un botn Aceptar). El valor devuelto por el cuadro de dilogo es Retry (suele enviarse desde un botn Reintentar). El valor devuelto por el cuadro de dilogo es Yes (suele enviarse desde un botn S). devueltos por la propiedad
4.4.4 Checkbox
El control CheckBox de los formularios Windows Forms indica si una condicin determinada est activada o desactivada. Se utiliza habitualmente para presentar al usuario una seleccin de tipo S/No o Verdadero/Falso. Puede utilizar grupos de casillas de verificacin para mostrar mltiples opciones entre las cuales el usuario puede elegir una o ms. El control casilla de verificacin es similar al control botn de opcin, puesto que los dos se utilizan para indicar una seleccin realizada por el usuario. Slo difieren en que en un grupo de botones de opcin no se puede seleccionar ms de un botn de opcin. Sin embargo, en un grupo de casillas de verificacin es posible seleccionar tantas casillas de verificacin como se desee. Puede conectar una casilla de verificacin a elementos de una base de datos mediante enlaces simples de datos. Tambin puede agrupar mltiples casillas de verificacin por medio del control GroupBox. Esto resulta til para mejorar la apariencia visual y para el diseo de la interfaz de usuario, puesto que permite mover juntos los controles agrupados por el diseador de formularios El control CheckBox tiene dos importantes propiedades: Checked y CheckState. La propiedad Checked devuelve true o false. Se utiliza la propiedad Checked para obtener o establecer el valor de un control de casilla de verificacin de dos estados. La propiedad CheckState devuelve CheckState.Checked o CheckState.Unchecked; o bien, si la propiedad ThreeState est definida como true, CheckState puede devolver tambin CheckState.Indeterminate. En el estado indeterminado, el cuadro se muestra atenuado para indicar que la opcin no est disponible. El control de la casilla de verificacin puede mostrar una imagen o texto o ambos. La propiedad Appearance determina si la casilla de verificacin aparece en su forma tpica o como un botn. Nota Si se establece la propiedad ThreeState en true, la propiedad Checked devuelve true para los estados activado o indeterminado. La propiedad FlatStyle determina el estilo y el aspecto del control. Si la propiedad FlatStyle se establece en FlatStyle.System, el sistema operativo del usuario determina la apariencia del control. Nota Cuando se establece la propiedad FlatStyle en FlatStyle.System, se omite la propiedad CheckAlign y se muestra el control con la alineacin PGINA 26
Cancel
Ignore
No None
OK.
Retry.
Yes.
Es posible cambiar la apariencia del botn. Por ejemplo, para darle un aspecto liso a una pgina Web, hay que establecer la propiedad FlatStyle en FlatStyle.Flat. La propiedad FlatStyle tambin puede establecerse en FlatStyle.Popup, y el botn presentar un aspecto liso hasta que el puntero del mouse pase sobre el mismo, con lo cual a partir de ese momento el botn adoptar la apariencia de un botn estndar de Windows. Nota: Si el control que tiene el foco acepta y procesa la accin de presionar la tecla ENTRAR, el control Button no lo procesa. Por ejemplo, si un control TextBox multilnea o cualquier otro botn tiene foco, dicho control procesa la accin de presionar la tecla ENTRAR en lugar del botn que representa la accin de Aceptar.
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN ContentAlignment.MiddleLeft o ContentAlignment.MiddleRight. Si se establece la propiedad CheckAlign en una de las alineaciones a la derecha, se muestra el control con la alineacin ContentAlignment.MiddleRight; de lo contrario, se muestra con la alineacin ContentAlignment.MiddleLeft. A continuacin se describe en qu consiste un estado indeterminado. Se puede partir de una casilla de verificacin que determina si el texto seleccionado en un control RichTextBox est en negrita. Al seleccionar texto se puede hacer clic en la casilla de verificacin para poner en negrita la seleccin. De igual forma, al seleccionar un poco de texto, la casilla muestra si el texto seleccionado est en negrita. Si ste contiene texto en negrita y normal, la casilla de verificacin tendr un estado indeterminado.
4.4.6 Panel
Los controles Panel de formularios Windows Forms se utilizan para proporcionar un agrupamiento identificable para otros controles. Normalmente, los paneles se utilizan para subdividir un formulario por funciones. Agrupar todas las opciones en un panel ofrece al usuario una pista visual lgica. En tiempo de diseo todos los controles se pueden mover fcilmente; cuando se mueve el control Panel, todos los controles que contiene se desplazan tambin. Se puede obtener acceso a los controles agrupados en un panel mediante su propiedad Controls. Los controles Panel y GroupBox son similares; sin embargo, el control Panel es el nico de los dos que puede tener barras de desplazamiento y el control GroupBox es el nico de los dos que muestra un ttulo. Panel es un control que contiene otros controles. Al igual que sucede con otros controles contenedores, como el control GroupBox, si la propiedad Enabled del control Panel est establecida en false, los controles contenidos dentro de Panel tambin se deshabilitarn. Para mostrar barras de desplazamiento, establezca la propiedad AutoScroll en true. Para personalizar la apariencia del panel, establezca las propiedades BackColor, BackgroundImage y BorderStyle. El control Panel se muestra de forma predeterminada sin bordes. La propiedad BorderStyle sirve para distinguir el rea del panel de otras reas del formulario, determina si el panel est rodeado por un borde invisible (None), una lnea simple (FixedSingle) o una lnea sombreada (Fixed3D). Debido a que el control Panel deriva de la clase ScrollableControl, se puede utilizar la propiedad AutoScroll para habilitar barras de desplazamiento en el control Panel. Cuando la propiedad AutoScroll est establecida en true, es posible desplazarse a cualquier control situado dentro de Panel, aunque fuera de su regin visible, con las barras de desplazamiento proporcionadas.
4.4.5 Groupbox
Los controles GroupBox de formularios Windows Forms se utilizan para proporcionar un agrupamiento identificable para otros controles. Normalmente, los cuadros de grupo se utilizan para subdividir un formulario por funciones. Por ejemplo, podra tener un formulario de pedido que especifique opciones de envo con un grupo lgico de controles RadioButton, como el servicio de transporte urgente que se va a utilizar. La agrupacin de todas las opciones en un cuadro de grupo ofrece al usuario una pista visual lgica. Adems, en tiempo de diseo es fcil mover todos los controles, ya que, al mover el control GroupBox, tambin se mueve todo su contenido. Los controles GroupBox y Panel son similares; sin embargo, el control GroupBox es el nico de los dos que muestra un ttulo y el control Panel es el nico de los dos que puede tener barras de desplazamiento. La propiedad Text define el ttulo del cuadro de grupo. GroupBox muestra un marco alrededor de un grupo de controles con o sin ttulo. Se pueden agregar controles a GroupBox mediante el mtodo Add de la propiedad Controls. Nota Solo se pueden seleccionar o recibir foco los controles que se incluyen en el control GroupBox. No puede seleccionarse ni recibir foco todo el control GroupBox.
4.4.7 Radiobutton
Los controles RadioButton de formularios Windows Forms presentan al usuario un conjunto de dos o ms opciones excluyentes entre s. Aunque puede parecer que los botones de opcin y las casillas de verificacin funcionan de forma parecida, existe una diferencia PGINA 27
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN importante: cuando un usuario selecciona un botn de opcin, no puede seleccionar ninguno de los otros botones de opcin del mismo grupo sin perder la seleccin de este botn. En cambio, es posible activar tantas casillas de verificacin como se desee. Al definir un grupo de botones de opcin, se indica al usuario que "tiene este conjunto de opciones entre las que puede elegir una y solamente una". Cuando se hace clic en un control RadioButton, su propiedad Checked se establece en true y se llama al controlador de eventos Click. El evento CheckedChanged se produce cuando cambia el valor de la propiedad Checked. Si la propiedad AutoCheck se establece en true (la opcin predeterminada), al seleccionar el botn de opcin se desactivarn automticamente los dems botones de opcin del grupo. Normalmente, esta propiedad slo se establece en false cuando se utiliza cdigo de validacin para comprobar que el botn de opcin seleccionado corresponde a una opcin vlida. El texto que se muestra dentro del control se establece con la propiedad Text, que puede contener teclas de acceso directo. Una tecla de acceso directo permite al usuario "hacer clic" en el control; para ello, debe presionar la tecla ALT junto con la tecla de acceso Si se establece la propiedad Appearance en Appearance.Button, el control RadioButton puede tener la apariencia de un botn de comando o botn alternar, que parece estar presionado cuando est seleccionado. Los botones de opcin pueden mostrar tambin imgenes mediante las propiedades Image e ImageList. Todos los controles RadioButton de un contenedor determinado, como Form, constituyen un grupo. Para crear varios grupos en un formulario, coloque cada grupo en su propio contenedor, como un control GroupBox o Panel. Nota En ocasiones, el botn de opcin se denomina botn de radio. 1. En el men Ver, elija Orden de tabulacin. Esto activa el modo de seleccin del orden de tabulacin en el formulario. En la esquina superior izquierda de cada control aparecer un nmero (que representa la propiedad TabIndex). 2. Haga clic secuencialmente en los controles para establecer el orden de tabulacin que desee. Nota La posicin de un control dentro del orden de tabulacin puede establecerse en cualquier valor mayor o igual a cero. Cuando existen duplicados, se evala el orden z de los dos controles y se coloca primero el control superior. El orden z es la disposicin visual en capas de los controles de un formulario a lo largo del eje z del formulario (profundidad). El orden z determina qu controles se encuentran por delante de otros controles. 3. Cuando termine, elija otra vez Orden de tabulacin en el men Ver para abandonar el modo de orden de tabulacin. Nota Los controles que no pueden tener el foco, as como los deshabilitados e invisibles, no tienen propiedad TabIndex y no se incluyen en el orden de tabulacin. Cuando el usuario presiona la tecla TABULADOR, estos controles se omiten. Tambin es posible establecer el orden de tabulacin en la ventana Propiedades, mediante la propiedad TabIndex. La propiedad TabIndex de un control determina su posicin dentro del orden de tabulacin. De forma predeterminada, para el primer control que se dibuja el valor de TabIndex es 0; para el segundo, el valor de TabIndex es 1 y as sucesivamente. Adems, como opcin predeterminada, los controles GroupBox tienen su propio valor TabIndex, que es un nmero entero. Un control GroupBox no puede tener por s mismo el foco en tiempo de ejecucin. Por tanto, cada control de un GroupBox tiene su propio valor TabIndex decimal, comenzando con .0. Naturalmente, conforme aumenta el valor TabIndex de un control GroupBox, los controles que contiene aumentarn en consecuencia. Si cambia el valor de TabIndex de 5 a 6, el valor de TabIndex del primer control de su grupos cambia automticamente a 6.0, etc. Finalmente, es posible omitir cualquier control del formulario en el orden de tabulacin. Habitualmente, al presionar sucesivamente la tecla TABULADOR en tiempo de ejecucin, se selecciona cada control en el orden de tabulacin. Al desactivar la propiedad TabStop, es posible hacer que un control se pase por alto en el orden de tabulacin del formulario.
PGINA 28
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Para quitar un control del orden de tabulacin Establezca la propiedad TabStop del control en false en la ventana Propiedades. Un control cuya propiedad TabStop se haya establecido en false contina manteniendo su posicin en el orden de tabulacin, aunque se omita al recorrer los controles con la tecla TABULADOR. Nota En tiempo de ejecucin, un grupo de botones de opcin tiene una sola tabulacin en tiempo de ejecucin. El botn seleccionado (es decir, el botn para el que el valor de Checked es true), tiene su propiedad TabStop establecida automticamente en true, mientras que los dems botones tienen su propiedad TabStop establecida en false. Sin embargo, en algunos casos, puede permitir al usuario cerrar el formulario independientemente de que los valores de los controles sean vlidos o no. Puede reemplazar la validacin y cerrar un formulario que contenga datos no vlidos creando un controlador para el evento Closing del formulario. En el evento, defina la propiedad Cancel como False. Esto obliga al formulario a cerrarse. Nota Si fuerza al formulario a cerrarse de esta manera, se pierde la informacin de los controles que no se haya guardado antes. Nota Los formularios modales no validan el contenido de los controles cuando se cierran. No obstante, puede utilizar la validacin de controles para bloquear el foco en un control, pero no tiene que preocuparse por el comportamiento relativo al cierre del formulario. Ejemplo: En este ejemplo se valida la escritura por parte del usuario de al menos ocho caracteres en un control TextBox.
Private Sub TextBox1_Validating(ByVal sender As Object, _ ByVal e As System.ComponentModel.CancelEventArgs) _ Handles TextBox1.Validating If TextBox1.Text.Length < 8 Then MessageBox.Show _ ("El valor introducido no es vlido;" _ & " debe tener al menos 8 caracteres.") e.Cancel = True End If End Sub
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN El uso ms simple del control LinkLabel es utilizarlo para mostrar un nico vnculo mediante la propiedad LinkArea, aunque tambin se pueden mostrar varios hipervnculos con la propiedad Links, que permite obtener acceso a una coleccin de vnculos. Asimismo, en la propiedad LinkData se pueden especificar datos de cada objeto Link individual. Cada hipervnculo puede realizar una tarea distinta dentro de una aplicacin. Por ejemplo, puede utilizar un hipervnculo para mostrar un sitio Web en Microsoft Internet Explorer o para cargar un archivo de registro asociado a una aplicacin. Cada hipervnculo que se muestra en el control LinkLabel es una instancia de la clase LinkLabel.Link. La clase LinkLabel.Link define informacin apariencia, estado y ubicacin del hipervnculo. Adems, la propiedad LinkData de la clase LinkLabel.Link permite asociar al hipervnculo informacin, como, por ejemplo, una direccin URL que se va a mostrar. Cuando un usuario hace clic en un hipervnculo del control, se provoca el evento LinkClicked y el objeto LinkLabel.Link que representa el hipervnculo en el que se hizo clic se pasa como parte del objeto LinkLabelLinkClickedEventArgs que se pasa como parmetro al controlador de eventos. Puede utilizar este objeto para obtener el objeto LinkLabel.Link asociado al hipervnculo en el que el usuario hizo clic. Todos los hipervnculos contenidos en el control LinkLabel se almacenan en la instancia de la clase LinkLabel.LinkCollection para el control. Existen dos maneras de agregar un hipervnculo al control LinkLabel. La forma ms rpida es especificar un objeto LinkArea y asignarlo a la propiedad LinkArea. De este modo, se puede especificar un solo hipervnculo en el texto del control. Para agregar varios hipervnculos, puede utilizar el mtodo Add de la clase LinkLabel.LinkCollection mediante el acceso a la coleccin a travs de la propiedad Links. Cuando se crea un control LinkLabel, se agrega a LinkLabel.LinkCollection un hipervnculo predeterminado que contiene todo el texto del control LinkLabel. Para reemplazar este vnculo predeterminado, especifique una nueva rea de vnculo con la propiedad LinkArea o especifique un vnculo con el mtodo Add de LinkLabel.LinkCollection. Tambin puede quitar el hipervnculo predeterminado utilizando el mtodo Remove de la clase LinkLabel.LinkCollection. LinkLabel proporciona varias propiedades que permiten definir la apariencia de los hipervnculos en el control. Las propiedades ActiveLinkColor, DisabledLinkColor, LinkColor y VisitedLinkColor definen los colores que se utilizan al mostrar un hipervnculo en distintos estados. La propiedad LinkBehavior define cmo se muestra el subrayado asociado a un hipervnculo.
4.7.2 Listbox
Un control ListBox de formularios Windows Forms muestra una lista de elementos de los cuales el usuario puede seleccionar uno o ms. Si el nmero total de elementos supera el nmero que se puede mostrar, se agrega automticamente una barra de desplazamiento al control ListBox. Cuando la propiedad MultiColumn se establece en true, el cuadro de lista muestra elementos en varias columnas y aparece una barra de desplazamiento horizontal. Cuando la propiedad MultiColumn se establece en false, el cuadro de lista muestra elementos en una nica columna y aparece una barra de desplazamiento vertical. Cuando ScrollAlwaysVisible se establece en true, la barra de desplazamiento aparece, independientemente del nmero de elementos. La propiedad SelectionMode determina cuntos elementos de la lista pueden seleccionarse a la vez. La propiedad SelectedIndex devuelve un valor entero que corresponde al primer elemento seleccionado en el cuadro de lista. Para cambiar mediante programacin el elemento seleccionado, cambie el valor SelectedIndex en el cdigo; el elemento correspondiente de la lista aparecer resaltado en el formulario Windows Forms. Si no se selecciona ningn elemento, el valor de SelectedIndex es -1. Si se selecciona el primer elemento de la lista, el valor SelectedIndex es 0. Cuando se seleccionan mltiples elementos, el valor SelectedIndex refleja el elemento seleccionado que aparece primero en la lista. La propiedad SelectedItem es similar a SelectedIndex, pero devuelve el elemento en s, habitualmente un valor de cadena. La propiedad Items.Count refleja el nmero de elementos de la lista. Su valor es siempre uno ms que el mayor valor posible para SelectedIndex, ya que SelectedIndex est basado en cero. Para agregar o eliminar elementos de un control ListBox, utilice los mtodos Items.Add, Items.Insert, Items.Clear o Items.Remove. Tambin puede agregar elementos a la lista mediante la propiedad Items en tiempo de diseo. Normalmente, Windows controla la tarea de dibujar los elementos que se van a mostrar en el control ListBox. Utilice la propiedad DrawMode y controle
PGINA 30
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN los eventos MeasureItem y DrawItem para poder reemplazar el dibujo automtico de Windows y dibujar los elementos por s mismo. Utilice controles ListBox dibujados por el propietario para mostrar elementos de alto variable, imgenes, un color o una fuente diferente para el texto de cada elemento de la lista. La propiedad HorizontalExtent as como los mtodos GetItemHeight y GetItemRectangle tambin proporcionan ayuda a la hora de dibujar elementos propios. Adems de la funcionalidad de presentacin y seleccin, ListBox tambin proporciona funciones que permiten agregar de manera eficaz elementos al control ListBox y buscar texto en los elementos de la lista. Los mtodos BeginUpdate y EndUpdate permiten agregar un gran nmero de elementos a ListBox sin tener que volver a dibujar el control cada vez que se agrega un elemento a la lista. Los mtodos FindString y FindStringExact permiten buscar un elemento de la lista que contenga una cadena de bsqueda especfica. Las propiedades Items, SelectedItems y SelectedIndices proporcionan acceso a las tres colecciones que ListBox utiliza. En la tabla siguiente se presentan las tres colecciones que ListBox utiliza y se indica su uso dentro del control. Clase de coleccin Uso dentro del cuadro de lista clase ListBox.ObjectCollection, puede usar tambin la propiedad DataSource de la clase ListControl.
4.7.3 CheckedListBox
El control CheckedListBox de los formularios Windows Forms complementa al control ListBox. Hace casi todo lo que puede hacer un cuadro de lista y, adems, puede mostrar una marca de verificacin junto a los elementos de la lista. Estos dos controles tambin se diferencian en que los cuadros de lista con marcas de verificacin slo admiten DrawMode.Normal y solamente pueden tener un elemento o ningn elemento seleccionado. Observe que un elemento seleccionado aparece resaltado en el formulario y que no es lo mismo que un elemento activado. En tiempo de ejecucin, se pueden agregar elementos a los cuadros de lista con marcas de verificacin mediante el Editor de la coleccin de cadenas, o bien se les pueden agregar elementos dinmicamente desde una coleccin, utilizando la propiedad Items. Este control presenta una lista de elementos por los que el usuario se puede desplazar mediante el teclado o la barra de desplazamiento situada a la derecha del control. El usuario puede colocar una marca de verificacin junto a uno o ms elementos, y puede explorar los elementos activados con CheckedListBox.CheckedItemCollection y CheckedListBox.CheckedIndexCollection. Para agregar objetos a la lista en tiempo de ejecucin, hay que asignar una matriz de referencias a objetos con el mtodo AddRange. De este modo la lista muestra el valor de cadena predeterminado para cada objeto. Es posible agregar elementos individuales a la lista con el mtodo Add. El objeto CheckedListBox admite tres estados a travs de la enumeracin CheckState: Checked, Indeterminate y Unchecked. Hay que establecer el estado de Indeterminate en el cdigo, ya que la interfaz de usuario de CheckedListBox no proporciona ningn mecanismo para ello. Si UseTabStops es true, CheckedListBox reconocer y extender los caracteres de tabulacin en el texto de un elemento, creando columnas. Sin embargo, las posiciones de tabulacin estn presentes y no pueden modificarse. La clase CheckedListBox admite las siguientes tres colecciones indizadas:
ListBox.ObjectCollecti Contiene todos los elementos on incluidos en el control ListBox. ListBox.SelectedObject Contiene una coleccin de los Collection elementos seleccionados, que constituye un subconjunto de los elementos incluidos en el control ListBox. ListBox.SelectedIndex Contiene una coleccin de los Collection ndices seleccionados, que constituye un subconjunto de los ndices de ListBox.ObjectCollection. Estos ndices especifican los elementos seleccionados. El mtodo Add de la clase ListBox.ObjectCollection permite agregar elementos a ListBox. El mtodo Add puede aceptar cualquier objeto al agregar un miembro a ListBox. Cuando se agrega un objeto a ListBox, el control utiliza el texto definido en el mtodo ToString del objeto, a menos que se especifique un nombre de miembro del objeto en la propiedad DisplayMember. Para agregar elementos, adems del mtodo Add de la
PGINA 31
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Clase de coleccin Uso dentro del cuadro de lista con marcas de verificacin seleccionar una opcin de la lista o escribir texto nuevo. El comportamiento predeterminado de ComboBox es mostrar un campo de edicin con una lista desplegable oculta. La propiedad DropDownStyle determina el estilo que mostrar el cuadro combinado. Puede escribir un valor que permita lo siguiente: una lista desplegable simple, en que la lista se muestra siempre; un cuadro de lista desplegable, en que la parte de texto no se puede editar y es necesario presionar una flecha para ver el cuadro de lista desplegable; o el cuadro de lista desplegable predeterminado, en que la parte de texto se puede editar y el usuario debe presionar la tecla de flecha para ver la lista. Para que siempre se muestre una lista que el usuario no puede editar, use un control ListBox. Para agregar objetos a la lista en tiempo de ejecucin, asigne una matriz de referencias a objetos con el mtodo AddRange. De este modo la lista muestra el valor de cadena predeterminado para cada objeto. Puede agregar objetos individuales con el mtodo Add. Adems de la funcionalidad de presentacin y seleccin, el ComboBox proporciona tambin caractersticas que permiten agregar elementos al ComboBox y buscar texto en los elementos de la lista de forma eficaz. Los mtodos BeginUpdate y EndUpdate permiten agregar un gran nmero de elementos al ComboBox sin que el control se tenga que volver a dibujar cada vez que se agrega un elemento a la lista. Los mtodos FindString y FindStringExact permiten buscar un elemento de la lista que contenga una cadena de bsqueda concreta. Estas propiedades se pueden usar para administrar el elemento de la lista seleccionado actualmente, la propiedad Text para especificar la cadena que se muestra en el campo de edicin, la propiedad SelectedIndex para obtener o establecer el elemento actual y la propiedad SelectedItem para obtener o establecer una referencia al objeto. CheckedListBox.Obj Todos los elementos incluidos en el ectCollection control CheckedListBox. CheckedListBox.Che Elementos activados (incluidos los ckedItemCollection elementos con estado indeterminado), que es un subconjunto de los elementos que contiene el control CheckedListBox. CheckedListBox.Che ndices activados, que constituyen un ckedIndexCollection subconjunto de los ndices de la coleccin de elementos. Estos ndices especifican elementos que estn activados o en un estado indeterminado.
4.7.4 ComboBox
El control ComboBox de los formularios Windows Forms se utiliza para mostrar datos en un cuadro combinado desplegable. De forma predeterminada, el control ComboBox aparece en dos partes: la parte superior es un cuadro de texto que permite al usuario escribir un elemento de la lista. La segunda parte es un cuadro de lista que muestra una lista de elementos de entre los que el usuario puede seleccionar uno La propiedad SelectedIndex devuelve un valor entero que corresponde al elemento seleccionado en la lista. Para cambiar mediante programacin el elemento seleccionado, cambie el valor de SelectedIndex en el cdigo; el elemento correspondiente de la lista aparecer en la parte de cuadro de texto del cuadro combinado. Si no se selecciona ningn elemento, el valor de SelectedIndex es -1. Si se selecciona el primer elemento de la lista, el valor de SelectedIndex es 0. La propiedad SelectedItem es similar a SelectedIndex, pero devuelve el elemento en s, normalmente un valor de cadena. La propiedad Items.Count refleja el nmero de elementos de la lista. Su valor es siempre uno ms que el mayor valor posible para SelectedIndex, ya que SelectedIndex est basado en cero. Para agregar o eliminar elementos de un control ListBox, utilice los mtodos Items.Add, Items.Insert, Items.Clear o Items.Remove. Tambin puede agregar elementos a la lista mediante la propiedad Items del diseador. Un ComboBox muestra un campo de edicin combinado con un ListBox y permite al usuario
4.7.5 Picturebox
El control PictureBox de los formularios Windows Forms se utiliza para mostrar grficos en formato de mapa de bits, GIF, JPEG, metarchivo, icono o PNG. La imagen que se muestra est determinada por la propiedad Image, que se puede establecer en tiempo de ejecucin o en tiempo de diseo. La propiedad SizeMode controla el ajuste entre la imagen y el control. PGINA 32
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Establezca la propiedad Image con el objeto Image que desea mostrar, ya sea en tiempo de diseo o en tiempo de ejecucin. La propiedad SizeMode controla el recorte y la ubicacin de la imagen en el rea de presentacin; los valores de esta propiedad se establecen en la enumeracin PictureBoxSizeMode. Se puede cambiar el tamao del rea de presentacin en tiempo de ejecucin con la propiedad ClientSize. El control PictureBox se muestra de forma predeterminada sin bordes. Para proporcionar un borde estndar o tridimensional, utilice la propiedad BorderStyle con el fin de distinguir el cuadro de imagen del resto del formulario, incluso si no contiene ninguna imagen. Modos de recorte y ubicacin (Propiedad SizeMode, Enumeracin PictureBoxSizeMode) Nombre miembro AutoSize de Descripcin El tamao de PictureBox debe ajustarse igual que el tamao de la imagen que contiene. La imagen se muestra en el centro si PictureBox es ms grande que la imagen. Si la imagen es ms grande que PictureBox, la imagen se coloca en el centro de PictureBox y se recortan los bordes exteriores. La imagen se coloca en la esquina superior izquierda de PictureBox. La imagen se recorta si es ms grande que el objeto PictureBox que la contiene. Start y Stop, que activan y desactivan el temporizador. Cuando el temporizador est desactivado, se reinicia; no hay modo de hacer una pausa en un componente Timer. Al aplicar este temporizador, utilice el evento Tick para realizar una operacin de sondeo o para mostrar una pantalla de inicio durante un perodo de tiempo determinado. Siempre que la propiedad Enabled se establece en true y la propiedad Interval es mayor que cero, el evento Tick se provoca en los intervalos especificados en la propiedad Interval.
4.7.7 TabControl
El control TabControl de formularios Windows Forms muestra mltiples fichas, similares a los divisores de un cuaderno o a las etiquetas de las carpetas de un archivador. Las fichas pueden contener imgenes y otros controles. Puede utilizar el control de fichas para crear cuadros de dilogo con varias pginas como los que suelen aparecer en el sistema operativo Windows, por ejemplo, en el control Pantalla del panel de control. La propiedad ms importante de TabControl es TabPages, que contiene las fichas individuales. Cada ficha individual es un objeto TabPage. Cuando se hace clic en una ficha, se produce el evento Click correspondiente al objeto TabPage.
CenterImage
Normal
4.7.8 TrackBar
El control TrackBar de formularios Windows Forms (tambin denominado en ocasiones control "deslizante") se utiliza para desplazarse por grandes volmenes de informacin o para ajustar visualmente una configuracin numrica. El control TrackBar tiene dos partes: el control de posicin, tambin conocido como control deslizante, y las marcas de paso. El control de posicin es la parte que puede ajustarse. Su posicin corresponde a la propiedad Value. Las marcas de paso son indicadores visuales espaciados a intervalos regulares. La barra de seguimiento se desplaza en los incrementos que se especifiquen y puede alinearse horizontal o verticalmente. Por ejemplo, se puede usar la barra de seguimiento para controlar la velocidad de intermitencia del cursor o la velocidad del mouse (ratn) en un sistema.
StretchImage La imagen situada dentro de PictureBox se estira o encoge para ajustarse al tamao de PictureBox.
4.7.6 Timer
El componente Timer de formularios Windows Forms produce un evento a intervalos regulares. Este componente est diseado para un entorno de formularios Windows. La longitud de los intervalos est definida por la propiedad Interval, cuyo valor se expresa en milisegundos. Cuando el componente est habilitado, el evento Tick se produce a cada intervalo. Aqu es donde se agrega el cdigo que se va a ejecutar. Los mtodos ms importantes del componente Timer son
PGINA 33
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Las propiedades principales del control TrackBar son Value, TickFrequency, Minimum y Maximum. TickFrequency es el espaciado de las marcas de paso. Minimum y Maximum son los valores mnimo y mximo que se pueden representar en la barra de seguimiento. Otras dos propiedades importantes son SmallChange y LargeChange. El valor de la propiedad SmallChange es el nmero de posiciones que se desplaza el control de posicin en respuesta a la accin de presionar la tecla FLECHA DERECHA o FLECHA IZQUIERDA. El valor de la propiedad LargeChange es el nmero de posiciones que se desplaza el control de posicin en respuesta a la accin de presionar la tecla RE PG o AV PG, o en respuesta a la accin de hacer clic con el mouse en la barra de seguimiento a ambos lados del control de posicin. TrackBar es un control desplazable similar al control ScrollBar. Para configurar los intervalos entre los que se desplaza el valor de la propiedad Value de una barra de seguimiento, establezca la propiedad Minimum para especificar el extremo inferior del intervalo y la propiedad Maximum para especificar el extremo superior del intervalo. La propiedad LargeChange define el incremento que se debe sumar o restar de la propiedad Value al hacer clic en uno de los lados del control deslizante. La barra de seguimiento se puede mostrar horizontal o verticalmente. Este control se puede utilizar para entrar los datos numricos obtenidos mediante la propiedad Value. Estos datos numricos se pueden mostrar en un control o se pueden utilizar en el cdigo. progreso realizado para completar la operacin. Puesto que la barra mostrada en el control se compone de bloques, el valor que muestra el control ProgressBar slo se aproxima al valor actual de la propiedad Value. En funcin del tamao del control ProgressBar, la propiedad Value determina cundo se muestra el siguiente bloque. El modo ms comn de actualizar el valor de progreso actual es escribir cdigo para definir la propiedad Value. En el ejemplo de la carga de un archivo grande, podra establecer el mximo en el tamao del archivo en kilobytes. Por ejemplo, si se establece la propiedad Maximum en 100, la propiedad Minimum en 10 y la propiedad Value en 50, se mostrarn 5 rectngulos, que es la mitad de los que se pueden mostrar. Sin embargo, hay otros modos de modificar el valor que muestra el control ProgressBar, aparte de definir la propiedad Value directamente. La propiedad Step se puede utilizar para especificar un valor con el que incrementar la propiedad Value. As, al llamar al mtodo PerformStep, se incrementar el valor. Para variar el valor de incremento, puede utilizar el mtodo Increment y especificar un valor con el que incrementar la propiedad Value. Otro control que informa grficamente al usuario acerca de una accin actual es el control StatusBar.
4.7.10 ListView
El control ListView de formularios Windows Forms muestra una lista de elementos con iconos. Puede utilizar una vista de lista para crear una interfaz de usuario similar al panel derecho del Explorador de Windows. El control tiene cuatro modos de vista: LargeIcon, SmallIcon, List y Details. El modo LargeIcon muestra iconos grandes junto al texto de los elementos; si el control es lo suficientemente grande, los elementos aparecen en varias columnas. El modo SmallIcon es igual, pero muestra iconos pequeos. El modo List muestra iconos pequeos, pero siempre en una sola columna. El modo Details muestra los elementos en varias columnas. El modo de vista est determinado por la propiedad View. Todos los modos de vista pueden mostrar imgenes procedentes de listas de imgenes. La propiedad clave del control ListView es Items, que contiene los elementos que muestra el control. La propiedad SelectedItems contiene la coleccin de elementos seleccionados actualmente en el control. Si la propiedad MultiSelect se establece en true, el PGINA 34
4.7.9 ProgressBar
El control ProgressBar de formularios Windows Forms indica el progreso de un proceso, mediante la presentacin de un nmero adecuado de rectngulos dispuestos en una barra horizontal. Cuando se completa el proceso, la barra se llena. Las barras de progreso suelen utilizarse para dar al usuario una idea de cunto deber esperar hasta que se complete un proceso largo como, por ejemplo, la carga de un archivo grande. Las propiedades ms importantes del control ProgressBar son Value, Minimum y Maximum. Las propiedades Minimum y Maximum establecen los valores mximo y mnimo que puede mostrar la barra de progreso. La propiedad Value representa el
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN usuario puede seleccionar varios elementos, por ejemplo, para arrastrar y colocar en otro control varios elementos a la vez. Si la propiedad CheckBoxes se establece en true, el control ListView puede mostrar casillas de verificacin junto a los elementos. La propiedad Activation determina el tipo de accin que debe realizar el usuario para activar los elementos de la lista: las opciones son Standard, OneClick y TwoClick. La activacin OneClick necesita un solo clic para activar el elemento. La activacin TwoClick requiere que el usuario haga doble clic para activar el elemento; un solo clic cambia el color del texto del elemento. La activacin Standard requiere que el usuario haga doble clic para activar un elemento, pero la apariencia del elemento no cambia. Un control ListView permite mostrar una lista de elementos con texto y, de forma opcional, con un icono que identifique el tipo de elemento. Por ejemplo, la lista de archivos del Explorador de Windows es similar en apariencia a un control ListView. Muestra una lista de los archivos y carpetas seleccionados actualmente en el rbol. Cada archivo y cada carpeta muestra un icono asociado para ayudar a identificar el tipo de archivo o carpeta. La clase ListViewItem representa un elemento dentro de un control ListView. Los elementos que se muestran en la lista se pueden presentar en una de cuatro vistas distintas. Se pueden mostrar como iconos grandes, como iconos pequeos o como iconos pequeos en una lista vertical. Los elementos tambin pueden tener subelementos que contengan informacin relacionada con el elemento primario. El cuarto estilo de vista (vista de detalles) permite mostrar el elemento y sus subelementos en una cuadrcula con encabezados de columna que identifican la informacin mostrada de cada subelemento. ListView admite la seleccin nica o mltiple. La funcin de seleccin mltiple permite a los usuarios hacer su seleccin en una lista de elementos de forma similar a un control ListBox. Adems, el usuario puede activar elementos seleccionados para realizar una tarea. Por ejemplo, se puede utilizar un control ListView para mostrar una lista de archivos que la aplicacin puede abrir y utilizar. El usuario puede seleccionar los archivos que desea abrir y, a continuacin, hacer doble clic en ellos para activar los elementos y abrir los archivos en la aplicacin. El ListView tambin puede mostrar casillas de verificacin, mediante la propiedad CheckBoxes, para permitir al usuario activar los elementos sobre los que desea realizar una accin. El control ListView se puede utilizar de diversas formas. Por ejemplo, para mostrar informacin de una aplicacin, una base de datos o un archivo de texto. El ListView tambin se puede utilizar para obtener informacin suministrada por el usuario, como la seleccin de un conjunto de archivos para su procesamiento. ListView ofrece un gran nmero de propiedades que proporcionan flexibilidad a la apariencia y al comportamiento. La propiedad View permite cambiar la forma en la que se muestran los elementos. Las propiedades LargeImageList, SmallImageList y StateImageList permiten especificar los objetos ImageList que contienen las imgenes que se muestran para los elementos y, en el caso del StateImageList, las casillas de verificacin que se muestran cuando la propiedad CheckBoxes est establecida en true. Para determinar los elementos activados, puede utilizar la propiedad CheckedItems para obtener acceso a la coleccin ListView.CheckedListViewItemCollection. La propiedad Columns permite obtener acceso al ListView.ColumnHeaderCollection, el cual almacena los encabezados de columna que se muestran cuando la propiedad View del control est establecida en View.Details. Los elementos se agregan y se quitan del ListView mediante la propiedad Items. La propiedad Items permite obtener acceso al ListView.ListViewItemCollection del control, el cual proporciona mtodos para manipular los elementos del control. Si desea permitir al usuario editar el texto de un elemento, puede utilizar la propiedad LabelEdit. Cuando el control contiene un gran nmero de elementos, a veces es ms sencillo para el usuario verlos de forma ordenada. Se puede utilizar la propiedad Sorting para ordenar los elementos alfabticamente. Muchas de las propiedades del control ListView se utilizan cuando la propiedad View est establecida en View.Details. La propiedad AllowColumnReorder permite al usuario del control ListView volver a configurar el orden de las columnas en tiempo de ejecucin. La propiedad FullRowSelect permite seleccionar un elemento y sus subelementos en lugar de slo el elemento. Para mostrar lneas de cuadrcula en la vista de detalles que identifiquen los lmites de los elementos y subelementos en el ListView, se puede utilizar la propiedad GridLines. La propiedad HeaderStyle permite especificar el tipo de encabezado de columna que se va a mostrar. Adems de las distintas propiedades disponibles para un control ListView, existen mtodos y eventos que la aplicacin puede utilizar para proporcionar funciones adicionales al ListView. Los mtodos BeginUpdate y EndUpdate permiten agregar varios elementos a un ListView sin tener que volver a dibujar el control cada vez que se agrega un elemento, lo que mejora el rendimiento. Si el control ListView muestra PGINA 35
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN elementos y subelementos, es posible que desee proporcionar alguna funcionalidad cuando el usuario haga clic con el botn secundario del mouse (ratn) en un subelemento. Para determinar el elemento en cuyo subelemento se est haciendo clic, se puede utilizar el mtodo GetItemAt. Al realizar la validacin de los elementos despus de que el usuario los haya editado, es posible que desee mostrar un elemento especfico al usuario para que lo cambie. Se puede llamar al mtodo EnsureVisible para garantizar que el elemento especfico se encuentre en el rea visible del control. Si la propiedad LabelEdit est establecida en true, se pueden realizar tareas como la validacin del texto editado antes y despus de cambiarlo mediante la creacin de un controlador de eventos para los eventos BeforeLabelEdit y AfterLabelEdit. Para realizar tareas como la apertura de un archivo o la presentacin de un cuadro de dilogo para editar un elemento mostrado en un ListView, puede crear un controlador de eventos para el evento ItemActivate. Si permite al usuario ordenar los elementos de un ListView al hacer clic en un encabezado de columna, puede crear un controlador de eventos para el evento ColumnClick que realice la ordenacin. Cuando la propiedad CheckBoxes est establecida en true, puede determinar cundo se ha producido un cambio en el estado de activacin de un elemento mediante el control del evento ItemCheck. la imagen predeterminada para los nodos de la vista de rbol. La coleccin Nodes contiene todos los objetos TreeNode asignados al control TreeView. A los nodos de rbol de esta coleccin se les conoce como los nodos de rbol raz. Cualquier nodo de rbol que se agregue posteriormente a un nodo de rbol raz se conoce como nodo secundario. Como cada TreeNode puede contener una coleccin de otros objetos TreeNode, puede ser difcil determinar la ubicacin en la estructura de rbol cuando se recorre la coleccin en iteracin. Se puede analizar la cadena TreeNode.FullPath usando el valor de la cadena PathSeparator para determinar dnde empieza y termina una etiqueta TreeNode. Al lado de los nodos de rbol se pueden mostrar imgenes asignando un objeto ImageList a la propiedad ImageList y haciendo referencia al valor de ndice de una Image de la ImageList para asignar Image. Establezca la propiedad ImageIndex en el valor de ndice de la Image que desea que se muestre cuando no est seleccionado un nodo de rbol. De igual manera, establezca la propiedad SelectedImageIndex en el valor de ndice de la Image que desea que se muestre cuando est seleccionado un nodo de rbol. Las imgenes a las que hacen referencia los valores de las propiedades ImageIndex y SelectedImageIndex son las imgenes predeterminadas que muestran todos los nodos de rbol asignados a la coleccin Nodes. Cada nodo de rbol puede reemplazar las imgenes predeterminadas estableciendo las propiedades TreeNode.ImageIndex y TreeNode.SelectedImageIndex. Los nodos de rbol se pueden expandir para mostrar el siguiente nivel de nodos de rbol secundarios. El usuario puede expandir el TreeNode haciendo clic en el botn con el signo ms (+), si se muestra al lado del TreeNode, o se puede expandir el TreeNode llamando al mtodo TreeNode.Expand. Para expandir todos los niveles de nodos de rbol secundarios de la coleccin Nodes, llame al mtodo ExpandAll. El nivel secundario del TreeNode se puede contraer llamando al mtodo TreeNode.Collapse, o el usuario puede presionar el botn con el signo menos (-) si se muestra al lado del TreeNode. Tambin se puede llamar al mtodo TreeNode.Toggle para alternar los estados de rbol expandido y contrado. Si se desea, los nodos de rbol pueden mostrar casillas de verificacin. Para mostrar casillas de verificacin, establezca la propiedad CheckBoxes de la TreeView en true. La propiedad Checked se establece en true para nodos de rbol en estado activado. Nota Si la propiedad TreeNode.Checked se establece desde el evento BeforeCheck o AfterCheck, el evento PGINA 36
4.7.11 TreeView
El control TreeView de formularios Windows Forms muestra una jerarqua de nodos similar al modo en que se muestran los archivos y las carpetas en el panel izquierdo del Explorador de Windows. Cada nodo puede contener otros nodos, que se denominan nodos secundarios. Los nodos primarios, nodos que contienen nodos secundarios, pueden mostrarse expandidos o contrados. Si la propiedad CheckBoxes se establece en true, las vistas de rbol pueden mostrar casillas de verificacin junto a los nodos. Entonces, es posible activar o desactivar nodos mediante programacin estableciendo la propiedad Checked del nodo en true o false. Las propiedades clave del control TreeView son Nodes y SelectedNode. La propiedad Nodes contiene la lista de los nodos de nivel superior en la vista de rbol. La propiedad SelectedNode establece el nodo actualmente seleccionado. Es posible mostrar iconos junto a los nodos; las imgenes se toman del control ImageList establecido en la propiedad ImageList de la vista de rbol. La propiedad ImageIndex establece
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN se provoca varias veces y puede producirse un comportamiento imprevisto. Por ejemplo, la propiedad Checked puede establecerse en el controlador de eventos cuando los nodos secundarios se estn actualizando de forma recursiva, de forma que el usuario no tenga que expandir y comprobar cada uno de los nodos uno por uno. Para evitar que el evento se provoque varias veces, hay que agregar lgica al controlador de eventos para que slo ejecute el cdigo recursivo si la propiedad Action de TreeViewEventArgs no est establecida en TreeViewAction.Unknown. La apariencia del control TreeView se puede cambiar estableciendo algunas de sus propiedades de presentacin y estilo. Si se establece ShowPlusMinus en true, se muestra un botn con el signo ms (+) o con el signo menos (-) al lado de cada objeto TreeNode que se puede expandir o contraer, segn corresponda. Si se establece la propiedad ShowRootLines en true, la TreeView muestra lneas que unen entre s todos los nodos de rbol raz. Se pueden mostrar lneas que unan los nodos de rbol secundarios con su correspondiente nodo raz estableciendo la propiedad ShowLines en true. Si se establece la propiedad HotTracking en true, cambia la apariencia de las etiquetas de nodo de rbol cuando el puntero del mouse pasa sobre ellas. Cuando se hace un seguimiento completo de las etiquetas de los nodos de rbol, dichas etiquetas tienen el aspecto de un hipervnculo. Nota Si se establecen las propiedades CheckBoxes, Scrollable, ImageIndex y SelectedImageIndex en tiempo de ejecucin, se vuelve a crear el identificador TreeView para que se actualice la apariencia del control. Esto hace que se contraigan todos los nodos de rbol, con excepcin del TreeNode seleccionado. Cuando la propiedad ShowCheckBox se establece en true, junto a la fecha seleccionada en el control se muestra una casilla de verificacin. Si la casilla de verificacin est activada, el valor de fecha y hora seleccionado se puede actualizar. Cuando la casilla de verificacin est sin marcar, el valor no est disponible. Las propiedades MaxDate y MinDate del control determinan el intervalo de fechas y horas. La propiedad Value contiene la fecha y hora actualmente establecidas en el control. Los valores pueden mostrarse en cuatro formatos, establecidos por la propiedad Format: Long, Short, Time o Custom. Si se selecciona un formato personalizado, deber establecer la cadena adecuada en la propiedad CustomFormat. El control DateTimePicker se utiliza para permitir al usuario seleccionar una fecha y una hora, y para mostrar esa fecha y esa hora en el formato especificado. Es posible limitar las fechas y las horas que se pueden seleccionar al establecer las propiedades MinDate y MaxDate. Para cambiar la presentacin de la parte del control que corresponde al calendario, establezca las propiedades CalendarForeColor, CalendarFont, CalendarTitleBackColor, CalendarTitleForeColor, CalendarTrailingForeColor y CalendarMonthBackground. La propiedad Format establece la clase DateTimePickerFormat del control. La propiedad Format predeterminada de la fecha es DateTimePickerFormat.Long. Si la propiedad Format se establece en DateTimePickerFormat.Custom, se puede crear un estilo de formato propio mediante el establecimiento de la propiedad CustomFormat y la construccin de una cadena de formato personalizado. La cadena de formato personalizado puede ser una combinacin de caracteres de campos personalizados y de otros caracteres literales. Por ejemplo, se puede presentar la fecha como "June 01, 2001 - Friday" al establecer la propiedad CustomFormat en "MMMM dd, yyyy - dddd". Si desea utilizar un control de estilo de flechas para ajustar el valor de fecha y hora, establezca la propiedad ShowUpDown en true. El control de calendario no se desplegar cuando se seleccione el control. Para ajustar la fecha y la hora, se puede seleccionar cada elemento por separado y utilizar los botones Arriba y Abajo para cambiar el valor. Si se necesita aplicar un formato de fecha personalizado y limitar la seleccin a una sola fecha, se puede utilizar un control DateTimePicker en lugar de MonthCalendar. Al utilizar DateTimePicker, se
4.7.12 DateTimePicker
El control DateTimePicker de formularios Windows Forms permite al usuario seleccionar un solo elemento de una lista de fechas y horas. Cuando se usa para representar una fecha, aparece en dos partes: una lista desplegable con una fecha representada como texto y una cuadrcula, que aparece al hacer clic en la flecha hacia abajo que se encuentra junto a la lista. La cuadrcula es similar al control MonthCalendar, que puede utilizarse para seleccionar mltiples fechas. Una alternativa a la cuadrcula, til para la edicin de horas en lugar de fechas, son los botones arriba y abajo que aparecen cuando la propiedad ShowUpDown se establece en true.
PGINA 37
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN limitar la necesidad de validar muchos datos de valores de fecha y hora. Nota El control DateTimePicker slo admite calendarios gregorianos. Si se necesita aplicar un formato de fecha personalizado y limitar la seleccin a una sola fecha, se puede utilizar un control DateTimePicker en lugar de un MonthCalendar. El uso del DateTimePicker elimina en gran medida la necesidad de validar los valores de fecha y hora.
PGINA 38
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN mtodos en un controlador de eventos, como el correspondiente al evento Click de un botn. Cuando se llama a los mtodos UpButton o DownButton, bien en el cdigo o mediante el clic de los botones Arriba o Abajo, se llama a UpdateEditText para actualizar la nueva cadena. Si se establece UserEdit en true, se compara la cadena con uno de los valores de la coleccin antes de actualizar el texto mostrado en el control. propiedad ThousandsSeparator en true. Para especificar el nmero de dgitos que deben aparecer detrs del smbolo decimal, hay que establecer la propiedad DecimalPlaces en el nmero de posiciones decimales que se desee mostrar. Para especificar el intervalo de valores permitidos en el control, hay que establecer las propiedades Minimum y Maximum. Se establece el valor de Increment con el fin de especificar el valor que se debe aumentar o disminuir para la propiedad Value cuando el usuario hace clic en los botones de flecha Arriba o Abajo. Cuando se llama a los mtodos UpButton o DownButton, ya sea en el cdigo o al hacer clic en los botones Arriba o Abajo, el nuevo valor queda validado y el control se actualiza con el nuevo valor en el formato correspondiente. En concreto, si UserEdit est establecido en true, se llama a ParseEditText antes de validar o actualizar el valor. Despus, se comprueba si el valor se encuentra entre los valores Minimum y Maximum, y se llama al mtodo UpdateEditText.
4.7.15 NumericUpDown
El control NumericUpDown de formularios Windows Forms es similar a una combinacin de un cuadro de texto y un par de flechas en las que el usuario puede hacer clic para ajustar un valor. El control muestra y establece un valor numrico nico a partir de una lista de opciones. Para incrementar y reducir el nmero, el usuario puede hacer clic en los botones hacia arriba y hacia abajo, presionar las teclas FLECHA ARRIBA y FLECHA ABAJO, o escribir un nmero. Al presionar la tecla FLECHA ARRIBA, se mueve hacia arriba hacia el valor mximo; al presionar la tecla FLECHA ABAJO, el valor se mueve hacia el mnimo. Un ejemplo donde puede ser til este tipo de control es el control de volumen de un reproductor de msica. Los controles numricos de flechas se utilizan en muchas aplicaciones del Panel de control de Windows. Los nmeros que se muestran pueden tener diversos formatos, entre ellos el hexadecimal. Las propiedades ms importantes del control son Value, Maximum (valor predeterminado 100), Minimum (valor predeterminado 0) e Increment (valor predeterminado 1). La propiedad Value establece el nmero seleccionado actualmente en el control. La propiedad Increment establece la cantidad en la que se ajusta el valor cuando el usuario hace clic en un botn arriba o abajo. Cuando el foco se desplaza fuera del control, la entrada escrita se valida frente a los valores mximo y mnimo. Los mtodos ms importantes del control son UpButton y DownButton. El usuario tambin puede escribir un valor, a menos que la propiedad ReadOnly se haya establecido en true. Para aplicar formato a la representacin numrica, se puede establecer la propiedad DecimalPlaces, Hexadecimal o ThousandsSeparator. Para mostrar valores hexadecimales en el control, hay que establecer la propiedad Hexadecimal en true. Para mostrar un separador de miles en los nmeros decimales cuando corresponda, hay que establecer la
4.7.16 RichTextBox
El control RichTextBox de formularios Windows Forms se utiliza para mostrar, escribir y manipular texto con formato. El control RichTextBox hace todo lo que realiza el control TextBox, pero adems puede efectuar las siguientes operaciones: mostrar fuentes, colores y vnculos; cargar texto e imgenes incrustadas desde un archivo; y buscar caracteres especificados. El control RichTextBox suele utilizarse para manipular texto y proporcionar funciones de presentacin similares a las de aplicaciones de procesador de textos tales como Microsoft Word. Al igual que el control TextBox, el control RichTextBox puede mostrar barras de desplazamiento; sin embargo, a diferencia del control TextBox, su configuracin predeterminada es mostrar tanto barras de desplazamiento horizontales como verticales segn se precise, y posee configuraciones adicionales para las barras de desplazamiento. Como sucede con el control TextBox, el texto que se muestra se establece con la propiedad Text. El control RichTextBox tiene numerosas propiedades para dar formato al texto. Para manipular archivos, los mtodos LoadFile y SaveFile pueden mostrar y escribir varios formatos de archivo, entre ellos texto sin formato, texto sin formato Unicode y formato de texto enriquecido (RTF). Los posibles formatos de archivo
PGINA 39
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN se enumeran en RichTextBoxStreamType (Enumeracin). Puede utilizar el mtodo Find para buscar cadenas de texto o caracteres especficos. Tambin puede utilizar un control RichTextBox para vnculos de estilo Web; para ello, establezca la propiedad DetectUrls en true y escriba cdigo para controlar el evento LinkClicked. Para evitar que el usuario manipule una parte o la totalidad del texto del control, puede establecer la propiedad SelectionProtected en true. Para deshacer y rehacer la mayora de las operaciones de edicin de un control RichTextBox, llame a los mtodos Undo y Redo. El mtodo CanRedo permite determinar si la ltima operacin deshecha por el usuario puede aplicarse de nuevo al control. El control RichTextBox permite al usuario escribir y modificar texto, al tiempo que proporciona caractersticas de formato ms avanzadas que el control TextBox estndar. El texto se puede asignar directamente al control o se puede cargar desde un archivo de formato de texto enriquecido (RTF) o de texto sin formato. Al texto del control se le puede asignar formato de carcter y prrafo. El control RichTextBox ofrece varias propiedades que se pueden emplear para aplicar formato a cualquier parte del texto del control. Para cambiar el formato del texto, primero se debe seleccionar. Slo se le puede asignar formato de carcter y prrafo al texto seleccionado. Una vez configurado el formato de una seccin de texto seleccionada, todo el texto que se escriba a continuacin tendr el mismo formato, hasta que se realice un cambio de configuracin o se seleccione una seccin diferente del documento del control. La propiedad SelectionFont permite cambiar el texto a negrita o a cursiva. Esta propiedad tambin se puede utilizar para cambiar el tamao y el tipo de letra del texto. La propiedad SelectionColor permite cambiar el color del texto. Para crear listas con vietas se puede utilizar la propiedad SelectionBullet. Para ajustar el formato de prrafo, tambin es posible establecer las propiedades SelectionIndent, SelectionRightIndent y SelectionHangingIndent. El control RichTextBox tiene mtodos que proporcionan funciones para abrir y guardar archivos. El mtodo LoadFile permite cargar un archivo de texto RTF o ASCII existente en el control. Tambin es posible cargar datos desde una secuencia de datos ya abierta. El mtodo SaveFile permite guardar un archivo en formato RTF o ASCII. De manera similar al mtodo LoadFile, se puede utilizar el mtodo SaveFile para guardar en una secuencia de datos abierta. El control RichTextBox tambin proporciona funciones para buscar cadenas de texto. El mtodo Find se sobrecarga para buscar cadenas de texto y caracteres especficos en el texto del control. Tambin se puede inicializar el control a datos de RichTextBox almacenados en la memoria. Por ejemplo, se puede inicializar la propiedad Rtf a una cadena que contiene el texto que se va a mostrar, incluyendo los cdigos RTF que determinan cmo se debe dar formato al texto. Si el texto del control contiene vnculos, por ejemplo, a sitios Web, se puede utilizar la propiedad DetectUrls para que los vnculos se muestren correctamente en el texto del control. A continuacin, se puede controlar el evento LinkClicked para realizar las tareas asociadas a los vnculos. La propiedad SelectionProtected permite proteger el texto del control de manera que el usuario no lo pueda manipular. Al proteger el texto del control, se puede controlar el evento Protected para determinar en qu momento el usuario ha intentado modificar el texto protegido y advertirle de que est protegido o indicarle una forma estndar para manipularlo. Las aplicaciones que ya utilizan controles TextBox se pueden adaptar fcilmente para que utilicen controles RichTextBox. No obstante, el control RichTextBox no tiene el mismo lmite de capacidad de caracteres de 64 K que el control TextBox. Normalmente, se utiliza RichTextBox para proporcionar funciones de manipulacin y presentacin de texto similares a las de aplicaciones de procesamiento de texto como Microsoft Word.
4.7.17 ImageList
El componente ImageList de formularios Windows Forms se utiliza para almacenar imgenes que, a partir de ese momento, podrn mostrar otros. Una lista de imgenes permite escribir cdigo para un catlogo de imgenes nico y consistente. Por ejemplo, para girar las imgenes que muestra un control Button, simplemente cambie la propiedad ImageIndex del botn. Tambin puede asociar la misma lista de imgenes con varios controles. Por ejemplo, si utiliza un control ListView y un control TreeView para mostrar la misma lista de archivos, al cambiar el icono de un archivo en la lista de imgenes, el nuevo icono aparecer en ambas vistas. Puede utilizar una lista de imgenes con cualquier control que tenga una propiedad ImageList o, en el caso del control ListView, las propiedades SmallImageList y LargeImageList. Entre los controles que pueden asociarse con una lista de PGINA 40
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN imgenes se incluyen los siguientes: ListView, TreeView, ToolBar, TabControl, Button, CheckBox, RadioButton y Label. Para asociar la lista de imgenes con un control, establezca la propiedad ImageList del control como el nombre del componente ImageList. La propiedad clave del componente ImageList es Images, que contiene las imgenes que utilizar el control asociado. Puede tener acceso a cada una de las imgenes mediante su valor de ndice. La propiedad ColorDepth determina el nmero de colores con los que se pueden representar las imgenes. Todas las imgenes se muestran con el mismo tamao, establecido por la propiedad ImageSize. Las imgenes de mayor tamao se ajustan a este tamao. Normalmente, la clase ImageList la utilizan otros controles, como ListView, TreeView o ToolBar. Se pueden agregar mapas de bits, iconos o metarchivos a ImageList y los dems controles podrn utilizar las imgenes que necesiten. ImageList utiliza un identificador para administrar la lista de imgenes. Handle no se crea hasta que se realizan determinadas operaciones en la lista de imgenes, como por ejemplo, obtener las propiedades Count o Handle, y llamar al mtodo Draw. con el componente HelpProvider por medio de la propiedad HelpNamespace. Para especificar el tipo de Ayuda que se proporciona, llame a SetHelpNavigator y proporcione al control especificado un valor de la enumeracin HelpNavigator. Para proporcionar la palabra clave o el tema de Ayuda, llame al mtodo SetHelpKeyword. Opcionalmente, puede utilizar el mtodo SetHelpString para asociar una cadena de Ayuda especfica a otro control. Cuando el usuario presione la tecla F1 mientras el control tiene el foco, la cadena asociada por medio de este mtodo se mostrar en una ventana emergente. Si no estableci HelpNamespace, deber utilizar SetHelpString para proporcionar el texto de Ayuda. Si estableci tanto HelpNamespace como la cadena de Ayuda, tendr precedencia la Ayuda basada en HelpNamespace. Cuando se agrega a un formulario, el componente HelpProvider aparece en la bandeja de components en la parte inferior del Diseador de Windows Forms. HelpProvider llama a los mtodos de Help para proporcionar la funcionalidad de Ayuda.
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN informacin, cunto tiempo debe apuntar el usuario al control para que aparezca la informacin y cunto tarda en aparecer la ventana de informacin siguiente. Adems de para proporcionar ayuda, la clase ToolTip se puede utilizar para proporcionar informacin de estado en tiempo de ejecucin. Por ejemplo, se podra utilizar la clase ToolTip para mostrar datos sobre la velocidad de conexin y la calidad de la lnea cuando el usuario desplace el cursor del mouse sobre un control PictureBox que muestra el estado de la conexin a Internet. La clase ToolTip dispone de propiedades que permiten modificar la velocidad y la duracin de la presentacin de la ventana de informacin sobre herramientas. AutoPopDelay determina durante cunto tiempo se muestra la ventana de informacin sobre herramientas; las propiedades InitialDelay y ReshowDelay determinan el retraso antes de que se muestre una ventana de informacin sobre herramientas. Para establecer todas estas propiedades de manera coherente, utilice la propiedad AutomaticDelay. Este valor se utiliza para calcular y establecer los valores de las dems propiedades de retraso. Para que se muestre el texto de informacin sobre herramientas de un control, independientemente de si Form o el contenedor donde se encuentra el control estn habilitados, utilice la propiedad ShowAlways. Si desea que no se muestre ningn texto de informacin sobre herramientas en la aplicacin, utilice la propiedad Active. La clase ToolTip se puede utilizar en cualquier contenedor. Para especificar el contenedor especfico donde se utilizar la clase ToolTip, utilice el constructor ToolTip. Para que el texto de informacin sobre herramientas se muestre siempre que el usuario mueva el cursor del mouse sobre un control, el texto de informacin sobre herramientas se debe asociar al control en una instancia de la clase ToolTip. Para asociar un texto de informacin sobre herramientas a un control, utilice el mtodo SetToolTip. Para cambiar el texto al que est asociado el control, el mtodo SetToolTip se puede llamar ms de una vez para el mismo control. Si desea obtener el texto al que est asociado un control, utilice el mtodo GetToolTip. Para quitar todos los textos de informacin sobre herramientas asociados a una instancia de la clase ToolTip, utilice el mtodo RemoveAll. Nota La informacin sobre herramientas no se muestra para los controles que estn deshabilitados.
4.7.20 StatusBar
El control StatusBar de formularios Windows Forms se utiliza en los formularios como un rea, que habitualmente se muestra en la parte inferior de una ventana, en la que una aplicacin puede mostrar informacin de estado de diferentes tipos. Los controles StatusBar pueden tener paneles de barra de estado que muestren texto o iconos con informacin de estado o una serie de iconos animados que indiquen el funcionamiento de un proceso (como por ejemplo Microsoft Word cuando indica que se est guardando un documento). Internet Explorer utiliza una barra de estado que indica la direccin URL de una pgina cuando el mouse (ratn) pasa sobre el hipervnculo; Microsoft Word ofrece informacin sobre la ubicacin de pgina, la ubicacin de seccin y los modos de edicin, tales como sobrescribir y revisar cambios; por ltimo, Visual Studio utiliza la barra de estado para ofrecer informacin contextual como, por ejemplo, indicaciones de cmo manipular las ventanas acoplables, ya sea acopladas o flotantes. Para mostrar un nico mensaje en la barra de estado, establezca la propiedad ShowPanels en false (el valor predeterminado) y la propiedad Text de la barra de estado en el texto que desee que aparezca en la barra de estado. Puede dividir la barra de estado en paneles para mostrar informacin de varios tipos; para ello, establezca la propiedad ShowPanels en true y utilice el mtodo Add de la clase StatusBarPanelCollection, al que se puede tener acceso a travs de la propiedad Panels del control. Usando los mtodos de la propiedad Panels se pueden quitar paneles del control u obtener acceso a un panel en espcfico. Normalmente, un control StatusBar est formado por objetos StatusBarPanel, cada uno de los cuales muestra texto o un icono. Tambin puede proporcionar paneles personalizados dibujados por el usuario como una barra de progreso o una serie de imgenes que muestren el estado de la aplicacin. Normalmente, un control StatusBar muestra informacin acerca del objeto que se est mostrando en un control Form, los componentes del objeto o informacin contextual relativa a la operacin de ese objeto en la aplicacin. El control StatusBar dispone de propiedades que permiten personalizar el aspecto del control. Si StatusBar se muestra en un formulario cuyo tamao se puede cambiar, utilice la propiedad SizingGrip para mostrar un control de tamao en la esquina inferior
PGINA 42
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN derecha del formulario para indicar a los usuarios que el tamao del formulario se puede cambiar. Si desea determinar cundo se hace clic a un objeto StatusBarPanel en un control StatusBar, puede crear un controlador para el evento PanelClick. Para realizar operaciones de dibujo personalizadas en un panel, puede crear un controlador para el evento DrawItem. Los datos del evento que se envan al controlador de eventos proporciona informacin sobre el panel que se va a dibujar y el objeto Graphics que se utilizar para realizar las tareas de dibujo. Cuando se crea una instancia de StatusBar, se establecen las propiedades de lectura y escritura en sus valores iniciales. con la presentacin de errores dentro de un conjunto de datos. Un proveedor de errores es una alternativa mejor que mostrar un mensaje de error en un cuadro de mensaje, porque una vez que se descarta un cuadro de mensaje, el mensaje de error deja de estar visible. El componente ErrorProvider muestra un icono de error ( ) junto al control correspondiente, por ejemplo, un cuadro de texto; cuando el usuario coloca el puntero del mouse (ratn) sobre el icono de error aparece una informacin sobre herramientas que muestra la cadena del mensaje de error. Las propiedades ms importantes del componente ErrorProvider son DataSource, ContainerControl e Icon. La propiedad ContainerControl debe establecerse en el contenedor adecuado (habitualmente el formulario Windows Forms), para que el componente ErrorProvider muestre un icono de error en el formulario. Cuando se agrega el componente en el diseador, la propiedad ContainerControl se establece en el formulario contenedor; si agrega el control mediante cdigo, deber establecerlo usted mismo. La propiedad Icon puede establecerse en un icono de error personalizado, en lugar del predeterminado. Cuando se establece la propiedad DataSource, el componente ErrorProvider puede mostrar mensajes de error para un conjunto de datos. El mtodo clave del componente ErrorProvider es SetError, que especifica la cadena del mensaje de error y dnde debe aparecer el icono de error. ErrorProvider presenta un mecanismo simple para indicar al usuario final que un control de un formulario tiene un error asociado. Si se especifica una cadena de descripcin de error para el control, se muestra un icono junto a ste. El icono parpadea de la manera que especifica BlinkStyle, con la frecuencia que especifica BlinkRate. Cuando el mouse (ratn) pase por encima del icono, se mostrar la informacin sobre herramientas con una cadena de descripcin del error. Normalmente, ErrorProvider se utiliza con controles enlazados a datos. Si utiliza ErrorProvider con controles enlazados a datos, debe especificar la propiedad ContainerControl en el constructor o estableciendo la propiedad ContainerControl.
4.7.21 NotifyIcon
El componente NotifyIcon de formularios Windows Forms se usa normalmente para mostrar iconos en los procesos que se ejecutan en segundo plano y que, por tanto, no muestran una interfaz de usuario la mayor parte del tiempo. Un ejemplo sera un programa de proteccin antivirus al que se puede tener acceso si se hace clic en un icono situado en el rea de notificacin de estado de la barra de tareas. Cada componente NotifyIcon muestra un solo icono en el rea de estado. Si tiene tres procesos en segundo plano y desea que se muestre un icono para cada uno, deber agregar tres componentes NotifyIcon al formulario. Las principales propiedades del componente NotifyIcon son Icon y Visible. La propiedad Icon establece el icono que aparece en el rea de estado. Para que aparezca el icono, la propiedad Visible debe establecerse en true. Los iconos tienen asociada informacin sobre herramientas y mens contextuales. Los mens emergentes de un icono se definen con la propiedad ContextMenu. La propiedad Text asigna texto de informacin sobre herramientas. Para que el icono aparezca en el rea de estado, la propiedad Visible debe establecerse en true.
4.7.22 ErrorProvider
El componente ErrorProvider de los formularios Windows Forms se utiliza para validar los datos que proporciona el usuario en un formulario o control. Habitualmente, se utiliza junto con la validacin de entrada del usuario en un formulario o
PGINA 43
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN del manejador del evento en que desee que se agregue el control. Establezca la propiedad Location para el control y cualesquiera otras propiedades de la variable del control, segn convenga y finalmente agregue el control a la coleccin controles del formulario. Es importante instanciar la variable usando la palabra clave New y tambin establecer los valores para la propiedad Location, de otra manera se disparar un excepcin en tiempo de ejecucin o no se presentar el control en pantalla. Hay que tener cuidado de no establecer la ubicacin del control ms all de los lmites del tamao del formulario. Por ejemplo, se podra insertar en el mtodo que controla el evento Click del botn Button1 dentro de la clase del formulario, cdigo similar al siguiente para agregar una referencia a la variable de control MyText, establecer el valor de Location para el control y agregar el control:
' Visual Basic Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim MyText As New TextBox() MyText.Location = New Point(25, 25) Me.Controls.Add(MyText) End Sub
Descripcin Recupera el ndice del control especificado de la coleccin de controles. Quita el control especificado de la coleccin de controles.
RemoveAt Quita un control de la coleccin de controles en la ubicacin del ndice especificada. Ejemplo En el siguiente ejemplo se quita un Control de Control.ControlCollection de la clase derivada Panel si se trata de un miembro de la coleccin. En el ejemplo se supone que se ha creado un control Panel, un control Button y al menos un control RadioButton en Form. Los controles RadioButton se agregan al control Panel y el control Panel se agrega a Form. Al hacer clic en el botn, el botn de opcin denominado radioButton2 se quita de Control.ControlCollection.
' Remove the RadioButton control if it exists. Private Sub RemoveButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles RemoveButton.Click If Panel1.Controls.Contains(RadioAddRangeButton) Then Panel1.Controls.Remove(RadioAddRangeButton) End If End Sub
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN se muestre. Se puede usar la propiedad de color ForeColor para cambiar el color de primer plano predeterminado de todos los controles que se coloquen en el formulario. Las propiedades FormBorderStyle, MinimizeBox y MaximizeBox permiten controlar si el formulario se puede minimizar, maximizar o cambiar de tamao en tiempo de ejecucin. Adems de las propiedades, se pueden usar los mtodos de la clase para manipular un formulario. Por ejemplo, se puede usar el mtodo ShowDialog para mostrar un formulario como cuadro de dilogo modal. El mtodo SetDesktopLocation se puede usar para situar el formulario en el escritorio. Los eventos de la clase Form permiten reaccionar ante las acciones llevadas a cabo en el formulario. El evento Activated se puede usar para realizar operaciones como la actualizacin de los datos que se muestran en los controles del formulario cuando se activa dicho formulario. Un formulario tiene como tamao predeterminado un alto de 300 pxeles y un ancho de 300 pxeles. para mostrar el texto del men de derecha a izquierda con el fin de admitir idiomas como el rabe, que se lee de derecha a izquierda. Se pueden crear objetos MainMenu distintos para representar diferentes estructuras de men para el formulario. Si se desea volver a utilizar la estructura de men contenida en un objeto MainMenu especfico, se puede utilizar el mtodo CloneMenu correspondiente para crear una copia. Una vez se disponga de una copia de la estructura de men, se pueden realizar las modificaciones adecuadas para la nueva estructura de men.
4.11 Mens
El componente MainMenu de formularios Windows Forms muestra un men en tiempo de ejecucin. Si se agrega este componente al Diseador de Windows Forms, el Diseador de mens permitir configurar visualmente la estructura del men principal. Todos los submens del men principal y los elementos individuales son objetos MenuItem. Para designar un elemento de men como elemento predeterminado, establezca la propiedad DefaultItem en true. El elemento predeterminado aparece en negrita cuando se hace clic en el men. El valor de la propiedad Checked del elemento de men puede ser true o false, e indica si ste est seleccionado. La propiedad RadioCheck del elemento de men personaliza la apariencia del elemento seleccionado: si RadioCheck se establece en true, aparecer un botn de opcin junto al elemento; si se establece en false, aparecer una marca de verificacin. El control MainMenu representa el contenedor para la estructura de men de un formulario. Un men est formado por objetos MenuItem que representan los comandos de men individuales de la estructura de men. Cada objeto MenuItem puede ser un comando de la aplicacin o un men primario para otros elementos de submen. Para enlazar MainMenu con el objeto Form que lo mostrar, asigne MainMenu a la propiedad Menu de Form. En el caso de aplicaciones que admiten varios idiomas, se puede utilizar la propiedad RightToLeft
PGINA 45
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN 2. Agregue, dentro del mtodo, cdigo similar al siguiente para crear una instancia del componente MainMenu: 2. Dentro del mtodo, cree objetos MenuItem para agregarlos a la coleccin del objeto MainMenu:
' Visual Basic Dim myMenuItemFile as New MenuItem("&File") Dim myMenuItemNew as New MenuItem("&New")
Una vez que haya agregado un componente MainMenu al formulario Windows Forms, deber agregarle elementos de men. El Diseador de mens permite agregar elementos de men al componente de men en tiempo de diseo. El contenido de los mens se mantiene dentro de una coleccin, de modo que, para agregar elementos a un men en tiempo de ejecucin, deber agregar objetos MenuItem a esta coleccin. Para agregar elementos de men a un men en tiempo de diseo 1. Haga clic en el componente MainMenu del formulario Windows Forms. Se mostrar el texto "Escriba aqu". 2. Haga clic en el texto que se muestra y escriba el nombre del elemento de men que desea agregarle. 3. Para agregar otro elemento de men, haga clic en otra rea "Escriba aqu" dentro del Diseador de mens. Haga clic en el rea que se encuentra a la derecha del elemento de men actual para agregar un submen. O bien Haga clic en el rea que se encuentra bajo el elemento de men actual para agregar otra entrada al mismo men. Para agregar elementos de men a un men mediante programacin 1. Si no existe ya uno, agregue un componente MainMenu al formulario Windows Forms dentro de un mtodo pblico y asigne una instancia de la clase MainMenu a la propiedad Menu del formulario.
' Visual Basic Public Sub AddMenuAndItems() Dim mnuFileMenu as New MainMenu() Me.Menu = mnuFileMenu End Sub
Nota De forma predeterminada, un objeto MainMenu no contiene elementos de men, de modo que el primer elemento de men que se agrega se convierte en encabezado del men. sta es la razn por la que la propiedad Text de myMenuItemFile se establece en &File. 3. Dentro del mtodo, asigne el elemento de men de nivel superior y agrguele los elementos de men siguientes:
' Visual Basic mnuFileMenu.MenuItems.Add(myMenuItemFile) myMenuItemFile.MenuItems.Add(myMenuItemNew)
Nota Para crear submens, puede agregar objetos MenuItem a la propiedad MenuItems del objeto MenuItem primario. En el ejemplo anterior, si deseara agregar un tercer elemento de men (myMenuItemFolder) como submen del segundo elemento de men (myMenuItemNew), debera incluir las siguientes lneas de cdigo:
' Visual Basic Dim myMenuItemFolder as New MenuItem("&Folder") myMenuItemNew.MenuItems.Add(myMenuItemFolder)
Los elementos de men tambin se pueden agregar dinmicamente en el momento de crearlos, de forma que las propiedades se establecen en el momento de crearlas y agregarlas. Por ejemplo, para agregar un cuarto elemento de men a la coleccin anterior, escriba el fragmento de cdigo siguiente:
' Visual Basic mnuFileMenu.MenuItems.Add("Save &As")
los
Finalmente, una vez establecida la estructura del men, desear proporcionar funcionalidad a los elementos del men. A menudo, esto se consigue mediante el controlador de eventos del evento MenuItem.Click
PGINA 46
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
de
Herramientas
El control ToolBar de formularios Windows Forms se utiliza en los formularios como una barra de controles que muestra una fila de mens desplegables y botones de mapas de bits que activan comandos. Los botones pueden aparecer como un botn estndar, un botn de alternar o un botn desplegable. Por lo tanto, hacer clic en un botn de una barra de herramientas puede ser un equivalente a elegir un comando de men. Puede configurar los botones para que aparezcan y se comporten como botones de comando, mens desplegables o separadores. Habitualmente, una barra de herramientas contiene botones y mens que corresponden a los elementos de la estructura de mens de una aplicacin y proporciona acceso rpido a las funciones y comandos de la aplicacin de uso ms frecuente. Un control ToolBar suele estar "acoplado" en la parte superior de su ventana primaria, pero tambin se puede acoplar a cualquier lado de la ventana. Una barra de herramientas puede mostrar informacin sobre herramientas cuando el usuario sita el puntero del mouse (ratn) en un botn de la barra. La informacin sobre herramientas es una pequea ventana emergente que describe de forma breve el propsito del botn o del men. Para mostrar informacin sobre herramientas, debe establecerse la propiedad ShowToolTips en true. Nota Algunas aplicaciones tienen controles muy similares a la barra de herramientas que tienen la capacidad de "flotar" sobre la ventana de la aplicacin y se puede cambiar su posicin. El control ToolBar de Windows Forms no puede realizar estas acciones. Cuando la propiedad Appearance se establece en Normal, los botones de la barra de herramientas aparecen realzados en tres dimensiones. Puede establecer la propiedad Appearance de la barra de herramientas en Flat para proporcionar a la barra de herramientas y a sus botones una apariencia plana. Cuando el puntero del mouse se mueve sobre un botn plano, la apariencia del botn cambia a tridimensional. Los botones de las barras de herramientas pueden dividirse en grupos lgicos por medio de separadores. Un separador es un botn de barra de herramientas con la propiedad Style establecida en Separator. Aparece como un espacio vaco en la barra de herramientas. Cuando la barra de herramientas tiene una apariencia plana, los separadores de botones aparecen como lneas, en lugar de como espacios entre los botones.
El control ToolBar permite crear barras de herramientas agregando objetos Button a una coleccin Buttons. Se puede usar el Editor de colecciones para agregar botones a un control ToolBar; cada objeto Button debe tener asignado un texto o una imagen, aunque es posible asignarle ambas cosas. La imagen la proporciona un componente ImageList asociado, indicando el valor de ndice de la imagen a la propiedad ImageIndex para cada ToolBarButton. A continuacin, se puede asignar texto que aparecer debajo o a la derecha de la imagen estableciendo la propiedad Text de ToolBarButton. En tiempo de ejecucin, puede agregar o quitar botones de la coleccin ToolBarButtonCollection mediante los mtodos Add y Remove. Para programar los botones de una barra de herramientas, agregue cdigo a los eventos ButtonClick del control ToolBar, usando la propiedad Button de la clase ToolBarButtonClickEventArgs para determinar en qu botn se hizo clic. Si no se ha establecido ButtonSize, se calcula un objeto Size dentro de la clase para establecerlo de manera predeterminada. El tamao calculado se ajustar a la imagen ms grande y al texto asignados a los controles ToolBarButton.
5 Elementos de Programacin
5.1 Tipos de Datos
El tipo de datos de un elemento de programacin hace referencia al tipo de datos que puede contener y a cmo se almacenan stos. Los tipos de datos se aplican a todos los valores que pueden almacenarse en la memoria del equipo o participar en la evaluacin de una expresin. Cada variable, literal, constante, propiedad, argumento de procedimiento y valor devuelto por un procedimiento tiene un tipo de datos. Un tipo de datos declarado est especificado como parte de la declaracin de un elemento de programacin. A menos que utilice la programacin sin tipos, debe declarar los tipos de datos de todos los elementos de programacin. Los tipos de datos de Visual Basic .NET se pueden clasificar en funcin de si una variable de un tipo especfico almacena sus propios datos o un puntero a los datos. Esta clasificacin afecta a la forma en que se implementa un tipo de datos.
PGINA 47
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
System.UInt16, System.UInt32 y System.UInt64 ofrecen los equivalentes sin signo de Short, Integer y Long. Puede utilizar estos tipos sin signo para declarar variables y constantes, as como tener acceso a los mtodos que .NET implementa en estos tipos. Sin embargo, Visual Basic .NET no admite operaciones o conversiones de tipo que impliquen a tipos que no proporciona la aplicacin. En .NET Framework, una estructura es un tipo de valor y una clase es un tipo de referencia. Por este motivo, las estructuras .NET admiten tipos de valor como Char e Integer, mientras que las clases .NET admiten tipos de referencia como Object y String. Como cada tipo de referencia representa una clase .NET subyacente, es preciso utilizar la palabra clave New al inicializarlo. La instruccin siguiente inicializa una matriz: Dim Totals() As Single = New Single(8) {} Tambin puede utilizar la palabra clave New para inicializar un tipo de valor. Esto resulta especialmente til si el tipo tiene un constructor que toma parmetros.
Conviene sealar que se debe calificar una referencia a un miembro de tipo de datos, bien con el nombre del tipo (Date) o bien con el nombre de una variable declarada de dicho tipo (Current).
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN <Char>.IsLower() ' Returns True if character is a lowercase letter. <Date>.IsLeapYear() ' Returns True if current year is a leap year. <Date>.ToUniversalTime() ' Returns local date/time converted to UTC. <Double>.IsInfinity() ' Returns True if contents represent infinity. <Double>.IsNaN() ' Returns True if contents are not a number (0/0). <Long>.MaxValue ' Constant representing largest positive Int64 value. <Object>.GetType() ' Returns Type object representing type of <Object>. <Object>.GetType().GetTypeCode() ' Returns type code of <Object>. <String>.Chars(<index>) ' Character at position <index> of <String>. <String>.Length ' Number of characters currently in <String>. Todos los tipos numricos, incluidos Byte y Char, exponen los campos pblicos MaxValue y MinValue, que pueden ser muy tiles al trabajar con estos tipos. El tipo integral sin signo es Byte (8 bits). Si una variable contiene datos binarios o datos de naturaleza desconocida, declrela como variable de este tipo. Si se necesitan ms de ocho bits de datos, declare la variable como una matriz de elementos de tipo Byte. Los operadores aritmticos son ms rpidos con los tipos integrales que con cualquier otro tipo de datos. Con el que ms rpidos son es con el tipo de datos Integer de Visual Basic .NET. Los tipos integrales son especialmente tiles como variables de contador en bucles For ... Next. Como Byte es un tipo sin signo con un intervalo de 0255, no puede representar un nmero negativo. Si utiliza el operador menos (-) unario en una expresin que produce un resultado del tipo Byte, Visual Basic convierte primero la expresin a Integer. Si intenta asignar a una variable de un tipo integral un nmero que est fuera del intervalo correspondiente a este tipo, se produce un error. Si intenta asignarle un nmero decimal, se redondea el nmero, como en el ejemplo siguiente:
Dim K As Integer ' El rango vlido es de -2147483648 a +2147483647. ' ... K = 2147483648 ' Provoca un error. K = CInt(5.9) ' Establece K a 6.
Los datos binarios almacenados en variables Byte como matrices se conservan durante las conversiones de formato. No debera utilizar una variable String para datos binarios, ya que su contenido puede daarse durante la conversin entre los formatos ANSI y Unicode. Esta conversin puede realizarse de forma automtica cuando Visual Basic lee datos de archivos o escribe en ellos, o cuando llama a archivos DLL, mtodos y propiedades. Para tipos integrales, los caracteres de tipo literal son S para Short, I para Integer y L para Long. No existe un carcter de tipo literal para Byte.
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Para asignar una valor de gran tamao a una variable o constante Decimal, debe agregar el carcter de tipo literal a un literal numrico si es demasiado largo para el tipo de datos Long, tal y como se puede ver en el ejemplo siguiente:
Dim DecVar As Decimal DecVar = 9223372036854775808 ' Overflow; too big for Long data type. DecVar = 9223372036854775808D ' No overflow; Decimal data type. CharVar = "@" ' Cannot convert String to Char with Option Strict On. CharVar = "@"C ' Successfully assigns single character to CharVar.
Recuerde que el tipo Char no tiene signo. El carcter de tipo literal para Char es C.
Los nmeros con punto flotante (Single y Double) tienen intervalos mayores que los nmeros Decimal pero pueden estar sujetos a errores de redondeo. Los tipos de punto flotante admiten menos dgitos significativos que Decimal pero pueden representar valores de mayor magnitud. Los valores de punto flotante se pueden expresar como mmmEeee, donde mmm es la mantisa (los dgitos significativos) y eee es el exponente (una potencia de 10). El valor positivo ms elevado de un tipo de datos Single es 3,4028235E+38, y el valor positivo ms elevado de un tipo de datos Double es 1,79769313486231570E+308. Para tipos no integrales, los caracteres de tipo literal son D para Decimal, F para Single y R para Double.
A continuacin puede asignar cadenas a esta variable y manipularla mediante el uso de funciones de cadena, como en el ejemplo siguiente:
S = "Database" S = Microsoft.VisualBasic.Left(S, 4) ' Establece S a "Data".
El tipo de datos String contiene caracteres Unicode, cada uno de los cuales tiene un valor entre 0 y 65.535. Una variable o argumento String es siempre una cadena de longitud variable, que crece o se reduce al asignarle nuevos datos. Algunas veces las cadenas se completan con espacios iniciales o finales. Las funciones Trim, LTrim y RTrim eliminan estos espacios. Quizs encuentre tiles estas funciones cuando trabaje con cadenas. No existe ningn carcter de tipo literal para String. Sin embargo, el compilador trata los literales encerrados entre comillas dobles (" ") como String.
PGINA 50
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
RunningVB = True End If
variable Object actualmente, puede utilizar el mtodo GetTypeCode de la clase Type, como en el ejemplo siguiente:
Dim MyObject As Object ' ... Suppose MyObject has now had something assigned to it. Dim DatTyp As Integer DatTyp = Type.GetTypeCode(MyObject.GetType())
Si no se incluye una fecha en un literal de fecha/hora, Visual Basic establece la parte de fecha del valor en 1 de junio de 0001. Si se incluye una hora en un literal de fecha/hora Visual Basic establece la parte de hora del valor en el inicio del da, es decir, medianoche. Al convertir un tipo de datos numrico en Date, Visual Basic trata su valor como un entero con signo. Si se intenta convertir un nmero negativo, se produce un error. No existe ningn carcter de tipo literal para Date. Sin embargo, el compilador trata los literales encerrados entre caracteres de signo de nmero (# #) como Date.
Los elementos de programacin declarados como Object pueden aceptar valores de cualquier tipo de datos. Object se trata como un tipo de valor cuando contiene un tipo de valor, y como tipo de referencia cuando contiene un tipo de referencia. En cada caso, una variable Object no contiene el propio valor, sino un puntero al valor. Siempre utiliza cuatro bytes en la memoria del sistema, pero sin incluir el almacenamiento para los datos que representan el valor de la variable. Debido al cdigo que el puntero utiliza para buscar los datos, las variables Object que contienen tipos de valor son de acceso un poco ms lento que las variables que tienen un tipo explcito. No existe ningn carcter de tipo literal para Object.
5.2 Variables
A menudo, es necesario almacenar valores de forma temporal para efectuar clculos en Visual Basic. Por ejemplo, puede que necesite calcular varios valores, compararlos y realizar distintas operaciones con ellos, en funcin del resultado de la comparacin. Para poder comparar los valores, debe guardarlos, pero no es necesario que los almacene en una propiedad. Visual Basic, al igual que la mayora de los lenguajes de programacin, utiliza variables para almacenar valores. Una variable tiene un nombre (la palabra que se utiliza para referirse al valor que contiene la variable) y un tipo de datos (que determina la clase de datos que puede almacenar la variable). Una variable puede representar una matriz, si es necesario que almacene un conjunto indizado de elementos de datos estrechamente relacionados entre s. Para efectuar clculos y asignar el resultado a una variable, se utilizan instrucciones de asignacin, como se muestra en el siguiente cdigo:
ApplesSold = 10 ' El valor 10 es asignado a la variable. ApplesSold = ApplesSold + 1 ' La variable es incrementada.
Al declarar una variable de objeto, es preferible utilizar una clase especfica en lugar del genrico Object; por ejemplo, Database en lugar de Object, en el ejemplo precedente. Tambin es preferible utilizar la clase ms especfica disponible, como TextBox en lugar de Control, as se podr tener acceso a sus propiedades y mtodos. Normalmente puede utilizar la lista Clases del Examinador de objetos para buscar nombres de clase disponibles. Las variables del tipo de datos Object pueden apuntar tambin a datos de cualquier tipo. Esto significa que puede asignar una variable, constante o expresin de cualquier tipo de datos a una variable Object. Para determinar el tipo de datos al que hace referencia la
Nota El signo igual (=) de este ejemplo es un operador de asignacin, no un operador de igualdad. El valor se asigna a la variable ApplesSold.
PGINA 51
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
y sus valores se pierden. No obstante, si se declara una variable local con la palabra clave Static, sta seguir existiendo y conservar su valor aunque finalice el procedimiento. Las variables de mdulo, compartidas y de instancia conservan sus valores mientras contine la ejecucin de la aplicacin.
PGINA 52
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN una variable por los mismos motivos que asigna un valor a una variable: Un nombre de variable suele ser ms corto y ms fcil de recordar que la ruta de acceso completa a los mtodos o propiedades necesarios para obtener acceso al propio objeto. El uso de una variable que hace referencia a un objeto es ms eficiente que el acceso reiterado al propio objeto mediante los mtodos o propiedades adecuados. Es posible cambiar una variable para que haga referencia a otros objetos durante la ejecucin del cdigo. Las variables de objeto permiten reducir la cantidad de cdigo que hay que escribir. Por ejemplo, podra encontrarse ante un segmento de cdigo como el siguiente:
' Hay que asumi que Me es un Form vlido, o reemplazar Me con un Form vlido. Me.Activate() ' Activa el formulario. Me.ActiveControl = Label1 ' Activa algn control del formulario. ' ... Me.ActiveForm.ActiveControl.Text = "Test" Me.ActiveForm.ActiveControl.Location = New Point(100, 100) Me.ActiveForm.ActiveControl.Show()
argumentos del procedimiento y los valores devueltos de las funciones como casos especiales de las variables. El perodo de duracin de una variable representa el tiempo durante el cual puede contener un valor. Su valor puede variar en su perodo de duracin, pero siempre contiene un valor.
Podra abreviar este segmento de cdigo utilizando una variable de objeto para el control, con lo que aumentara la rapidez de su ejecucin. Es conveniente que declare la variable de objeto con la clase concreta que desee asignarle (Control en el ejemplo siguiente). Una vez que haya asignado un objeto a la variable, podr tratarla exactamente igual que al objeto al que hace referencia. Tambin puede establecer o devolver las propiedades del objeto o utilizar cualquiera de sus mtodos, como en el ejemplo siguiente:
Dim ctrlBal As Control ' Must declare to be of class Control. ' ... ctrlBal = Me.ActiveForm.ActiveControl ctrlBal.Text = "Test" ctrlBal.Location = New Point(100, 100) ctrlBal.Show()
Las variables declaradas en un bloque de un procedimiento se inicializan a su valor predeterminado cuando entran en el procedimiento. Dichas inicializaciones tienen lugar se ejecute o no el bloque.
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN recupera la memoria utilizada para los elementos locales. La siguiente vez que se ejecute el procedimiento, se crearn de nuevo todos sus elementos locales y se inicializarn las variables locales. Cuando finaliza una instancia de una clase o una estructura, se pierde el valor de sus variables no compartidas. Cada nueva instancia de la clase o la estructura crea todos sus elementos no compartidos e inicializa las variables no compartidas. Los elementos Shared se conservan hasta que finaliza la ejecucin de la aplicacin.
5.3.2 mbito
El mbito de un elemento declarado es el conjunto de cdigo que puede hacerle referencia sin calificar su nombre o marcarlo como disponible mediante una instruccin Imports. Un elemento puede tener uno de los niveles de mbito siguientes: mbito de bloque: disponible nicamente en el bloque de cdigo en el que se ha declarado. mbito de procedimiento: disponible nicamente dentro del procedimiento en el que se ha declarado. mbito de mdulo: disponible en todo el cdigo del mdulo, la clase o la estructura donde se ha declarado. mbito de espacio de nombres: disponible en todo el cdigo del espacio de nombres. Estos niveles de mbito progresan desde el ms restringido (bloque) al ms amplio (espacio de nombres), donde mbito ms restringido significa el conjunto de cdigo ms pequeo que puede hacer referencia al elemento sin calificacin. El mbito de un elemento se especifica al declararlo y puede depender de los factores siguientes: La regin (bloque, procedimiento, mdulo, clase o estructura) donde se declara el elemento. El espacio de nombres que contiene la declaracin del elemento. La accesibilidad que se declara para el elemento. Tenga cuidado cuando defina variables del mismo nombre pero con mbito diferente, puesto que ello podra causar resultados inesperados. Eleccin del mbito de una variable El mbito de una variable est formado por todo cdigo que puede hacer referencia a la variable sin tener que especificar su nombre. El mbito de una variable est determinado por la ubicacin en la que se haya declarado la variable. En lo que se refiere al mbito, es importante tener en cuenta que las variables locales son una opcin idnea para cualquier tipo de clculo provisional. Slo consumen memoria cuando se ejecuta el procedimiento, y sus nombres no son susceptibles de entrar en conflicto. Por ejemplo, es posible crear varios procedimientos distintos que contengan una PGINA 54
Si ApplesSold se hubiera declarado sin utilizar Static, los valores acumulados anteriormente no se habran conservado despus de las llamadas a la funcin, y sta sencillamente habra devuelto el mismo valor con el que se le llam. Puede generar el mismo perodo de duracin si declara ApplesSold en el nivel de mdulo. No obstante, si cambia de esta forma el mbito de una variable, el procedimiento dejar de tener acceso exclusivo a l. Dado que otros procedimientos podran tener acceso a la variable y cambiar su valor, el total acumulado no sera confiable, lo que podra dificultar el mantenimiento del cdigo.
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN variable denominada intTemp. En tanto que intTemp est declarado como una variable local, cada procedimiento reconocer nicamente su propia versin de intTemp. Cualquier procedimiento puede cambiar el valor de su variable intTemp local sin que ello afecte a las variables intTemp del resto de los procedimientos. Nota Las variables de mdulo, compartidas, de instancia y estticas consumen recursos de memoria hasta que finaliza la ejecucin de la aplicacin, por lo que no conviene utilizarlas si no es realmente necesario. En general, cuando se declara una variable o una constante, es un buen hbito de programacin asignar un mbito lo ms restringido posible (el mbito de un bloque es el ms restringido). Esto permite que no se pierda memoria y reduce al mnimo la posibilidad de que el cdigo haga referencia por error a una variable incorrecta. Del mismo modo, slo debera declararse una variable como Static si es necesario que conserve su valor entre una llamada al procedimiento y otra. dentro de la misma clase o desde una clase derivada de ella. El cdigo siguiente muestra un ejemplo de declaracin Protected:
Protected Class ClassForMyHeirs
Slo puede utilizar Protected en el nivel de clase, y solamente cuando declare un miembro de una clase.
5.3.3.3 Friend
La palabra clave Friend de la instruccin Dim declara elementos como accesibles desde dentro del mismo proyecto, pero no desde fuera de l. El cdigo siguiente muestra un ejemplo de declaracin Friend:
Friend StringForThisProject As String
5.3.3 Accesibilidad
La accesibilidad de un elemento declarado es la capacidad para utilizarlo; es decir, el permiso para que el cdigo pueda leerlo o modificarlo. Est determinada no solamente por cmo se declara el propio elemento, sino tambin por la accesibilidad del contenedor del elemento. Si el elemento contenedor no est accesible, tampoco lo estarn los elementos contenidos, aunque se hayan declarado como Public. Por ejemplo, una variable Public de una estructura Private est accesible desde el interior de la clase que contiene la estructura, pero no desde el exterior.
Puede utilizar Friend solamente en el nivel de mdulo, espacio de nombres o archivo. Esto es, puede declarar un elemento de tipo amigo en un archivo de cdigo fuente o dentro de un mdulo, una clase o una estructura, pero no dentro de un procedimiento. Protected Friend La palabra clave Protected junto con la palabra clave Friend en la instruccin Dim declaran elementos como accesibles desde clases derivadas o desde dentro del mismo proyecto, o ambos. El cdigo siguiente muestra un ejemplo de declaracin Protected Friend:
Protected Friend StringForProjectAndHeirs As String
Slo puede utilizar Protected Friend en el nivel de clase, y solamente cuando declare un miembro de una clase.
5.3.3.4 Private
La palabra clave Private en la instruccin Dim declara elementos como accesibles solamente desde dentro del mismo mdulo, clase o estructura. El cdigo siguiente muestra un ejemplo de declaracin Private:
Private NumberForMeOnly As Integer
5.3.3.1 Public
La palabra clave Public de la instruccin Dim declara elementos como accesibles desde cualquier parte del mismo proyecto, desde otros proyectos que hagan referencia al proyecto, y desde un ensamblado generado a partir del proyecto. El cdigo siguiente muestra un ejemplo de declaracin Public:
Public Class ClassForEverybody
Puede utilizar Public solamente en el nivel de mdulo, espacio de nombres o archivo. Esto es, puede declarar un elemento pblico en un archivo de cdigo fuente o dentro de un mdulo, clase o estructura, pero no dentro de un procedimiento.
Puede utilizar Private solamente en el nivel de mdulo, espacio de nombres o archivo. Esto es, puede declarar un elemento privado en un archivo de cdigo fuente o dentro de un mdulo, clase o estructura, pero no dentro de un procedimiento. Nota En el nivel de mdulo, la instruccin Dim sin palabras clave de accesibilidad equivale a una declaracin Private. No obstante, podra convenirle usar la palabra clave Private para facilitar la lectura y la interpretacin del cdigo.
5.3.3.2 Protected
La palabra clave Protected de la instruccin Dim declara elementos como accesibles solamente desde
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN durante la ejecucin de una aplicacin. El uso de constantes puede hacer ms legible el cdigo, puesto que se utilizan nombres significativos en lugar de nmeros. Las enumeraciones proporcionan una forma cmoda de trabajar con conjuntos de constantes relacionadas y de asociar valores de constantes con nombres. Por ejemplo, se puede declarar una enumeracin para un conjunto de constantes de tipo entero asociadas con los das de la semana, y despus utilizar los nombres de los das en el cdigo en lugar de sus valores enteros. Una constante puede declararse dentro de un procedimiento o en la seccin de declaraciones de un mdulo, clase o estructura. Las constantes de nivel de clase o de estructura son de tipo Private de manera predeterminada, pero tambin se pueden declarar como Public, Friend, Protected o Protected Friend segn el nivel apropiado de acceso al cdigo. La constante debe tener un nombre simblico vlido (las reglas son las mismas que se aplican para la creacin de nombres de variables) y una expresin que se componga de constantes numricas o de cadena, y operadores; no obstante, no se pueden utilizar llamadas a funciones. Para declarar una constante Escriba una declaracin que incluya un especificador de acceso, la palabra clave Const y una expresin, como en los ejemplos siguientes:
Public Const DaysInYear = 365 Private Const WorkDays = 250
5.4.1 Constantes
A menudo el cdigo contiene valores constantes que vuelven a aparecer. Tambin puede ocurrir que el cdigo dependa de ciertos nmeros difciles de recordar o cuyo significado no sea evidente. En estos casos, puede mejorar considerablemente la legibilidad del cdigo y facilitar su mantenimiento mediante constantes. Una constante es un nombre significativo que toma el lugar de un nmero o cadena que no cambia. Las constantes almacenan valores que, como su nombre indica, permanecen constantes durante la ejecucin de una aplicacin. Las constantes se declaran con la instruccin Const, utilizando las mismas directrices que en la creacin de nombres de variables. Si Option Strict est On, debe declarar explcitamente el tipo de constante. El mbito de una constante es el mismo que el de una variable declarada en la misma ubicacin. Para crear una constante que exista en el mbito de un procedimiento concreto, declrela dentro de dicho procedimiento. Para crear una constante disponible en toda la aplicacin, declrela con la palabra clave Public en la seccin de declaraciones de la clase. Nota Aunque las constantes son de algn modo similares a las variables, no se pueden modificar ni asignrsele valores como a stas ltimas. Las constantes que se utilizan en el cdigo pueden ser intrnsecas al modelo de objeto para los controles o componentes con los que trabaja o definidas por el usuario, es decir, creadas por ste.
Si Option Strict est On, debe declarar una constante de forma explcita especificando un tipo de datos (Boolean, Byte, Char, DateTime, Decimal, Double, Integer, Long, Short, Single o String). Si Option Strict est Off, el compilador asigna un tipo de datos a la constante. Para declarar una constante con Option Strict On Con Option Strict On, escriba una declaracin que incluya la palabra clave As y un tipo de datos explcito, como en los siguientes ejemplos:
Option Strict On Public Const MyInteger As Integer = 42 Private Const DaysInWeek As Short = 7 Protected Friend Const Funday As String = "Sbado"
Pueden declararse varias constantes en una sola lnea, si bien para facilitar la lectura del cdigo se recomienda declarar solamente una constante por lnea. Si declara varias constantes en una sola lnea, todas ellas deben tener el mismo nivel de acceso (Public, Private, Friend, Protected, o Protected Friend). Para declarar varias constantes en una sola lnea Separe las declaraciones con una coma y un espacio, como en el ejemplo siguiente:
Public Const Four As Integer = 4, Five As Integer = 5, Six As Integer = 44
PGINA 56
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
5.4.2 Enumeraciones
Las enumeraciones proporcionan una forma cmoda de trabajar con conjuntos de constantes relacionadas y de asociar valores de constantes con nombres. Por ejemplo, se puede declarar una enumeracin para un conjunto de constantes de tipo entero asociadas con los das de la semana, y despus utilizar los nombres de los das en el cdigo en lugar de sus valores enteros. Una enumeracin se crea con la instruccin Enum en la seccin de declaraciones de una clase o mdulo. Un tipo Enum tiene un nombre, un tipo subyacente y un conjunto de campos, cada uno de los cuales representa una constante. El nombre debe ser un calificador de Visual Basic .NET vlido. El tipo subyacente puede ser uno de los tipos enteros: Byte, Short, Long o Integer. Integer es el valor predeterminado. Las enumeraciones tienen siempre establecimiento inflexible de tipos y no son intercambiables con los tipos de nmeros enteros. Puede asignarse el mismo valor a varios campos. Al hacerlo, el compilador marca uno de los valores Enum como principal para la conversin y reflexin de cadenas. Se pueden asignar explcitamente valores a constantes en una enumeracin mediante una instruccin de asignacin. Se admiten todos los valores enteros, incluidos los nmeros negativos.
denominada Lunes con el valor 1, una constante denominada Martes con el valor 2, etc.:
Public Enum Days Domingo Lunes Martes Mircoles Jueves Viernes Sbado End Enum
Se pueden asignar explcitamente valores a constantes en una enumeracin mediante una instruccin de asignacin. Se puede asignar cualquier valor entero, incluidos nmeros negativos. Por ejemplo, puede que desee que las constantes con valores menores que cero representen condiciones de error. En la siguiente enumeracin, a la constante Invalido se le asigna explcitamente el valor 1, y a la constantes Domingo se le asigna el valor 0. Debido a que es la primera constante de la enumeracin, Sbado tambin se inicializa con el valor 0. El valor de Lunes es 1 (el valor de Domingo ms uno); el valor de Martes es 2, y as sucesivamente.
Public Enum WorkDays Sbado Domingo = 0 Lunes Martes Miercoles Jueves Viernes Invalido = -1 End Enum
Las enumeraciones son de tipo Integer de manera predeterminada. Puede declararlas explcitamente como Integer, Short, Long o Byte. Para declarar una enumeracin explcitamente Escriba una declaracin con la sintaxis siguiente:
Public Enum MyEnum As Byte Zero One Two End Enum
De manera predeterminada, la primera constante de una enumeracin se inicializa con 0 y las siguientes se inicializan con un valor igual al de la constante anterior ms uno. Por ejemplo, la siguiente enumeracin, Days, contiene una constante denominada Domingo con el valor 0, una constante
Las enumeraciones no pueden tener valores de punto flotante. Si se asigna un valor de punto flotante a una enumeracin con Option Strict On, se producir un error del compilador. Si Option Strict est Off, el valor se convierte automticamente al tipo Enum.
PGINA 57
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
5.5 Matrices
Las matrices permiten hacer referencia a una serie de variables mediante un mismo nombre y utilizar un nmero, denominado ndice o subndice, para distinguirlas. De esta forma, se puede crear un cdigo ms simple y reducido en muchos casos, ya que es posible utilizar bucles que usen el ndice para procesar eficientemente cualquier nmero de elementos de la matriz. Dimensiones de matriz Las matrices pueden tener una o varias dimensiones. La dimensin (el rango) de la matriz corresponde al nmero de subndices que se utilizan para identificar un elemento individual. Se pueden especificar hasta 32 dimensiones, aunque no es habitual tener ms de tres. Tamao de matriz Cada dimensin de una matriz tiene una longitud distinta de cero. Los elementos de la matriz son contiguos en cada dimensin, desde 0 hasta el mayor valor del subndice de esa dimensin. Puesto que Visual Basic asigna espacio para todos los elementos de una matriz, se debe evitar declarar una matriz mayor de lo necesario. Una matriz de longitud cero es una matriz sin elementos. A veces resulta necesario especificar matrices de este tipo, por ejemplo al utilizar formularios Windows Forms. Para hacerlo, declare una de las dimensiones de la matriz como 1. La matriz estar vaca, pero existir. En consecuencia, una variable que apunte a la matriz no ser igual a Nothing. Las matrices de Visual Basic no tienen un tamao fijo. Despus de haber creado una matriz, se puede cambiar su tamao. La instruccin ReDim asigna un objeto matriz completamente nuevo a la variable matriz especificada. Por consiguiente, ReDim puede cambiar la longitud de cada dimensin.
No se considera que dos variables de matrices son del mismo tipo de datos a no ser que tengan el mismo rango y elemento de tipo de datos.
PGINA 58
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Para declarar una variable de matriz multidimensional En la declaracin, agregue un par de parntesis detrs del nombre de la variable y coloque comas dentro de los parntesis para separar las dimensiones, tal y como muestra el siguiente ejemplo:
Dim My4DArray(,,,) As Short ' Four-dimensional array. Dim BA() As Byte = New Byte() {0,1,2} ' (0) through (2). Dim BA() As Byte = New Byte(2) {0,1,2} ' (0) through (2).
Una variable de matriz multidimensional se puede inicializar de forma similar. En las siguientes declaraciones de ejemplo se muestra una variable de matriz bidimensional declarada como una matriz de tipo Short con 2 filas y 2 columnas.
Dim S2X2(1, 1) As Short ' (0) through (1), (0) through (1). Dim S2X2(1, 1) As Short = New Short(,) ' INVALID (New after lengths). Dim S2X2(,) As Short = New Short(,) ' INVALID (missing braces). Dim S2X2(,) As Short = New Short(1, 1) ' INVALID (missing braces). Dim S2X2(,) As Short = New Short(,) {} ' Empty array object. Dim S2X2(,) As Short = New Short(1, 1) {} ' Elements have default value. Dim S2X2(,) As Short = New Short(,) {{5, 6}, {7, 8}} ' Four elements.
Para declarar una variable de matriz escalonada En la declaracin, agregue tantos pares de parntesis detrs del nombre de la variable como niveles de matrices anidadas haya, tal y como se ve en el siguiente ejemplo:
Dim MyJaggedArray()()() As Byte arrays. ' Array of arrays of Byte
El primer argumento representa las filas; el segundo, las columnas. En las matrices de las declaraciones anteriores, los valores del ndice varan entre 0 y 1 tanto para las filas como para las columnas. Al inicializar una variable de matriz escalonada, slo puede especificar las longitudes de dimensin para la matriz del nivel superior. En las siguientes declaraciones de ejemplo se muestra la sintaxis correcta e incorrecta para una matriz de matrices con elementos de tipo Byte:
Dim JB(1)() As Byte ' Matriz de dos matrices de elementos Byte. Dim JB(1)(1) As Byte ' INVALIDO (slo puede especificar el tamao del nivel superior). Dim JB(1)() As Byte = New Byte()() ' INVALIDO (palabra clave New despus del tamao). Dim JB()() As Byte = {New Byte() {}, New Byte() {}} ' Matriz vaca. Dim JB()() As Byte = {New Byte(1) {}, New Byte(1) {}} ' Valores por defecto. Dim JB()() As Byte = {New Byte() {5, 6}, New Byte() {7, 8}}
En la ltima de las declaraciones anteriores, JB se inicializa en dos elementos, JB(0) y JB(1), cada uno de los cuales se inicializa en una matriz de tipo Byte de dos elementos, la primera con los valores de los elementos 5 y 6 y la segunda con los elementos 7 y 8. Lmites de tamao de matriz La longitud de cada dimensin de una matriz se limita al valor mximo del tipo de datos Long, el cual es (2 ^ 64) - 1. El lmite de tamao total de una matriz vara, segn el sistema operativo y la cantidad de memoria disponible. El uso de una matriz que supere la cantidad de RAM disponible en el sistema ser ms lento, ya que las operaciones de lectura y escritura debern realizarse en el disco.
PGINA 59
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Nota Puesto que en Visual Basic .NET las matrices son objetos, es importante distinguir entre un objeto de matriz y una variable de matriz. Un objeto matriz, una vez creado, no cambia de tamao o rango. Sin embargo, una variable de matriz puede recibir la asignacin de diferentes matrices de distintos tamaos y rangos durante su existencia. comparacin, que determina cul de dos valores es mayor; una operacin lgica, que evala si dos expresiones son ambas verdaderas. Los operadores combinados con elementos de cdigo que devuelven valores como literales o variables forman expresiones o, en el caso del operador de asignacin, instrucciones. El siguiente es un ejemplo de una instruccin que utiliza el operador de asignacin simple (=):
x = 45
En el ejemplo anterior, el operador de asignacin realiza la operacin de asignacin: toma el valor del lado derecho del operador y lo asigna a la variable del lado izquierdo. Varios operadores pueden realizar acciones en una expresin o instruccin simples, como se demuestra a continuacin:
x = 45 + y * z ^ 2
En este ejemplo, se realizan las operaciones de la expresin situada a la derecha del operador de asignacin y el valor resultante se asigna a la variable x, situada a la izquierda. No existe lmite en cuanto al nmero de operadores que se pueden combinar en una expresin, pero debe comprender la Prioridad de operadores en Visual Basic para asegurarse de que obtendr los resultados previstos.
En una matriz de varias dimensiones, cuando se utiliza Preserve, slo se puede cambiar la ltima dimensin. Si se intenta cambiar cualquiera de las otras dimensiones, se produce un error en tiempo de ejecucin. Si no se conoce el tamao real de una dimensin, se puede utilizar el mtodo GetUpperBound, que devuelve el valor de subndice ms alto de la dimensin especificada. En el siguiente ejemplo, la primera lnea es vlida, pero no la segunda, ya que intenta cambiar la primera dimensin de las dos existentes.
ReDim Preserve Matrix(Matrix.GetUpperBound(0), Matrix.GetUpperBound(1) + 10) ReDim Preserve Matrix(Matrix.GetUpperBound(0) + 10, Matrix.GetUpperBound(1))
5.6 Operadores
Un operador es una unidad de cdigo que realiza una operacin sobre uno o ms elementos de cdigo que devuelven valores. Tal operacin puede ser una operacin aritmtica, como una suma o una multiplicacin; una operacin de concatenacin, que combina dos cadenas en una nueva; una operacin de
La negacin tambin utiliza el operador -, pero con una sintaxis algo diferente, como se muestra a continuacin:
Dim x As Integer = 65 Dim y As Integer y = -x
PGINA 60
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
y = 32 / 23
inesperada de datos o de precisin. Por este motivo, se recomienda utilizar Option Strict On para escribir cdigo de produccin.
La divisin de enteros se lleva a cabo con el operador \. La divisin de enteros devuelve el nmero de veces que un entero puede dividirse exactamente en otro. Con este operador, slo se pueden utilizar tipos enteros (Byte, Short, Integer y Long). Todos los dems tipos deben convertirse antes a tipo integral. A continuacin se muestra un ejemplo de una divisin de enteros:
Dim k As Integer k = 23 \ 5 ' k = 4
El mdulo aritmtico se calcula con el operador Mod. Este operador devuelve el resto una vez que se divide el divisor por el dividendo un nmero integral de veces. Si tanto el divisor como el dividendo son tipos integrales, el valor devuelto es integral. Si el divisor y el dividendo son tipos de punto flotante, el valor devuelto es una variable de punto flotante. Dos ejemplos ilustran este comportamiento:
Dim x As integer = 100 Dim y As Integer = 6 Dim z As Integer z = x Mod y ' z equals 4. Dim a As Double = 100.3 Dim b As Double = 4.13 Dim c As Double c = a Mod b ' c equals 1.18.
variables
Si el valor de Option Strict es On, el operador + requiere explcitamente cadenas para las operaciones de concatenacin. Tambin realiza operaciones aritmticas con operandos numricos cuando el valor de Option Strict es On. No obstante, si el valor de Option Strict es Off, el operador + admite una amplia variedad de conversiones implcitas para operaciones de concatenacin. El operador & slo se define para operandos de tipo String y siempre ampla sus operandos a String, independientemente de la configuracin de Option Strict. El operador & est recomendado para la concatenacin de cadenas, porque est definido exclusivamente para cadenas y reduce las posibilidades de generar una conversin no deseada.
PGINA 61
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN tabla se muestran los operadores y un ejemplo de la condicin que prueba cada uno. Operador Condicin que Ejemplos prueba = (Igualdad) Es el valor que 23 = representa la False 23 = primera True expresin igual 23 = que el valor que False representa la segunda?
33 23 ' '
12 '
Es el valor que 23 <> 33 <> (Desigualdad) representa la True 23 <> 23 primera False expresin no 23 <> 12 igual que el True valor que representa la segunda? < (Less than) Es el valor que 23 < representa la True 23 < primera False expresin 23 < menor que el False valor que representa la segunda? > (Mayor Es el valor que 23 > que) representa la False 23 > primera False expresin 23 > mayor que el True valor que representa la segunda?
33 23
El resultado es True porque el primer carcter de la primera cadena se ordena antes que el primer carcter de la segunda cadena. Si los primeros caracteres fueran iguales, la comparacin continuara con el siguiente carcter de las dos cadenas, y as sucesivamente. La igualdad de cadenas tambin se puede probar mediante el operador de igualdad, como en este ejemplo:
"734" = "734" ' The result is True.
' '
12 '
En este ejemplo, las dos cadenas se comparan directamente y, puesto que son iguales, se devuelve True. Si una cadena es un prefijo de otra, como "aa" y "aaa", la cadena ms larga se ordena despus de la ms corta. Por tanto, la siguiente expresin es verdadera (True):
"aaa" > "aa"
El criterio de ordenacin se basar en una comparacin binaria o una comparacin textual en funcin del valor de Option Compare.
33 23 ' '
12 '
<= (Menor o Es el valor que 23 <= 33 igual que) representa la True 23 <= 23 primera True expresin 23 <= 12 menor o igual False que el valor que representa la segunda? >= (Mayor o Es el valor que 23 >= 33 igual que) representa la False 23 >= 23 primera True expresin 23 >= 12 mayor o igual True que el valor que representa la segunda?
En este ejemplo, la evaluacin de x Is y devuelve True, porque las dos variables hacen referencia a la misma instancia. Compare este resultado con el del ejemplo siguiente:
Dim x As New MyClass() Dim y As New MyClass() If x Is y then ' Insert code to continue program execution.
En este ejemplo, la evaluacin de x Is y devuelve False, puesto que aunque las variables son del mismo tipo, hacen referencia a instancias diferentes de ese tipo. Para probar si un objeto es de un tipo concreto se utiliza el operador TypeOf...Is. . La sintaxis es la siguiente: PGINA 62
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
TypeOf <object expression> Is <TypeName>
Cuando TypeName especifica un tipo de interfaz, el operador TypeOf ... Is devuelve True si el objeto implementa el tipo de interfaz. Cuando TypeName es un tipo de clase, el operador devuelve True (verdadero) si el objeto es una instancia de la clase especificada o una instancia que se deriva de la especificada. Por ejemplo:
Dim x As Button x = New Button() If TypeOf x Is Control Then ' Insert code to continue program execution.
Puesto que el tipo de x es Button, y Button hereda de Control, la expresin TypeOf x Is Control se evala como True.
x = 12 > 23 And 12 > 4 ' x = False x = 23 > 12 Or 4 > 12` ' x = True x = 23 > 45 Or 4 > 12 ' x = False x = 23 > 45 Xor 12 > 4 ' x = True x = 23 > 12 Xor 12 > 4 ' x = False x = 12 > 23 Xor 4 > 12 ' x = False Nota Adems de ser operadores lgicos, Not, Or, And y Xor tambin realizan operaciones aritmticas bit a bit cuando se utilizan en valores numricos. Puede encontrar informacin sobre esta funcionalidad en Operadores aritmticos. El operador AndAlso es muy similar al operador And, ya que tambin realiza la conjuncin lgica de dos expresiones Boolean. La diferencia clave entre AndAlso y And es que AndAlso muestra comportamiento de corto-circuito. Si el valor de la primera expresin evaluada de una expresin AndAlso es False, no se evaluar la segunda expresin y se devolver False para la expresin AndAlso. De manera similar, el operador OrElse realiza la disyuncin lgica de evaluacin "cortocircuitada" de dos expresiones Boolean. Si la evaluacin de la primera expresin de una expresin OrElse devuelve True, no se evaluar la segunda expresin y se devolver True para la expresin OrElse. A continuacin se muestran algunos ejemplos que ilustran la diferencia entre And, Or y sus equivalentes: 12 > 45 And MyFunction(4) ' MyFunction() is called. 12 > 45 AndAlso MyFunction(4) ' MyFunction() is not called. 45 > 12 Or MyFunction(4) ' MyFunction is called. 45 > 12 OrElse MyFunction(4) ' MyFunction is not called En el primer ejemplo, se llama a MyFunction() aunque 12 > 45 devuelve False, debido a que no se "cortocircuita" la evaluacin de And. En el segundo ejemplo, no se llama a MyFunction porque 12 > 45 devuelve False, con lo cual AndAlso "cortocircuita" la evaluacin de la segunda expresin. En el tercer ejemplo, se llama a MyFunction aunque 45 > 12 devuelve True, debido a que no se "cortocircuita" la evaluacin de Or. En el cuarto ejemplo, no se llama a MyFunction porque 45 > 12 devuelve True, con lo cual OrElse "cortocircuita" la evaluacin de la segunda expresin. Nota Aunque And y Or admiten operaciones bit a bit con valores numricos, AndAlso y OrElse no lo hacen. PGINA 63
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN A menudo, desea que la ejecucin de las operaciones se realice en un orden diferente del que determina la prioridad de operador. Considere este ejemplo:
x=z*y+4
eficaz
de
Las expresiones complejas pueden contener muchos operadores diferentes. Considere la siguiente instruccin:
x = (45 * (y + z)) ^ (2 / 85) * 5 + z
La creacin de expresiones complejas como stas requiere comprender a fondo las reglas de prioridad de operador. En este tema, que le ayudar a construir expresiones eficientes, se presupone que est familiarizado con las reglas de prioridad de operador.
En este ejemplo, z se multiplica por y, y a continuacin el resultado se suma a 4. Pero, qu ocurre si se desean sumar y y 4 antes de multiplicar por z? En tal caso, puede anular la prioridad de operador mediante parntesis. Si escribe una expresin entre parntesis, fuerza a que dicha expresin se evale primero, independientemente de la prioridad de operador. As, para forzar a la expresin anterior a que evale primero la suma, volvera a escribir el ejemplo de la siguiente manera:
x = z * (y + 4)
Ahora el valor de y se suma a 4 y esa suma se multiplica por z. Puede anidar expresiones en mltiples niveles para forzar ms la prioridad. A las expresiones con mayor profundidad de anidamiento se les concede prioridad principal, seguidas de las expresiones de menor profundidad de anidamiento y as sucesivamente. Observe el ejemplo siguiente:
x = (z * 4) ^ (y * (z + 2))
Aqu, z + 2 tiene prioridad principal, y despus tienen prioridad las dems expresiones entre parntesis. La exponenciacin, que generalmente tiene mayor prioridad que la suma o la multiplicacin, se evala en ltimo lugar debido a que las otras expresiones estn escritas entre parntesis.
En este ejemplo, las operaciones aritmticas se realizan mediante el operador +, las de comparacin con los operadores > y <, y las lgicas con el operador And. Cuando se evalan expresiones con diferentes clases de operadores, normalmente la prioridad estndar de operadores determina el orden de la operacin.
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN la prueba. Puede comprobar si una condicin es verdadera o falsa, los distintos valores de una expresin o las diferentes excepciones que se generan al ejecutar una serie de instrucciones. Las instrucciones de decisin que admite Visual Basic incluyen: If...Then If...Then...Else Select...Case Try...Catch...Finally Puede utilizar If...Then...Else con la instruccin Else para definir dos bloques de instrucciones ejecutables. Si el valor de la condicin es True, se ejecuta un bloque, y si es False, se ejecuta el otro.
Dim AlertLabel As New System.Windows.Forms.Label ' ... Sub AlertUser(ByVal Value As Long) If Value = 0 Then AlertLabel.ForeColor = Color.Red AlertLabel.Font = New Font(AlertLabel.Font, _ FontStyle.Bold Or FontStyle.Italic) Else AlertLabel.Forecolor = Color.Black AlertLabel.Font = New Font(AlertLabel.Font, _ FontStyle.Regular) End If End Sub
Probar condiciones adicionales si la primera condicin es False Puede agregar una o ms instrucciones ElseIf a If...Then...Else para probar condiciones adicionales si la primera condicin es False. Por ejemplo, el siguiente procedimiento Function calcula una bonificacin en la nmina basndose en el nivel de rendimiento. La instruccin que sigue a la instruccin Else slo se ejecutar si el valor de las condiciones de todas las instrucciones If y ElseIf es False.
Function Bonus(ByVal Performance As Integer, ByVal Salary As Decimal) _ As Decimal If Performance = 1 Then Return Salary * 0.1 ElseIf Performance = 2 Then Return Salary * 0.09 ElseIf Performance = 3 Then Return Salary * 0.07 Else Return 0 End If End Function
Para ejecutar ms de una lnea de cdigo cuando la condicin es True se utiliza la sintaxis de varias lneas, que incluye la instruccin End If. Si no existe cdigo que ejecutar cuando la condicin es False, se omite la instruccin Else, como se muestra en el ejemplo siguiente:
Dim AlertLabel As New System.Windows.Forms.Label ' ... Sub AlertUser(ByVal Value As Long) If Value = 0 Then AlertLabel.ForeColor = Color.Red AlertLabel.Font = New Font(AlertLabel.Font, _ FontStyle.Bold Or FontStyle.Italic) End If End Sub
Visual Basic prueba las condiciones en el orden en que aparecen en las pruebas de las instrucciones If...Then...Else hasta que encuentra una condicin True o una instruccin Else, cuando esto ocurre ejecuta el bloque de instrucciones correspondiente. La ejecucin realiza entonces una bifurcacin al final del bloque If...Then...Else. Puede existir un nmero arbitrario de instrucciones ElseIf o ninguna. Puede incluirse u omitirse una instruccin Else independientemente de que existan instrucciones ElseIf. Las instrucciones If...Then...Else se pueden anidar a tantos niveles como sea necesario. No obstante, es PGINA 65
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN posible que en favor de la legibilidad, desee utilizar instrucciones Select...Case en lugar de varios niveles de instrucciones If...Then...Else anidadas o muchas instrucciones ElseIf.
Si se incluye la instruccin opcional Finally, el bloque de instrucciones correspondiente es siempre el ltimo cdigo que se ejecuta inmediatamente antes de que el control abandone Try...Catch...Finally. Esto es as, aunque se produzca una excepcin no controlada o se ejecute una instruccin Exit Try.
PGINA 66
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Puede utilizarse cualquier nmero de instrucciones Catch e incluirse u omitirse una instruccin Finally. No obstante, debe utilizarse al menos una instruccin Catch o una instruccin Finally. No es posible bifurcar fuera de un bloque Try, en un bloque Catch o dentro o fuera de un bloque Finally. Puede bifurcar de un bloque Catch a un bloque Try asociado con ese bloque Catch. Por ejemplo, si una construccin Try...Catch...Finally est anidada dentro de otra, un bloque Catch puede bifurcar al bloque Try de su propio nivel de anidamiento, pero no a ningn otro bloque Try. En el ejemplo siguiente, Try...Catch...Finally intenta calcular la fecha y la hora de 100 aos exactamente a partir del valor que se proporciona en la variable GivenDate de Object:
Dim GivenDate As Object ' Should contain date/time information. Dim NextCentury As Date Try NextCentury = DateAdd("yyyy", 100, GivenDate) Catch ThisExcep As System.ArgumentException ' At least one argument has an invalid value. Catch ThisExcep As ArgumentOutOfRangeException ' The result is later than December 31, 9999. Catch ThisExcep As InvalidCastException ' GivenDate cannot be interpreted As a date/time. Catch ' An unforeseen exception has occurred. Finally ' This block is always executed before leaving. End Try
Las excepciones que se pueden prever a partir de la funcin DateAdd se pueden controlar en los tres primeros bloques Catch, adems se puede tratar cualquier excepcin imprevista en el ltimo bloque Catch. Con independencia de lo que suceda, el bloque Finally es siempre el cdigo que se ejecuta en ltimo lugar antes de abandonar Try...Catch...Finally. Si ThisExcep no aparece en una instruccin de declaracin como Dim, la instruccin Catch con la clusula As sirve como declaracin de la variable de excepcin.
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Dim Number As Integer = 8 While Number <> 10 If Number < 0 Then Exit While Number = Number - 1 Counter = Counter + 1 End While MsgBox("The loop ran " & Counter & " times.") ' Runs 9 times. End Sub Nota Para detener un bucle sin fin, presione ESC o CTRL+INTER. MsgBox("The loop ran " & Counter & " times.") ' Runs 4 times. End Sub ' ... Sub CheckWhileLast() Dim Counter As Integer = 0 Dim Number As Integer = 5 Do Number = Number - 1 Counter = Counter + 1 Loop While Number > 6 MsgBox("The loop ran " & Counter & " times.") ' Runs 1 time. End Sub Repetir instrucciones hasta que una condicin sea True Hay dos maneras de utilizar la palabra clave Until para comprobar una condicin en un bucle Do. Puede comprobar la condicin antes de entrar en el bucle o comprobarla despus de que el bucle se haya ejecutado al menos una vez. La ejecucin en bucle contina mientras la condicin permanezca en False. En el ejemplo siguiente, el procedimiento CheckUntilFirst comprueba la condicin antes de entrar en el bucle. Si Number se hubiera inicializado en 15 y no en 20, las instrucciones del bucle nunca se ejecutaran. En el procedimiento CheckWhileLast, las instrucciones del bucle se ejecutan una vez antes de comprobar la condicin, que es False en la primera prueba. Sub CheckUntilFirst() Dim Counter As Integer = 0 Dim Number As Integer = 20 Do Until Number = 15 Number = Number - 1 Counter = Counter + 1 Loop MsgBox("The loop ran " & Counter & " times.") ' Runs 5 times. End Sub ' ... Sub CheckUntilLast() Dim Counter As Integer = 0 Dim Number As Integer = 20 Do Number = Number - 1 Counter = Counter + 1 Loop Until Number = 15
PGINA 68
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN MsgBox("The loop ran " & Counter & " times.") ' Runs 5 times. End Sub Salir de un bucle Do desde dentro del bucle Puede transferirse el control fuera de un bucle Do mediante la instruccin Exit Do. Un uso de esta instruccin consiste en comprobar una condicin que pudiera ocasionar un bucle sin fin; es decir, un bucle que pudiera ejecutarse un nmero extremadamente elevado de veces e incluso infinitamente. Si la condicin es True, utilice Exit Do para salir. Si la condicin es False, el bucle contina ejecutndose. En el siguiente ejemplo se asigna a Number un valor que podra ocasionar que el bucle se ejecutara ms de 2 ^ 31 veces. La instruccin If realiza esta comprobacin y sale si existe el valor para evitar un bucle sin fin. Sub ExitDoExample() Dim Counter As Integer = 0 Dim Number As Integer = 8 Do Until Number = 10 If Number <= 0 Then Exit Do Number = Number - 1 Counter = Counter + 1 Loop MsgBox("The loop ran " & Counter & " times.") ' Runs 8 times. End Sub Nota Para detener un bucle sin fin, presione ESC o CTRL+INTER. Reemplazar la instruccin Continue Visual Basic .NET no admite la instruccin Continue de anteriores versiones de Visual Basic. Sin embargo, es posible obtener la misma funcionalidad si se utiliza una etiqueta de instruccin en la instruccin Loop y se bifurca hacia ella desde el interior del bucle: Dim LoopCounter As Integer = 0 Do While LoopCounter < 100 LoopCounter += 1 Dim SkipToNextIteration As Boolean ' Local to this loop. ' Processing, which might change value of SkipToNextIteration. If SkipToNextIteration = True Then GoTo EndOfLoop ' More processing if SkipToNextIteration was still False. EndOfLoop: Loop ' Acts like Continue.
La variable counter debe ser un tipo de datos numrico que admita los operadores mayor o igual que (>=), menor o igual que (<=) y suma (+); generalmente es de tipo Integer. Los valores de iteracin start, end, y step son expresiones que deben evaluarse como tipos de datos que se amplan al tipo de counter. Normalmente tambin son Integer. El valor opcional step puede ser positivo o negativo. Si se omite, se considera que es 1. Si counter no est declarada fuera del bucle, puede utilizar la clusula As para declararla como parte de la instruccin For. Al iniciarse la ejecucin del bucle For...Next, Visual Basic evala start, end y step. Despus asigna start a counter. Antes de ejecutar el bloque de instrucciones, compara counter con end. Si counter ya ha superado el valor final, el bucle For finaliza y el control pasa a la instruccin que sigue a Next. En caso contrario, se ejecuta el bloque de instrucciones. Cada vez que Visual Basic encuentra la instruccin Next, incrementa el contador segn el valor de step y vuelve a la instruccin For. Vuelve a comparar el contador con end, y una vez ms ejecuta el bloque o termina el bucle dependiendo del resultado. Este proceso contina hasta que el contador supera end o se ejecuta una instruccin Exit For. El bucle no termina hasta que counter haya superado el valor final. Si counter es igual a end, el bucle contina. La comparacin que determina si se ejecuta el bloque es counter <= end si step es positivo y counter >= end si step es negativo. Opcionalmente, puede especificarse counter en la instruccin Next. De este modo mejora la legibilidad del programa. La variable que especifique debe ser igual a la que aparece en la instruccin For. El procedimiento siguiente preestablece todos los elementos de una matriz en 128. La instruccin For especifica la variable contadora I y sus valores start y PGINA 69
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN end. La instruccin Next incrementa el contador en 1, porque no se proporciona step.
Sub Preset(ByRef A() As Integer) Dim I As Integer For I = 0 To UBound(A) A(I) = 128 Next I End Sub
si detecta una condicin que hace que sea innecesario o no se pueda continuar la iteracin, como puede ser un valor errneo o una solicitud de finalizacin. Asimismo, si detecta una excepcin en Try...Catch...Finally, puede utilizar Exit For al final del bloque Finally.
Los valores de iteracin start, end y step slo se evalan una vez, antes de iniciarse el bucle. Si el bloque de instrucciones cambia end o step, estos cambios no afectan a la iteracin del bucle. En el ejemplo anterior, la funcin UBound slo se invoca cuando la instruccin For se ejecuta por primera vez. Si el bloque de instrucciones hubiera cambiado posteriormente la longitud de la matriz A, el bucle For seguira utilizando la longitud original como valor final, puesto que no vuelve a llamar a la funcin UBound. Aumentar y disminuir la variable de contador Mediante la palabra clave Step, puede aumentar o disminuir el contador en el valor que especifique. En el siguiente ejemplo, la variable de contador J se incrementa en 2 cada vez que se repite el bucle. Cuando finaliza el bucle, Total es la suma de 2, 4, 6, 8 y 10.
Sub TwosTotal() Dim J, Total As Integer For J = 2 To 10 Step 2 Total = Total + J Next J MsgBox("The total is " & Total) End Sub
Para disminuir la variable de contador, utilice un valor negativo para Step. Cuando haga esto, debe especificar un valor final que sea menor que el valor de inicio. En el siguiente ejemplo, la variable de contador N disminuye en 2 cada vez que se repite el bucle. Cuando finaliza el bucle, Total es la suma de 16, 14, 12, 10, 8, 6 y 4.
Sub NewTotal() Dim N, Total As Integer For N = 16 To 4 Step -2 Total = Total + N Next N MsgBox("The total is " & Total) End Sub
Los elementos de collection pueden ser de cualquier tipo de datos. El tipo de datos de elementvariable ha de ser tal que cada elemento de la coleccin pueda ser convertido al mismo. Si elementvariable no est declarada fuera del bucle, puede utilizar la clusula As para declararla como parte de la instruccin For Each. Para cada iteracin del bucle, Visual Basic establece la variable elementvariable en uno de los elementos de la coleccin y ejecuta el bloque de instrucciones. Cuando todos los elementos de la coleccin han sido asignados a elementvariable, el bucle For Each finaliza y el control pasa a la instruccin que sigue a Next. Opcionalmente, puede especificarse la variable de elemento en la instruccin Next. De este modo mejora la legibilidad del programa. La variable que especifique debe ser igual a la que aparece en la instruccin For Each. El siguiente procedimiento acepta un formulario y establece el color de fondo de cada control del formulario en azul claro:
Sub LightBlueBackground(ByVal ThisForm As System.Windows.Forms.Form) Dim ThisControl As System.Windows.Forms.Control For Each ThisControl In ThisForm.Controls ThisControl.BackColor = System.Drawing.Color.LightBlue Next ThisControl End Sub
Salir de un bucle For...Next antes de que el contador supere su valor final Puede salir de un bucle For...Next antes de que el contador supere su valor final utilizando la instruccin Exit For. Por ejemplo, puede desear salir de un bucle
La coleccin debe ser un objeto que implemente la interfaz IEnumerable del espacio de nombres System.Collections. IEnumerable define el mtodo GetEnumerator, que devuelve un objeto enumerador para la coleccin. El objeto enumerador expone la propiedad Current y el mtodo MoveNext. Visual Basic utiliza stos para recorrer la coleccin. El tipo PGINA 70
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN de datos de los elementos devueltos por Current debe ser convertible al tipo de datos de elementvariable. Modificar elementos La propiedad Current del objeto enumerador es ReadOnly y devuelve una copia local de cada elemento de la coleccin. Esto significa que no es posible modificar los propios elementos en un bucle For Each...Next. Cualquier modificacin que haga afectar slo a la copia local de Current y no se ver reflejada de nuevo en la coleccin. Sin embargo, si un elemento es un tipo de referencia, es posible modificar los miembros de la instancia a los que apunta. Esta es la razn por la cual, en el ejemplo anterior, se puede modificar el miembro BackColor de cada elemento ThisControl, aunque no se pueda modificar el propio ThisControl. Acceso a matrices Dado que System.Array implementa la interfaz IEnumerable, todas las matrices exponen el mtodo GetEnumerator. Esto significa que es posible recorrer una matriz con un bucle For Each...Next. Sin embargo, slo podr leer los elementos de la matriz, no modificarlos. El propsito del siguiente procedimiento es calcular la suma de los elementos de una matriz y reiniciar cada elemento a cero:
Function SumAndReset(ByRef A() As Integer) As Integer Dim Elt As Integer Dim Sum As Integer = 0 For Each Elt In A Sum += Elt Elt = 0 Next Elt Return Sum End Function
Cuando se ejecuta un bucle For Each...Next, el recorrido de la coleccin est bajo el control del objeto enumerador devuelto por el mtodo GetEnumerator. El orden de recorrido no lo determina Visual Basic, sino el mtodo MoveNext del objeto enumerador. Esto significa que tal vez no pueda predecir qu elemento de la coleccin es el primero que se devuelve en elementvariable o qu elemento es el siguiente en ser devuelto tras un elemento dado. Si el cdigo utilizado depende del recorrido de una coleccin en un orden concreto, un bucle For Each...Next no es la mejor opcin a menos que conozca las caractersticas del objeto enumerador que expone la coleccin. Es posible que obtenga resultados ms confiables si utiliza un bucle diferente, tal como For...Next o Do...Loop. Salir de un bucle For Each...Next antes de terminar con la coleccin Puede salir de un bucle For Each...Next antes de que haya recorrido la coleccin mediante la instruccin Exit For. Por ejemplo, puede desear salir de un bucle si detecta una condicin que hace que sea innecesario o no se pueda continuar la iteracin, como puede ser un valor errneo o una solicitud de finalizacin. Asimismo, si detecta una excepcin en Try...Catch...Finally, puede utilizar Exit For al final del bloque Finally.
La suma funciona segn los esperado, porque se basa slo en leer los elementos. Sin embargo, la reinicializacin a cero no funciona segn lo esperado, porque slo se reinicia a cero la copia local mientras los elementos originales permanecen sin modificar en la coleccin. Alterar la coleccin El objeto enumerador no permite alterar la coleccin mediante la adicin, eliminacin, sustitucin o reordenacin de elementos. Si altera la coleccin despus de haber iniciado un bucle For Each...Next, el objeto enumerador deja de ser vlido y el siguiente intento de acceso a un elemento produce una excepcin InvalidOperationException. Recorrer la coleccin
PGINA 71
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN En el primer caso anterior, la ejecucin tarda un poco menos que en el segundo caso. Sin embargo, si Fastest supera 2.147.483.647 se produce un error. Esto se soluciona en los casos segundo y tercero, puesto que los tipos Long y Decimal aceptan una gama ms amplia de enteros, aunque se ejecutan ms lentamente. Para tipos de datos que utilizan 4 o ms bytes, la manipulacin de tipos ms pequeos suele requerir menos tiempo que la de tipos ms grandes.
de
control
Puede colocar instrucciones de control dentro de otras instrucciones de control, por ejemplo un bloque If...Then...Else dentro de un bucle For...Next. Cuando una instruccin de control se coloca dentro de otra, se dice que est anidada. En Visual Basic, las instrucciones de control pueden anidarse tantos niveles como se desee. A fin de que las estructuras de decisin y los bucles anidados sean ms fciles de leer, es prctica habitual aplicar sangra al cuerpo de cada uno. En el siguiente ejemplo, el procedimiento suma los elementos positivos de cada fila de la matriz:
Public Sub SumRows(ByVal A(,) As Double, ByRef R() As Double) Dim I, J As Integer For I = 0 To UBound(A, 1) R(I) = 0 For J = 0 To UBound(A, 2) If A(I, J) > 0 Then R(I) = R(I) + A(I, J) End If Next J Next I End Sub
Observe que el primer Next cierra el bucle For interno y el ltimo Next cierra el bucle For externo. Del mismo modo, en las instrucciones If anidadas, las instrucciones End If se aplican automticamente a la instruccin If anterior ms prxima. Los bucles Do anidados funcionan de forma similar; la instruccin Loop ms interna est emparejada con la instruccin Do ms interna.
Puede anidar instrucciones With...End With para conseguir mayor eficacia. En el siguiente ejemplo se inserta una frmula en la celda A1 y despus se da formato a la fuente.
Sub MyInput() With Workbooks("Book1").Worksheets("Sheet1").Cells(1, 1) .Formula = "=SQRT(50)" With .Font .Name = "Arial" .Bold = True .Size = 8 End With End With End Sub
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Tambin puede salir directamente de un procedimiento Function, Sub o Property; la sintaxis es parecida a la de Exit For y Exit Do: Exit Sub Exit Function Exit Property Do Until y = -1 If x < 0 Then Exit Do x = Math.Sqrt(x) If y > 0 Then Exit Do y=y+3 If z = 0 Then Exit Do z=x/z Loop La instruccin Exit Do funciona con todas las versiones de sintaxis del bucle Do (con While o Until) y Exit For funciona con todas las versiones de sintaxis del bucle For (con o sin Each).
Exit Sub, Exit Function y Exit Property pueden aparecer todas las veces que sea necesario, en cualquier punto del cuerpo del procedimiento. Incluso pueden aparecer dentro de una instruccin de control como If...Then...Else. Estas instrucciones son tiles cuando un procedimiento ha completado su cometido y puede volver inmediatamente.
6 Procedimientos
Un procedimiento es un bloque de instrucciones de Visual Basic delimitado por una instruccin de declaracin y una instruccin End. En Visual Basic, todo el cdigo se incluye dentro de procedimientos. Los procedimientos se invocan desde otras partes del cdigo. Cuando finaliza la ejecucin de un procedimiento, ste devuelve el control al cdigo que lo invoc, que recibe el nombre de cdigo de llamada. El cdigo de llamada es una instruccin o una expresin contenida en una instruccin, que hace referencia al procedimiento por su nombre y le transfiere el control. Tipos de procedimientos Visual Basic utiliza varios tipos de procedimientos: Los procedimientos Sub ejecutan acciones, pero no devuelven un valor al cdigo de llamada. Los procedimientos de control de eventos son procedimientos Sub que se ejecutan en respuesta a un evento desencadenado por una accin del usuario o por un suceso en un programa. Los procedimientos Function devuelven un valor al cdigo de llamada. Los procedimientos Property devuelven y asignan valores de propiedades en objetos o mdulos. Procedimientos y cdigo estructurado Todas las lneas de cdigo de una aplicacin deben encontrarse dentro de un procedimiento, por ejemplo, Main, Calculate o Button1_Click. La aplicacin se leer con mayor facilidad si subdivide los procedimientos grandes en procedimientos ms pequeos. Los procedimientos son tiles para realizar tareas repetitivas o compartidas, como clculos de uso PGINA 73
' Control comes here if the Exit For is executed. Next J Next I End Sub
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN frecuente, manipulacin de texto y controles, y operaciones con bases de datos. Se puede llamar a un procedimiento desde distintos lugares del cdigo; de modo que los procedimientos se prestan a servir de unidades de creacin de la aplicacin. La estructuracin del cdigo en procedimientos aporta las siguientes ventajas: Los procedimientos permiten desglosar los programas en unidades lgicas independientes. Es ms fcil depurar unidades individuales que todo un programa sin procedimientos. Los procedimientos desarrollados para un programa pueden utilizarse en otros programas, generalmente sin tener que realizar apenas modificaciones.
[Optional] datatype [ByVal|ByRef] [ParamArray] argumentname As
Si el argumento es opcional, la declaracin de ste debe contener tambin un valor predeterminado, como se muestra a continuacin:
Optional [ByVal|ByRef] argumentname As datatype = defaultvalue
El procedimiento Sub que aparece a continuacin notifica al usuario del equipo la tarea que est a punto de realizar la aplicacin, y tambin muestra una marca de tiempo. En lugar de duplicar este fragmento de cdigo al principio de cada tarea, la aplicacin simplemente llama a TellOperator desde varios lugares. Cada llamada pasa una cadena al argumento Task que identifica la tarea que se va a iniciar.
Sub TellOperator(ByVal Task As String) Dim Stamp As Date ' Stamp is local to TellOperator. Stamp = TimeOfDay() ' Get current time for time stamp. ' Use MessageBox class of System.Windows.Forms namespace. MessageBox.Show("Starting " & Task & " at " & CStr(Stamp)) End Sub
La accesibilidad puede ser Public, Protected, Friend, Protected Friend o Private. Los procedimientos Sub pueden definirse en mdulos, clases y estructuras. Son Public de forma predeterminada, lo que significa que se les puede llamar desde cualquier parte de una aplicacin.
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN La sintaxis para declarar un procedimiento Function es la siguiente:
[accessibility] Function functionname[(argumentlist)] As datatype ' Statements of the Function procedure. End Function
posible dentro de la funcin. Si se intentara hacerlo, el compilador lo interpretar como una llamada a la funcin. En el siguiente ejemplo se generan errores de compilacin:
Function AllOnes(ByVal N As Integer) As Integer() Dim I As Integer ' Singleton Integer, not Integer array. For I = 1 To N - 1 ' Assume N has a valid value. AllOnes(I) = 1 ' Compiler error: call with wrong data type. Next I Return AllOnes() ' Compiler error: call with no argument. End Function
La accesibilidad puede ser Public, Protected, Friend, Protected Friend o Private. Los procedimientos Function pueden definirse en mdulos, clases y estructuras. Son Public de forma predeterminada, lo que significa que se les puede llamar desde cualquier parte de una aplicacin. Los argumentos se declaran del mismo modo que en un procedimiento Sub.
Todos los procedimientos Function tienen un tipo de datos, al igual que las variables. La clusula As de la instruccin Function especifica el tipo de datos, y determina el tipo del valor devuelto. En las siguientes declaraciones de ejemplo se ilustra esto ltimo:
Function Yesterday As Date ' ... End Function Function FindSqrt(ByVal Number As Single) As Single ' ... End Function
Function functionname[(argumentlist)] As datatype ' ... functionname = expression 'Control remains within the function. ' ... End Function
El siguiente procedimiento Function calcula la hipotenusa de un tringulo rectngulo a partir de los valores de los catetos:
Function Hypotenuse (ByVal Side1 As Single, ByVal Side2 As Single) As Single Return Math.Sqrt((Side1 ^ 2) + (Side2 ^ 2)) End Function
La funcin utiliza la instruccin Return para especificar el valor devuelto, e inmediatamente devuelve el control al programa de llamada, como en el siguiente ejemplo:
Function functionname[(argumentlist)] As datatype ' ... Return expression 'Control is returned immediately. ' ... End Function
La ventaja de asignar el valor devuelto al nombre de la funcin es que el control permanece en la funcin hasta que el programa encuentra una instruccin Exit Function o End Funcin, lo que permite asignar un valor previo y, si es necesario, se puede ajustar despus. Si la funcin devuelve datos de tipo matricial, el acceso a los elementos individuales de la matriz no es
Common Language Runtime proporciona multitud de funciones, que se encuentran en el espacio de nombres Microsoft.VisualBasic. Entre las funciones ms comunes se encuentran, por ejemplo, Beep, MsgBox y StrComp. Puede llamar a estas funciones de la misma manera que llama a los procedimientos Function que ha creado usted mismo. Cuando se llama a un procedimiento Function, no es necesario utilizar su valor devuelto, en cuyo caso se PGINA 75
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN ejecutan todas las acciones de la funcin, pero el valor devuelto se omite. Las llamadas a MsgBox suelen hacerse de esta manera.
Visual Basic proporciona los siguientes procedimientos Property: Los procedimientos Get devuelven el valor de una propiedad; se llama a estos procedimientos cuando se obtiene acceso a la propiedad en una expresin. Los procedimientos Set establecen el valor de una propiedad, e incluyen una referencia de objeto; se llama a estos procedimientos cuando se le asigna un valor a la propiedad. Normalmente los procedimientos Property se definen por parejas, utilizando las palabras clave Get y Set, pero si la propiedad es de slo lectura (Get) o de slo escritura (Set) puede definirse cada procedimiento de forma individual.
PGINA 76
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN En un procedimiento Get, el valor devuelto se suministra a la expresin de llamada como valor de la propiedad. En un procedimiento Set, el nuevo valor de la propiedad se pasa a travs del argumento de la instruccin Set. Si un argumento se declara de forma explcita, el tipo de datos de ste debe ser el mismo que el de la propiedad. Si no se declara un argumento, el compilador utiliza el argumento implcito Value para representar el nuevo valor que se va a asignar a la propiedad. llamada. Estos datos se componen de variables, constantes y expresiones que se pasan al procedimiento cuando se le llama. Un valor que se pasa a un procedimiento se denomina argumento.
Si el modificador de comprobacin de tipos (Option Strict (Instruccin)) est desactivado, la clusula As ser opcional, salvo que alguno de los argumentos la utilice, en cuyo caso el resto de los argumentos tendr que utilizarla tambin. Si la comprobacin de tipos est activada, la clusula As ser obligatoria para todos los argumentos del procedimiento. Si desea pasar diferentes tipos de datos a un argumento en particular, tales como Byte a Integer o clases de enlace en tiempo de ejecucin a Object, deber tener Option Strict Off.
variables
no
El elemento de programacin subyacente a un argumento puede ser un elemento variable, con capacidad para cambiar de valor, o un elemento no variable. La siguiente tabla muestra elementos variables y no variables.
PGINA 77
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Elementos variables Elementos no variables El mecanismo para pasar argumentos se determina en la declaracin del procedimiento. El cdigo de llamada no puede reemplazar a un mecanismo ByVal, pero, si un argumento se declara con ByRef, el cdigo de llamada puede forzar al mecanismo para que pase el argumento por valor; para ello hay que encerrar el nombre del argumento entre parntesis en la llamada. Esto se ilustra en el siguiente ejemplo: Sub DoSomething(ByRef InString As String) ' Code that makes changes to InString. End Sub ' ...
Dim Str As String = "Cannot be replaced if passed ByVal"
Variables declaradas, incluidas Constantes las variables de objetos Campos (de clases) Elementos matriciales Elementos estructurales Literales Enumeraciones Expresiones
Los argumentos no variables no se modifican nunca en el cdigo de llamada, aunque se pasen por referencia. El procedimiento al que se llama podra modificar su copia del argumento no variable, pero la modificacin no afectara al elemento subyacente al cdigo de llamada.
para
pasar
Call DoSomething((Str)) ' Pass Str ByVal even though declared ByRef. ' The parentheses around Str protect it from change. En Visual Basic, el valor predeterminado es pasar los argumentos por valor. Este cdigo se puede leer con ms facilidad si se utiliza la palabra clave ByVal, como en el ejemplo siguiente: Sub PostAccounts(ByVal AcctNum As Integer) ' Code to post accounts. End Sub Cuando se pasa una variable por referencia, debe utilizarse la palabra clave ByRef para especificar este mecanismo. El ejemplo anterior puede ampliarse con un segundo argumento, como se muestra a continuacin: Sub PostAccount(ByVal AcctNum As Integer, ByRef RunningTotal As Single) ' Code to post account for AcctNum and change value of RunningTotal. End Sub Es un hbito de programacin recomendado incluir la palabra clave ByVal o ByRef con cada argumento que declare.
Si se pasa un elemento no variable como argumento, el procedimiento no podr modificarlo nunca en el cdigo de llamada, se pase con ByVal o con ByRef. En la tabla siguiente se resume, para un elemento variable, la interaccin entre el tipo de datos del elemento y el mecanismo para pasarlos. Tipo de elemento Pasado con ByVal Pasado con ByRef
Tipo de El El valor (slo procedimiento procedimiento contiene un no puede puede valor) modificar la modificar la variable ni variable y los ninguno de los miembros de miembros de sta. sta. Tipo de El El referencia procedimiento procedimiento (contiene un no puede puede cambiar puntero a modificar la la variable y una instancia variable, pero los miembros de clase o puede cambiar de la instancia estructura) los miembros a la que seala. de la instancia a la que seala.
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN llamada por medio del argumento. La ventaja de pasarlo con ByVal es que protege a la variable de los cambios que sobre ella pueda efectuar el procedimiento. Aunque el mecanismo que se utilice para pasar argumentos tambin puede afectar al rendimiento del cdigo, la diferencia suele ser insignificante. Existe una excepcin: cuando se pasa un tipo de valor con ByVal. En esta caso, Visual Basic copia todo el contenido de los datos del argumento. Por lo tanto, para un tipo de valor grande, como una estructura, lo ms eficiente es pasarlo con ByRef. Para los tipos de referencia, slo se copia el puntero de cuatro bytes a los datos. Por lo tanto, se pueden pasar argumentos de tipo String u Object ByVal sin perjudicar al rendimiento. El valor predeterminado de un argumento opcional debe ser una expresin constante. Todos los argumentos que vayan a continuacin de un argumento opcional en la definicin del procedimiento tambin deben ser opcionales.
Si el argumento opcional es un tipo de referencia, como String, puede utilizar Nothing como valor predeterminado, siempre y cuando ste no sea un valor esperado para el argumento. Otra forma de definir un procedimiento con argumentos opcionales consiste en utilizar una PGINA 79
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN sobrecarga. Si tiene un argumento opcional, puede definir dos versiones sobrecargadas del procedimiento, una con el argumento y otra sin l. Este planteamiento se complica a medida que aumenta el nmero de argumentos opcionales. No obstante, tiene la ventaja de que permite saber con total certeza si el programa de llamada ha suministrado o no cada argumento opcional. Ninguno, es decir, puede omitirse el argumento ParamArray. En este caso, se pasar una matriz vaca al procedimiento. Tambin puede pasarse la palabra clave Nothing, obtenindose el mismo efecto. Una lista con un nmero de argumentos indeterminado, separados por comas. El tipo de los datos de cada argumento debe poder convertirse implcitamente al tipo de elemento ParamArray. Una matriz con el mismo tipo de elemento que la matriz de parmetros.
En el siguiente ejemplo se muestra cmo se puede definir un procedimiento con una matriz de parmetros: Sub StudentScores(ByVal Name As String, ByVal ParamArray Scores() As String) Dim I As Integer Debug.WriteLine("Scores for " & Name & ":") ' Use UBound function to determine largest subscript of array. For I = 0 To UBound(Scores) Debug.WriteLine("Score " & I & ": " & Scores(I)) Next I End Sub En los siguientes ejemplos se muestran llamadas tpicas a StudentScores: StudentScores("Anne", "10", "26", "32", "15", "22", "24", "16") StudentScores("Mary", "High", "Low", "Average", "High") Dim JohnScores() As String = {"35", "Absent", "21", "30"} StudentScores("John", JohnScores)
La matriz de parmetros debe pasarse por valor. Es un hbito de programacin recomendado incluir de manera explcita la palabra clave ByVal en la definicin del procedimiento. El cdigo del procedimiento debe considerar a la matriz de parmetros una matriz unidimensional; el tipo de datos de los elementos de la matriz ha de ser el mismo que el tipo de datos de ParamArray. La matriz de parmetros es opcional de forma automtica. Su valor predeterminado es una matriz unidimensional vaca del tipo de elemento de la matriz de parmetros. Todos los argumentos que preceden a la matriz de parmetros deben ser obligatorios. La matriz de parmetros debe ser el nico argumento opcional.
Cuando uno de los argumentos del procedimiento al que se llame sea una matriz de parmetros, sta podr tomar cualquiera de estos valores:
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN tambin tiene mtodos inherentes que duplican muchas de estas funcionalidades.
stringLength = Len(MyString) ' This line, however, causes an exception to be thrown. stringLength = MyString.Length
de
En esta seccin se describen diferentes formas de analizar y manipular cadenas. Algunos mtodos son parte del lenguaje Visual Basic, mientras que otros son inherentes a la clase String. Los mtodos de Visual Basic .NET se utilizan como funciones inherentes al lenguaje. Pueden utilizarse sin calificacin en el cdigo. En el siguiente ejemplo se muestra el uso habitual de un comando de manipulacin de cadenas de Visual Basic .NET:
Dim aString As String = "SomeString" Dim bString As String bString = Mid(aString, 3, 3)
El tiempo de ejecucin de Visual Basic .NET evala Nothing como una cadena vaca, es decir, como "". Sin embargo, .NET Framework, no lo hace, e iniciar una excepcin cuando se intente realizar una operacin de cadena en Nothing.
En este ejemplo, la funcin Mid realiza una operacin directa en aString y asigna el valor a bString. Tambin puede manipular cadenas con los mtodos de la clase String. Existen dos tipos de mtodos en String: mtodos compartidos y mtodos de instancia. Un mtodo compartido es un mtodo que se deriva de la propia clase String y no necesita una instancia de dicha clase para funcionar. Estos mtodos se pueden calificar con el nombre de la clase (String) en vez de con una instancia de dicha clase. Por ejemplo:
Dim aString As String bString = String.Copy("A literal string")
En el ejemplo anterior, el mtodo String.Copy es un mtodo esttico, que acta sobre una expresin dada y asigna el valor resultante a bString. En contraste, los mtodos de instancia se derivan de una instancia concreta de String y deben calificarse con el nombre de la instancia. Por ejemplo:
Dim aString As String = "A String" Dim bString As String bString = aString.SubString(2,6) ' bString = "String"
Este mtodo devuelve un entero que indica la relacin entre las dos cadenas comparadas basndose en el criterio de ordenacin. Un resultado con un valor positivo indica que la primera cadena es mayor que la segunda. Un resultado negativo indica que la primera cadena es ms pequea y cero indica igualdad entre la dos cadenas. Cualquier cadena, incluida una cadena vaca, se evala como mayor que una referencia nula. Las sobrecargas adicionales del mtodo String.Compare permiten indicar si deben tenerse en cuenta los formatos de maysculas y minsculas y las referencias culturales, y si deben compararse subcadenas dentro de las cadenas proporcionadas.
En este ejemplo, el mtodo SubString es un mtodo de la instancia de String (es decir, aString). Realiza una operacin en aString y asigna ese valor a bString.
dentro
de
En ocasiones es til tener informacin sobre los caracteres de una cadena y de su posicin dentro de la cadena. Una cadena se puede considerar como una matriz de caracteres (instancias Char); se puede recuperar un carcter concreto haciendo referencia al ndice de dicho carcter a travs de la propiedad Chars. Por ejemplo:
Dim myString As String = "ABCDE" Dim myChar As Char myChar = myString.Chars(3) ' myChar = "D"
Puede utilizar el mtodo String.IndexOf para que devuelva el ndice donde se encuentra un carcter concreto, como en el siguiente ejemplo:
Dim myString As String = "ABCDE"
PGINA 81
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN
Dim myInteger As Integer myInteger = myString.IndexOf("D") ' myInteger = 3
En el ejemplo anterior, se utiliz el mtodo IndexOf de myString para obtener el ndice correspondiente a la primera instancia del carcter "C" de la cadena. IndexOf es un mtodo sobrecargado; las otras sobrecargas proporcionan mtodos para buscar cualquiera de los caracteres de un conjunto o una cadena dentro de otra cadena, entre otros. El comando InStr de Visual Basic .NET tambin permite realizar funciones similares.
determinada. A veces puede ser necesario eliminar espacios iniciales o finales de una cadena. Por ejemplo, podra estar analizando una cadena que tiene espacios insertados con fines de alineacin. Puede eliminar esos espacios con la funcin String.Trim (Mtodo) o con la funcin Trim de Visual Basic .NET. A continuacin se muestra un ejemplo:
Dim spaceString As String = _ " This string will have the spaces removed " Dim oneString As String Dim twoString As String ' This removes all trailing and leading spaces. oneString = spaceString.Trim ' This also removes all trailing and leading spaces. twoString = Trim(spaceString)
Si slo desea quitar los espacios finales, puede utilizar el mtodo String.TrimEnd (Mtodo) o la funcin RTrim. Del mismo modo, si desea quitar los espacios iniciales, puede utilizar el mtodo String.TrimStart (Mtodo) o la funcin LTrim. Las funciones String.Trim y otras relacionadas tambin permiten eliminar instancias de un carcter especfico al final de las cadenas. El siguiente ejemplo elimina todas las instancias iniciales y finales del carcter "#":
Dim myString As String = "#####Remove those!######" Dim oneString As String OneString = myString.Trim("#")
Tambin puede agregar caracteres iniciales o finales mediante los mtodos String.PadLeft (Mtodo) o String.PadRight (Mtodo). Si tiene exceso de caracteres en el cuerpo de la cadena, puede eliminarlos con String.Remove (Mtodo), o puede reemplazarlos con otro carcter mediante String.Replace (Mtodo). Por ejemplo:
Dim aString As String = "This is My Str@o@o@ing" Dim myString As String Dim anotherString As String ' myString = "This is My String" myString = aString.Remove(14, 5) ' anotherString = "This is Another String" anotherString = myString.Replace("My", "Another")
Las cadenas se pueden convertir en cadenas totalmente en maysculas o totalmente minsculas con funciones de Visual Basic .NET UCase (Funcin) o LCase (Funcin) o mediante los mtodos String.ToUpper (Mtodo) y String.ToLower (Mtodo). A continuacin se muestra un ejemplo:
Dim myString As String = "UpPeR oR LoWeR cAsE" Dim newString As String ' newString = "UPPER OR LOWER CASE" newString = UCase(myString) ' newString = "upper or lower case" newString = LCase(myString) ' newString = "UPPER OR LOWER CASE" newString = myString.ToUpper ' newString = "upper or lower case" newString = myString.ToLower
Puede utilizar el mtodo String.Replace para reemplazar caracteres individuales o cadenas de caracteres. La instruccin Mid (Instruccin) de Visual Basic .NET tambin se puede utilizar para reemplazar una cadena interior por otra. Asimismo, puede utilizar String.Insert (Mtodo) para insertar una cadena dentro de otra, como en el ejemplo siguiente:
Dim aString As String = "This is My Stng" Dim myString As String ' Results in a value of "This is My String". myString = aString.Insert(13, "ri")
El mtodo String.Format y el comando Format de Visual Basic .Net pueden generar una nueva cadena mediante la aplicacin de formato a una cadena
PGINA 82
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN El primer parmetro del mtodo String.Insert es el ndice del carcter tras el cual se insertar la cadena, y el segundo parmetro es la cadena que se va a insertar. Se puede concatenar una matriz de cadenas con una cadena separadora mediante String.Join (Mtodo). El siguiente es un ejemplo:
Dim shoppingItem(2) As String Dim shoppingList As String shoppingItem(0) = "Milk" shoppingItem(1) = "Eggs" shoppingItem(2) = "Bread" shoppingList = String.Join(",", shoppingItem)
posicin 1. El mtodo String.SubString toma un ndice del carcter de la cadena donde debe comenzar la subcadena, a partir de la posicin 0. As, si tiene una cadena "ABCDE", los caracteres individuales se numeran 1,2,3,4,5 si se utilizan con la funcin Mid, y 0,1,2,3,4 si se utilizan con el funcin System.String.
El valor de shoppingList tras ejecutar este cdigo es "Milk,Eggs,Bread". Es de resear que si la matriz tiene miembros vacos, el mtodo agrega igualmente una cadena separadora entre todas las instancias vacas de la matriz. Tambin se puede crear una matriz de cadenas a partir de una sola cadena mediante String.Split (Mtodo). En el siguiente ejemplo se demuestra lo contrario que en el ejemplo anterior: se convierte una lista de la compra en una matriz de artculos de la compra. En este caso el separador es una instancia del tipo de datos Char; por tanto, se le agrega el carcter de tipo literal c.
Dim shoppingList As String = "Milk,Eggs,Bread" Dim shoppingItem(2) As String shoppingItem = shoppingList.Split(","c)
La funcin Mid (Funcin) de Visual Basic .NET puede utilizarse para agregar subcadenas a una cadena. En el siguiente ejemplo se muestra el uso de estas funciones:
Dim aString As String = "Left Center Right" Dim rString, lString, mString As String ' rString = "Right" rString = Mid(aString, 13) ' lString = "Left" lString = Mid(aString, 1, 4) ' mString = "Center" mString = Mid(aString, 6,6)
Tambin se pueden generar subcadenas de una cadena con String.Substring (Mtodo). Este mtodo acepta dos argumentos: el ndice del carcter donde debe comenzar la subcadena y la longitud de la subcadena. El mtodo String.Substring funciona de modo similar a la funcin Mid. A continuacin se muestra un ejemplo:
Dim aString As String = "Left Center Right" Dim subString As String ' subString = "Center" subString = aString.SubString(5,6)
7.2.1 Parse
En el ejemplo de cdigo siguiente se ilustra el uso del mtodo Parse para convertir una cadena en DateTime. En este ejemplo, para realizar el anlisis, se utiliza la referencia cultural asociada al subproceso PGINA 83
Existe una diferencia muy importante entre el mtodo String.SubString y la funcin Mid. La funcin Mid toma un argumento que indica la posicin del carcter donde debe comenzar la subcadena, a partir de la
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN actual. Si el objeto CultureInfo asociado a la referencia cultural actual no puede analizar la cadena de entrada, se inicia una FormatException. Dim MyString As String = "Jan 1, 2002" Dim MyDateTime As DateTime DateTime.Parse(MyString) Console.WriteLine(MyDateTime) de fecha y hora estndar o una combinacin limitada de los especificadores de formato de fecha y hora personalizados. Si se usan los especificadores de formato personalizados, se puede construir una cadena de reconocimiento personalizada. En el ejemplo de cdigo siguiente, se pasa al mtodo ParseExact un objeto de cadena que se debe analizar, seguido de un especificador de formato, seguido de un objeto CultureInfo. Este mtodo ParseExact slo puede analizar cadenas que muestren el modelo de fecha larga de la referencia cultural en-US. Imports System.Globalization Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US") Dim MyString As String = "Tuesday, April 10, 2001" Dim MyDateTime As DateTime = DateTime.ParseExact(MyString, "D", MyCultureInfo) Console.WriteLine(MyDateTime)
Tambin se puede especificar un objeto CultureInfo establecido en una de las referencias culturales que define dicho objeto. En el ejemplo de cdigo siguiente se utiliza un proveedor de formato para analizar una cadena alemana en un objeto DateTime. Un objeto CultureInfo que representa la referencia cultural deDE se define y se pasa con la cadena que se est analizando para garantizar el anlisis correcto de esta cadena concreta. Esto descarta el valor que tenga CurrentCulture del CurrentThread. Imports System.Globalization Dim MyCultureInfo As CultureInfo = CultureInfo("de-DE") Dim MyString As String = "12 Juni 2002" Dim MyDateTime As DateTime DateTime.Parse(MyString, MyCultureInfo) Console.WriteLine(MyDateTime) new
En el ejemplo de cdigo siguiente se utiliza la enumeracin DateTimeStyles para especificar que la informacin de fecha y hora actual no se debe agregar al objeto DateTime en los campos que no defina la cadena. Imports System.Globalization Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE") Dim MyString As String = "12 Juni 2002" Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo, DateTimeStyles.NoCurrentDateDefault) Console.WriteLine(MyDateTime)
7.2.2 ParseExact
El mtodo ParseExact slo convierte en objeto DateTime el modelo de cadena especificado. Cuando se pasa a este mtodo una cadena que no tiene el formato especificado, se inicia una FormatException. Se puede definir uno de los especificadores de formato
PGINA 84
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN tipo de valor tienen en cuenta una serie de detalles, como los aos bisiestos y el nmero de das de un mes. Las descripciones de valores de tiempo de este tipo suelen expresarse utilizando el estndar de hora universal coordinada (UTC), que antes se denominaba hora media de Greenwich (GMT). Los clculos y las comparaciones de instancias de DateTime slo tienen significado si las instancias se crean en la misma zona horaria. Por este motivo, se da por sentado que el programador dispone de algn mecanismo externo, como una variable o una directiva explcita, para saber en qu zona horaria se cre un DateTime. A la hora de realizar clculos o comparaciones, los mtodos y las propiedades de esta estructura utilizan siempre la zona horaria local. Cuando se realiza un clculo en una instancia de DateTime, como Add o Subtract, el valor de la instancia no se modifica. En lugar de ello, el clculo devuelve una nueva instancia de DateTime cuyo valor es el resultado del clculo. Cada miembro de DateTime usa de forma implcita el calendario gregoriano para realizar su operacin, con la excepcin de los constructores que especifican un calendario y los mtodos que indican implcitamente un calendario con un parmetro derivado de IFormatProvider; por ejemplo, System.Globalization.DateTimeFormatInfo. Utilice la clase System.Globalization.Calendar para realizar las operaciones de fecha y hora con un calendario diferente. Este tipo se hereda de IComparable, IFormattable e IConvertible. Utilice la clase Convert para las conversiones en lugar de la implementacin de miembro de interfaz explcita de IConvertible de este tipo. a las fracciones de segundo. Por ejemplo, un TimeSpan inicializado con 1.0e+13 pasos (ticks) representa "11.13:46:40", lo cual corresponde a 11 das, 13 horas, 46 minutos y 40 segundos. Debido a la variacin del nmero de das en meses y aos, la unidad mayor de tiempo que utiliza TimeSpan es el da.
CompareTo
Duration
Equals
FromDays
FromHours
Devuelve un TimeSpan que representa un nmero de minutos especificado con una precisin aproximada al milisegundo ms cercano. Devuelve un TimeSpan que representa un nmero de segundos especificado con una
FromSeconds
PGINA 85
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Mtodo Descripcin precisin aproximada milisegundo ms cercano. FromTicks al Palabra Convierte Tipos de datos permitidos clave de una para la expresin que se va conversin expresin a convertir de tipos en el siguiente tipo de datos CBool Boolean Cualquier tipo numrico (incluido el tipo Byte y los tipos enumerados), String y Object Cualquier tipo numrico, cualquier tipo enumerado, Boolean, String y Object String y Object String y Object Cualquier tipo numrico (incluido el tipo Byte y los tipos enumerados), Boolean, String y Object Cualquier tipo numrico (incluido el tipo Byte y los tipos enumerados), Boolean, String y Object Cualquier tipo numrico (incluido el tipo Byte y los tipos enumerados), Boolean, String y Object Cualquier tipo numrico (incluido el tipo Byte y los tipos enumerados), Boolean, String y Object Cualquier tipo Cualquier tipo numrico (incluido el tipo Byte y los tipos enumerados), Boolean, String y Object Cualquier tipo numrico (incluido el tipo Byte y los tipos enumerados), Boolean, String y Object Cualquier tipo numrico (incluido el tipo Byte), Boolean, Char, matriz Char(), Date y Object
Devuelve un TimeSpan que representa un tiempo especificado en unidades de paso. Devuelve un TimeSpan cuyo valor es el valor negado de esta instancia. Crea un objeto TimeSpan a partir de un intervalo de tiempo indicado mediante una cadena especificada. Resta el objeto TimeSpan especificado de esta instancia.
Negate
Parse
CByte
Byte
Subtract
implcitas
y
CDec Decimal
Una conversin implcita no requiere ninguna sintaxis especial en el cdigo fuente. En el ejemplo siguiente, Visual Basic .NET convierte de forma implcita el valor de K a punto flotante de precisin simple antes de asignarlo a Q.
Dim K As Integer Dim Q As Double ' ... K = 432 ' Integer widens to Double, so Option Strict can be On. Q=K
CInt
Integer
CLng
Long
Una conversin explcita utiliza una palabra clave de conversin de tipos. Visual Basic .NET proporciona varias de estas palabras clave, que convierten una expresin entre parntesis en el tipo de datos deseado. Estas palabras clave actan como funciones, pero el compilador genera el cdigo en la misma lnea, de modo que la ejecucin es un poco ms rpida que con una llamada de funcin. En esta extensin del ejemplo anterior, la palabra clave CInt convierte el valor de Q de nuevo en un entero antes de asignarlo a K:
Q = Math.Sqrt(Q) ' Q had been assigned the value 432 from K. K = CInt(Q) ' K now has the value 21 (rounded square root of 432).
CObj CShort
Object Short
CSng
Simple
CStr
String
CType
Tipo Al convertir a un tipo bsico especificado (incluida una matriz de un despus de tipo bsico), se permiten los PGINA 86
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Palabra Convierte Tipos de datos permitidos clave de una para la expresin que se va conversin expresin a convertir de tipos en el siguiente tipo de datos la coma (,) mismos tipos para la palabra clave de conversin correspondiente Al convertir a un tipo compuesto, las interfaces que implementa y las clases de las que hereda en tiempo de ejecucin si no existe relacin de herencia entre los dos tipos. La accin de realizar una conversin explcita se denomina tambin convertir una expresin en un determinado tipo de datos o clase de objeto.
IsDate
IsDate devuelve True si la expresin es de tipo Date, o si es una cadena que se puede convertir al tipo Date; si no, devuelve False. IsDBNull devuelve True si el tipo de datos de Expression se evala como de tipo DBNull; si no, IsDBNull devuelve False. El valor System.DBNull indica que la expresin de tipo Object representa datos que no se encuentran o no existen. DBNull no es lo mismo que Nothing, que indica que una variable no se ha inicializado todava. Tampoco es lo mismo que una cadena de longitud cero (""), a la que a veces se hace referencia como cadena de valor null. IsError devuelve True si la expresin representa una variable Object que se deriva de la clase Exception en el espacio de nombres System. Una excepcin que se deriva de System.Exception puede capturarse con las instrucciones Try...Catch...Finally. IsNothing devuelve True si la expresin representa una variable de tipo Object que no tiene actualmente ningn objeto asignado; en caso contrario, devuelve False.
IsDBNull
Puede utilizar CType para convertir valores en tipos de datos compuestos as como en tipos bsicos. Tambin puede utilizarlo para convertir una clase de objeto en el tipo de una de sus interfaces, como en el ejemplo siguiente:
' Assume class CZone implements interface IZone. Dim H As Object Dim CZ As CZone ' Cannot use a type as first argument of CType. H = CType(CZ, IZone) ' Coerces CZone object to its interface IZone.
IsError
Nota Los valores utilizados con una palabra clave de conversin deben ser vlidos para el tipo de datos de destino; de lo contrario, se produce un error. Por ejemplo, si intenta convertir un tipo Long en Integer, el valor de Long debe estar dentro del intervalo vlido para el tipo de datos Integer. Precaucin La especificacin de CType para convertir de un tipo de clase a otro produce un error
IsNothing
PGINA 87
ILCOMP
INSTITUTO LATINOAMERICANO DE COMPUTACIN Funcin IsNumeric Descripcin IsNumeric devuelve True si Expression se reconoce globalmente como un nmero; si no, devuelve False. IsNumeric devuelve True si el tipo de datos de Expression es Short, Integer, Long, Decimal, Single o Short. Tambin devuelve True si Expression es de tipo String y se puede convertir al tipo Double. Devuelve False si Expression es del tipo Date. Devuelve un valor de tipo Boolean que indica si una expresin es un tipo de referencia. prevenir errores de lgica y prdidas de datos que puedan producirse al trabajar entre variables de diferentes tipos. La instruccin Option Compare especifica la forma en que se comparan las cadenas entre s, mediante su disposicin de tipo Binary o Text.
IsReference
Adems, un programa puede contener instrucciones de compilacin condicional. Estas instrucciones se pueden ubicar en cualquier parte del mdulo. Muchos programadores prefieren ponerlas al final. Si escribe instrucciones en un orden distinto, pueden producirse errores de compilacin.
de
compilacin
Las instrucciones de compilacin condicional pueden aparecer en cualquier lugar dentro del mdulo. Estn configuradas para ejecutarse si se cumplen determinadas condiciones en tiempo de ejecucin. Tambin puede utilizarlas para depurar la aplicacin, ya que el cdigo condicional se ejecuta nicamente en modo de depuracin.
PGINA 88