You are on page 1of 111

GUA DEL CURSO

Microsoft Visual Basic.NET 2005

CONTENIDO
INTRODUCCIN A VISUAL BASIC.NET 2005 ____________________ 5 Introduccin ____________________________________________ 6 Historia y presentacin ___________________________________ 6 .NET Framework ________________________________________ 7 Caractersticas de Common Languaje Runtime ______________ 8 Biblioteca de clase de .NET Framework___________________ 10 Desarrollo de aplicaciones cliente ________________________11 Desarrollo de aplicaciones de servidor ____________________ 12 CONOCIENDO VISUAL BASIC.NET 2005 ______________________ 15 La pantalla de inicio _____________________________________ 16 Iniciar un nuevo proyecto _________________________________17 El entorno_____________________________________________ 18 El diseador de formularios____________________________ 18 El cuadro de herramientas ____________________________ 19 El explorador de soluciones ____________________________ 20 La ventana de propiedades ____________________________ 20 La ventana de cdigo ________________________________ 22 CONTROLES _______________________________________________ 29 Controles _____________________________________________ Consideraciones comunes _____________________________ Button ___________________________________________ CheckBox _________________________________________ CheckListBox ______________________________________ ComboBox ________________________________________ DateTimePicker ____________________________________ Label ____________________________________________ LinkLabel _________________________________________ ListBox ___________________________________________ MaskedTextBox ____________________________________ MonthCalendar ____________________________________ NotifyIcon ________________________________________ NumericUpDown ___________________________________ PictureBox ________________________________________ ProgressBar _______________________________________ RadioButton _______________________________________ RichTextBox _______________________________________ TextBox __________________________________________ ToolTip___________________________________________ Treeview__________________________________________ WebBrowser_______________________________________ Formulario ________________________________________
Microsoft Visual Basic.NET 2005

30 30 31 31 31 32 33 33 33 34 35 35 36 36 36 37 37 38 39 40 40 40 41

Contenido

CONTENIDO
ELEMENTOS DEL LENGUAJE _________________________________ 47 Variables ______________________________________________ Declarando variables ________________________________ mbito de variables___________________________ Tipos de variables___________________________________ Boolean ____________________________________ Byte _______________________________________ Char _______________________________________ Date _______________________________________ Decimal ____________________________________ Double _____________________________________ Integer _____________________________________ Long _______________________________________ Object _____________________________________ String ______________________________________ Conversin de tipo de datos ___________________________ Operadores ___________________________________________ Tipos de operadores _________________________________ Operadores de concatenacin/aritmticos ________ Operadores de comparacin ___________________ Operadores lgicos/bit a bit ____________________ Operador mod_______________________________ Prioridad de los operadores____________________________ Mensajes ______________________________________________ MsgBox __________________________________________ ImputBox _________________________________________ 48 49 49 50 52 52 52 53 54 55 55 56 56 57 57 58 58 58 58 59 59 60 60 60 63

ELEMENTOS DEL LENGUAJE 2 ________________________________ 65 Estructuras de decisin __________________________________ If...Then __________________________________________ If...Then...Else ______________________________________ Select Case________________________________________ Estructuras de bucle_____________________________________ While ____________________________________________ Do Loop __________________________________________ For...Next _________________________________________ For Each...Next_____________________________________ Salir de un procedimiento ________________________________ Realizar acciones con mtodos ____________________________ 66 66 67 68 69 69 70 72 74 75 76

Microsoft Visual Basic.NET 2005

Contenido

CONTENIDO
Matrices ______________________________________________ Matrices multidimensionales ___________________________ Para crear una matriz dinmica ________________________ Para declarar una variable unidimensional _________ Cambiar el tamao de matrices ________________________ Crear matrices de objeto______________________________ Procedimientos Sub _____________________________________ Declaracin de argumentos____________________________ Sintaxis de llamada__________________________________ Procedimientos Function _________________________________ Valores devueltos ___________________________________ Sintaxis de llamada__________________________________ Cmo tratar errores ____________________________________ 77 77 78 78 80 80 81 81 81 82 83 84 84

POO. PROGRAMACIN ORIENTADA A OBJETOS _______________ 87 Introduccin ___________________________________________ 88 Definicin _____________________________________________ 88 Herencia _________________________________________ 89 Encapsulacin______________________________________ 90 Polimorfismo_______________________________________ 90 Trabajando con clases ___________________________________ 91 Definiendo nuestra clase _________________________________ 93 Propiedades ___________________________________________ 93 Mtodos _____________________________________________ 102 Constructores ________________________________________ 103 Sobrecargas __________________________________________ 104 Herencia ______________________________________________110

Microsoft Visual Basic.NET 2005

CONTENIDOS

no ON cl .De S Dat cid Ol visual Basic.NET 2005 visual Ba mb e 2005 visual Basic.NET 2005 vis re Ta ien scr ELE aTa enc Db. te ip CT bl ia _ co = O NET 2005 visual Basic.NET 20 , c s. Basic.NET 2005 visual Basic.N co man & per T ion T _ e m ne do ls ar _ I , visual Basic.NET 2005 visual Ba In le T x t i n 2005 visual Basic.NET 2005 vis If cto ion = N Ope os.I cid _ I cid NET 2005 visual Basic.NET 20 le r = .Op ew rar d _ enc nci enc Ge e d c i Basic.NET 2005 visual Basic.N O O i tF t tor. com n() leD os.S per as.F enc ie visual Basic.NET 2005 visual Ba b. ld Fo abl Has and Ol ele ari _ c 2005 visual Basic.NET 2005 vis Ty a. Ro o. r eD ct o NET 2005 visual Basic.NET 20 E pe co Lo bC ed = (c ad ws xec nt Basic.NET 2005 visual Basic.N om It T on (l Th ut ad ma em. visual Basic.NET 2005 visual Ba ec en eR ta or nd T to d ea D 2005 visual Basic.NET 2005 vis Ne (q r, ta or)) im = de ue NET 2005 visual Basic.NET 20 0 Wh xt bl r Lo co To a. il Basic.NET 2005 visual Basic.N lu a Co e mn le dOp visual Basic.NET 2005 visual Ba lu le t a c fi mn 2005 visual Basic.NET 2005 vis la cto As tor. ion. s. Fo NET 2005 visual Basic.NET 20 Ad = r.Re r Ne Fie Ove d( Basic.NET 2005 visual Basic.N co ta ad ld r w co Ne visual Basic.NET 2005 visual Ba Da Cou wri lu fi nta bla ta nt mn la do .N 2005 visual Basic.NET 2005 vis End ta xt Co ew (c r a) co NET 2005 visual Basic.NET 20 Wh bla lu on = Ro ne .R mn t Basic.NET 2005 visual Basic.N 0 w x il e visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 INTRODUCCIN A VISUAL BASIC NET Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba Os presentamos la versin 2005 del Visual Studio. 2005 visual Basic.NET 2005 vis Conocerermos su pilar principal, las .NET Framework NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N Introduccin visual Basic.NET 2005 visual Ba Historia y presentacin 2005 visual Basic.NET 2005 vis .NET Framework NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic NET 2005 vis

s.

as

in

2005

INTRODUCCIN A VISUAL BASIC.NET


Introduccin

2005

Bienvenidos a Visual Studio .NET 2005 a lo largo de las siguientes pginas nos familiarizaremos con el que, tal vez, sea uno de los lenguajes de programacin ms completos y a la par sencillos de utilizar de los ltimos aos. Desde las primeras versiones de Basic, all por los aos 70, han sido innumerables los cambios sufridos por este lenguaje. Hoy en da Visual Basic .NET 2005 ofrece nuevas funcionalidades tales como ADO, .NET, POO, IntelliSense, las cuales nos facilitan crear aplicaciones potentes y seguras en pocos minutos. Pero hablaremos de estas ms adelante Microsoft, en su afn de ofrecer un producto potente y polivalente, ofrece en esta versin un producto lleno de nuevas funcionalidades, que harn las delicias de los programadores experimentados y suavizarn la curva de aprendizaje a aquellos que esto de la programacin les pille de nuevas. ste manual nace con la idea de aprender a programar en Visual Basic .NET 2005 sin tener conocimientos previos de programacin, por lo que si es nuevo en esto no se apure. Sin embargo al final del mismo y si todo ha ido bien ser capaz de crear aplicaciones tiles y seguras capaces de satisfacer todas sus necesidades, y por qu no , las de sus clientes.

Historia y presentacin
Estoy seguro que si lo que le apasiona es la historia y no la programacin, este apartado no va a ser uno de sus favoritos pero, aun as, me veo en la obligacin de hablar brevemente de los antecedentes de Visual Basic .NET 2005. BASIC Begginers All-Purpose Symbolic Instruction Code nace en 1964 con la clara idea de convertirse en un lenguaje de referencia para la industria, a la par que un lenguaje claro y sencillo de aprender. Trascurridos unos aos, en 1975, Microsoft, por aquel entonces una pequea compaa de 2 integrantes, lanza su primera versin de este lenguaje. Tras numerosas versiones, BASIC alcanza uno de sus momentos de gloria con la versin Visual Basic 6.0. Esta versin se hizo con un gran trozo del pastel de los programas empresariales y aun hoy son innumerables las aplicaciones funcionando que fueron hechas con esta versin y que estn esperando ser actualizadas a Microsoft Visual Basic .NET 2005, tambin llamado Visual Basic 8.0. Pero qu es Visual Basic .NET 2005? Visual Basic .NET 2005 es una aplicacin programa que nos permite programar (hacer otros programas) de una manera cmoda y sencilla gracias al uso de las .NET Framework. Visual Basic .NET 2005 es a su vez parte de Visual Studio 2005, que es una suite de programacin que consta de varios programas siendo el Basic uno de ellos.
Microsoft Visual Basic.NET 2005 Introduccin a Visual Basic.NET 2005

El que usted decida programar con Basic, C# o J# lo dejo a su eleccin, ya que debe saber que todo lo que puede hacer con Visual Basic .NET 2005 lo podr hacer tambin con Visual C#.NET 2005 por ejemplo, sin otro problema que conocer la sintaxis adecuada.

.NET Framework
Informacin general y conceptual sobre .NET Framework

.NET Framework es un componente integral de Windows que admite la creacin y ejecucin de la siguiente generacin de aplicaciones y servicios Web XML. El diseo de .NET Framework est enfocado a cumplir los objetivos siguientes: Proporcionar un entorno coherente de programacin orientada a objetos, en el que el cdigo de los objetos se pueda almacenar y ejecutar de forma local, ejecutar de forma local pero distribuida en Internet o ejecutar de forma remota. 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 fomente 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. .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 en 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 fomentan su seguridad y solidez. De hecho, el concepto de administracin de cdigo es un principio bsico del motor en tiempo de ejecucin. El cdigo destinado al motor en 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.
Microsoft Visual Basic.NET 2005 Introduccin a Visual Basic.NET 2005

.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 administradas y no administradas. En .NET Framework no slo se ofrecen varios hosts de motor en tiempo de ejecucin, sino que tambin se admite el desarrollo de estos hosts por parte de terceros. Por ejemplo, ASP.NET aloja el motor en tiempo de ejecucin para proporcionar un entorno de servidor escalable para el cdigo administrado. ASP.NET trabaja directamente con el motor en 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 en tiempo de ejecucin (en forma de una extensin de tipo MIME). Al usar Internet Explorer para alojar el motor en tiempo de ejecucin, puede incrustar componentes administrados o controles de Windows Forms en documentos HTML. Al alojar el motor en 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. 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

En las secciones siguientes se describen con ms detalle los componentes y caractersticas principales de .NET Framework. Caractersticas de Common Language Runtime 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.
Microsoft Visual Basic.NET 2005 Introduccin a Visual Basic.NET 2005

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 en 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 en tiempo de ejecucin permiten que el software legtimo implementado en Internet sea excepcionalmente variado. Adems, el motor en 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 en tiempo de ejecucin elimina muchos problemas de software comunes. Por ejemplo, el motor en 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. Adems, el motor en tiempo de ejecucin aumenta la productividad del programador. Por ejemplo, los desarrolladores pueden crear aplicaciones en el lenguaje que prefieran y seguir sacando todo el provecho del motor en 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 en 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 en 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 desarrolladores continen utilizando los componentes COM y las DLL que necesiten. El motor en tiempo de ejecucin est diseado para mejorar el rendimiento. Aunque Common Language Runtime proporciona muchos servicios estnMicrosoft Visual Basic.NET 2005 Introduccin a Visual Basic.NET 2005

dar de motor en 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 en 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 en tiempo de ejecucin. Biblioteca de clases de .NET Framework La biblioteca de clases de .NET Framework es una coleccin de tipos reutilizables que se integran estrechamente con Common Language Runtime. La biblioteca de clases est orientada a objetos, lo que proporciona tipos de los que su propio cdigo administrado puede derivar funciones. Esto ocasiona que los tipos de .NET Framework sean sencillos de utilizar y reduce el tiempo asociado con el aprendizaje de las nuevas caractersticas de .NET Framework. 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 (formularios Windows Forms) Aplicaciones de ASP.NET Servicios Web XML Servicios de Windows Por ejemplo, las clases de formularios 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 formularios Web Forms.

Microsoft Visual Basic.NET 2005

Introduccin a Visual Basic.NET 2005

10

Desarrollo de aplicaciones cliente 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 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 desarrolladores 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 formularios 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 a travs del Web. Las aplicaciones pueden implementar las caractersticas de una aplicacin local a la vez que se implementan como una pgina Web.
Microsoft Visual Basic.NET 2005 Introduccin a Visual Basic.NET 2005

11

Desarrollo de aplicaciones de servidor Las aplicaciones de servidor en entornos administrados se implementan mediante hosts de motor en tiempo de ejecucin. Las aplicaciones no administradas alojan Common Language Runtime, 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 administrador.

Cdigo administrado en el servidor

ASP.NET es el entorno host que permite a los desarrolladores utilizar .NET Framework con las aplicaciones para el Web. Sin embargo, ASP.NET no es slo un host de motor en 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 constan de componentes de software reutilizables diseados para que los utilicen otras aplicaciones, como aplicaciones cliente tradicional, 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.
Microsoft Visual Basic.NET 2005 Introduccin a Visual Basic.NET 2005

12

Si ha utilizado versiones anteriores de la tecnologa ASP, apreciar de inmediato las mejoras que ofrecen ASP.NET y formularios Web Forms. Por ejemplo, puede desarrollar pginas de formularios Web Forms en cualquier lenguaje compatible con .NET Framework. Adems, 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 formularios Web Forms se ejecutan en lenguaje mquina nativo porque, al igual que todas las aplicaciones administradas, sacan todo el provecho del motor en 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 en 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 formularios 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. Visual Basic.NET 2005 trabaja con versin 2.0 de las Framework, por lo que cuando distribuya sus aplicaciones deber asegurarse que dicha versin est instalada, o su aplicacin no funcionar.

Microsoft Visual Basic.NET 2005

Introduccin a Visual Basic.NET 2005

13

no ON cl .De S Dat cid Ol visual Basic.NET 2005 visual Ba mb e 2005 visual Basic.NET 2005 vis re Ta ien scr ELE aTa enc Db. te ip CT bl ia _ co = O NET 2005 visual Basic.NET 20 , c s. Basic.NET 2005 visual Basic.N co man & per T ion T _ e m ne do ls ar _ I , visual Basic.NET 2005 visual Ba In le T x t i n 2005 visual Basic.NET 2005 vis If cto ion = N Ope os.I cid _ I cid NET 2005 visual Basic.NET 20 le r = .Op ew rar d _ enc nci enc Ge e d c i Basic.NET 2005 visual Basic.N O O i tF t tor. com n() leD os.S per as.F enc ie visual Basic.NET 2005 visual Ba b. ld Fo abl Has and Ol ele ari _ c 2005 visual Basic.NET 2005 vis Ty a. Ro o. r eD ct o NET 2005 visual Basic.NET 20 E pe co Lo bC ed = (c ad ws xec nt Basic.NET 2005 visual Basic.N om It T on (l Th ut ad ma em. visual Basic.NET 2005 visual Ba ec en eR ta or nd T to d ea D 2005 visual Basic.NET 2005 vis Ne (q r, ta or)) im = de ue NET 2005 visual Basic.NET 20 0 Wh xt bl r Lo co To a. il Basic.NET 2005 visual Basic.N lu a Co e mn le dOp visual Basic.NET 2005 visual Ba lu le t a c fi mn 2005 visual Basic.NET 2005 vis la cto As tor. ion. s. Fo NET 2005 visual Basic.NET 20 Ad = r.Re r Ne Fie Ove d( Basic.NET 2005 visual Basic.N co ta ad ld r w co Ne visual Basic.NET 2005 visual Ba Da Cou wri lu fi nta bla ta nt mn la do .N 2005 visual Basic.NET 2005 vis End ta xt Co ew (c r a) co NET 2005 visual Basic.NET 20 Wh bla lu on = Ro ne .R mn t Basic.NET 2005 visual Basic.N 0 w x il e visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 CONOCIENDO VISUAL BASIC NET Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba Primeros pasos con Visual Basic.NET. 2005 visual Basic.NET 2005 vis Conoceremos su interface y la manera de crear un programa NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N La pantalla de inicio visual Basic.NET 2005 visual Ba Iniciar un nuevo proyecto 2005 visual Basic.NET 2005 vis El entorno NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic NET 2005 vis

s.

as

in

2005

CONOCIENDO VISUAL BASIC.NET

2005

En esta seccin aprenderemos a familiarizarnos con el entorno de Visual Basic .NET 2005: conoceremos su interface, sus tipos de proyectos, caractersticas y opciones de configuracin. Antes de nada me gustara aclarar que las capturas y cdigo de este manual han sido realizados con Microsoft Visual Studio 2005 Versin 8.0.50727.867 bajo las .NET Framework Versin 2.0.50727.

La pgina de inicio

La primera vez que habr Visual Basic .NET se le pedir que seleccione el tipo de proyectos en los que piensa trabajar. Suponiendo que ha elegido proyectos Visual Basic, la siguiente ventana que aparecer ser similar a la aqu expuesta. En ella podemos definir las siguientes reas. Proyectos recientes: en esta seccin aparecern los ltimos proyectos con los que hemos estado trabajando, dndonos la posibilidad de abrirlos pinchando en ellos. Tambin podemos abrir otros proyectos o generar nuevos. MSDN: es una ventana de navegador que nos ofrece distintos enlaces a artculos de Microsoft relacionados con el producto. Introduccin: esta seccin contiene enlaces a tareas bsicas de programacin. Microsoft se ha dado cuenta de lo importante que es que el usuario no se sienta solo ante su programa y para evitar que este se desespere hallando soluciones ha creado MSDN. La pgina web de MSDN es un bastin de informacin en el que podemos encontrar todo tipo de informacin, ayuda, tutoriales, artculos tcnicos, etc. Les recomiendo que le echen un vistazo.

Microsoft Visual Basic.NET 2005

Conociendo Visual Basic.NET 2005

16

Iniciar un nuevo proyecto

Para iniciar un nuevo proyecto tenemos distintas vas: podemos hacer clic en Crear proyecto dentro del rea proyectos recientes, desplegar el men Archivo y elegir Nuevo Proyecto o simplemente presionar la combinacin de teclas Ctrl +N. En esta ventana se nos solicita el nombre de nuestro proyecto y el tipo de este. Existen numerosos tipos de proyecto pero por ahora no centraremos en los del tipo Aplicacin para Windows. Seleccionamos este y le damos el nombre, en mi caso Mi primera aplicacin.

Microsoft Visual Basic.NET 2005

Conociendo Visual Basic.NET 2005

17

El entorno

El entorno o interface que utiliza Visual Studio .NET 2005 es uno de los ms completos que podemos encontrar hoy en da. Nos brinda la posibilidad de tener aquellas herramientas que queramos al alcance de un solo clic, gracias a una gran capacidad de personalizacin. Dicha capacidad hace que cada programador personalice la aplicacin a su antojo. No obstante existen unas reas bien definidas. Diseador de formularios

Es el rea principal del entorno, en ella configuraremos la apariencia de nuestro formulario, dndole un tamao y aspecto determinado y agregando los distintos controles que conformarn nuestra aplicacin. Para cambiar el aspecto de nuestro formulario, modificaremos su tamao situando el cursor en la esquina de este, haciendo clic con el ratn y dejando presionado el botn. Del mismo modo podemos establecer su ancho y alto a mano alterando su propiedad Width y Height respectivamente. Si queremos renombrarlo no tendremos mas que modificar su propiedad Text.

Microsoft Visual Basic.NET 2005

Conociendo Visual Basic.NET 2005

18

Cuadro de herramientas

En esta seccin tenemos los distintos controles y objetos que utilizaremos en nuestras aplicaciones. Por defecto los distintos controles estn organizados por categoras. Comenzaremos con los controles situados en la categora de Controles comunes pero ms adelante veremos otros. Es necesario mencionar que en la barra de herramientas no estn todas la herramientas que nos brinda Visual Basic .NET, sino slo aquellas que la gente de Microsoft han pensado importantes. Si queremos agregar alguna de las muchas herramientas que no estn visibles pero si disponibles, deberemos de hacer clic con el botn derecho y seleccionar Elegir elementos. Si queremos aadir un control a nuestro formulario podemos hacerlo de varias maneras: Haciendo clic en el control elegido y dibujarlo en el formulario Clickear dos veces, con lo cual se posicionara un control en la esquina superior izquierda del formulario Dejando presionado el botn izquierdo del ratn sobre el control elegido y arrastrando el mismo hacia la ubicacin elegida en el formulario. Una de las nuevas funcionalidades que incorpora Visual Basic .NET en su versin 2005 y que ms han aplaudido los programadores son las lneas gua o lneas de ayuda al posicionamiento de controles. Estas lneas no ayudan a alinear controles entre si, centrar estos, o posicionarlos en una distancia estndar frente a un lateral del formulario.

Microsoft Visual Basic.NET 2005

Conociendo Visual Basic.NET 2005

19

Explorador de soluciones

Una solucin puede constar de varios formularios, clases y soluciones; pues bien, el explorador de soluciones es el lugar donde vemos y administramos las distintas partes de nuestra aplicacin. Por defecto Visual Basic .NET 2005 no nos muestra toda la informacin de nuestra solucin quedando oculta por ejemplo las referencias de nuestro proyecto as como el cdigo autogenerado. Es an pronto para entender todo esto, pero si quieren ir investigando con cuidado presionen el botn Mostrar todos los archivos para ver de qu les hablo. La ventana de propiedades

Microsoft Visual Basic.NET 2005

Conociendo Visual Basic.NET 2005

20

Desde la ventana de propiedades podremos ver y modificar las distintas propiedades de cada control o formulario de nuestra aplicacin. La ventana de propiedades cambiara su contenido dependiendo del control que tengamos seleccionado. En la parte superior de la ventana de propiedades nos aparecer un desplegable que nos permitir seleccionar los distintos controles que tengamos en el formulario actual. Aparecer el nombre del control y el tipo o clase a la que pertenece. Las propiedades de los objetos estn, por defecto, ordenadas por categoras (apariencia, diseo, comportamiento) y tal vez para comenzar prefieran este mtodo al orden alfabtico. Como pueden apreciar en la figura, la ventana de propiedades tambin se nos permite ver los eventos del control o formulario seleccionado y los procedimientos, si los hay, asociados a dicho evento. Si esto de eventos y procedimientos le suena a chino, no se preocupe en absoluto pues son conceptos que aclararemos ms adelante.

Las propiedades pueden ser modificadas en esta ventana, nos podremos encontrar con propiedades que puedan tomar cualquier valor de cadena de texto, como la propiedad text, otras que tan slo permitan dos opciones como la propiedad Visible, y otras que nos obliguen a seleccionar alguna de las opciones que nos propone como la propiedad TextAlign. No se deje impresionar por el gran nmero de propiedades, pues muchas de ellas son comunes a la mayor parte de los controles y las iremos conociendo juntos en las prximas pginas. Para ir abriendo boca, nos centraremos en una propiedad que merece mi atencin, la propiedad Name.
Microsoft Visual Basic.NET 2005 Conociendo Visual Basic.NET 2005

21

La propiedad Name nos permitir identificar nuestros controles tanto en la ventana de propiedades como dentro de la ventana de cdigo. Le recomiendo que lo primero que haga una vez que haya agregado un control a su formulario, sea nombrarlo con un nombre que lo identifique de manera clara e inequvoca, por ejemplo BtnAceptar nos recuerda que el objeto seleccionado es del tipo botn y que es el Aceptar no el cancelar o la etiqueta que acompaa al nombre. Del mismo modo nombrando nuestros controles nada ms agregarlos al formulario evitamos que el Visual Basic olvide cambiar el cdigo autogenerado. En la parte inferior de la ventana de propiedades est el panel de descripcin, en l se nos mostrara una breve descripcin de la propiedad seleccionada en ese momento. No pierda de vista este panel pues ahora que estamos empezando le ser de mucha utilidad, y ms tarde cuando creemos nuestros propios controles, podremos utilizar este rea para informar a otros programadores y compaeros de la utilidad de nuevas propiedades que nosotros mismos hemos creado. La ventana de cdigo

Para acceder a la ventana de cdigo tenemos varias formas, podremos seleccionar un control, hacer clic con el botn derecho y marcar Ventana de cdigo, seleccionar la pestaa o simplemente presionar F7. Estoy seguro de que hasta ahora ha encontrado apasionante las ventanas de propiedades, explorador de soluciones, etc pero seguro que echaba en falta un montn de sentencias de cdigo, instrucciones extraas y comentarios. Dnde programo? Pues en este rea, Visual Basic .NET 2005 nos brinda un entorno de programacin impensable hace unos aos. Olvdese recordar de manera exacta cada mtodo o propiedad pues el Visual nos va ayudar, y mucho.

Microsoft Visual Basic.NET 2005

Conociendo Visual Basic.NET 2005

22

Pero vayamos por orden.

En la parte superior de la ventana de cdigo tenemos dos desplegables, el de la izquierda nos permite seleccionar el objeto sobre el cual queremos trabajar y el de la derecha nos muestra los distintos eventos de ese objeto. Los objetos en Visual Basic .NET 2005 estn vivos, es decir, son capaces de reaccionar a estmulos. De hecho, bsicamente, lo que haremos como programadores, ser programar las acciones que nuestros controles llevarn a cabo cuando reacciones a esos estmulos o eventos. Le invito a crear su primera aplicacin para que la explicacin tome forma y entienda como programaremos en Visual Studio .NET 2005 Cree un nuevo proyecto y asgnele el original nombre de Mi primer proyecto. Agregue al formulario una etiqueta, una caja de texto y un botn, y modifique sus propiedades como en la tabla siguiente: Nombre lblNombre txtNombre btnSaludar Propiedad Text Nombre Pepe Saludar Tipo Label Textbox Button

Microsoft Visual Basic.NET 2005

Conociendo Visual Basic.NET 2005

23

Vamos a programar el evento click del objeto btnSaludar, para ello abrimos la ventana de cdigo, y en el desplegable de arriba a la izquierda seleccionamos el objeto btnSaludar y en el de la derecha buscamos el evento click. Al hacer esto se crear automticamente el cdigo necesario, es pronto para entender ese galimatas, por ahora nos centraremos en decir que aqullo que queramos que se lleve a cabo al hacer click en nuestro botn deber ir ah dentro.

En nuestro caso queremos hacer un sencillo programa que nos salude, para ello escribiremos el siguiente cdigo
MsgBox(Hola & txtNombre.Text)

Este cdigo mostrar un pequeo mensaje en pantalla, pero vayamos poco a poco conociendo las bondades que nos brinda el interface. Imagine que no recuerda el nombre exacto para invocar a estos mensajitos. Escriba Msg y presione la combinacin de teclas Ctrl + Espacio o Ctrl + J, el Intellisense nos ofrece una ventana emergente con las instrucciones que comienzan por Msg y podemos ver fcilmente el comando Msgbox acompaado de un cartel descriptivo de su utilidad y sintaxis.

Microsoft Visual Basic.NET 2005

Conociendo Visual Basic.NET 2005

24

Si ese es el que queremos utilizar lo seleccionaremos con la tecla tabulador, una vez escrito el comando, el Intellisense, de nuevo, nos recuerda la sintaxis del comando, los parmetros que necesita y el tipo de estos. En este caso vemos que Msgbox tiene tres parmetros: prompt, buttons y title. Los parmetros opcionales en este caso buttons y title van encerrados entre corchetes. Si queremos ejecutar nuestra aplicacin tan slo tendremos que presionar F5 o darle al botn Play de nuestra barra de herramientas.

El resultado de la aplicacin es el esperado, peroqu pasara si el usuario no escribe su nombre en la casilla adecuada? Mostraramos un Hola sin ms.

Microsoft Visual Basic.NET 2005

Conociendo Visual Basic.NET 2005

25

Vamos a ir enriqueciendo nuestro sencillo programa a la par que seguimos familiarizndonos con la generacin de cdigo. Antes de mostrar nuestro mensaje nos aseguraremos que el usuario ha aadido texto al objeto txtNombre, esto lo haremos con una estructura de decisin que estudiaremos ms adelante
If txtNombre.Text <> Then MsgBox(Hola & txtNombre.Text) End If

Con esta simple estructura nos estamos asegurando de que tan slo mostraremos nuestro saludo al usuario si este ha introducido algo en la caja de texto, o lo que es lo mismo, si su propiedad text es distinta de nada. Ahora haga clic en el margen de la ventana de cdigo a la altura de la primera lnea. Con ello introduciremos en nuestro cdigo un punto de interrupcin, tal como muestra la figura.

Esto har que nuestro programa se detenga al llegar a esa lnea y podamos examinar el flujo de nuestro cdigo, los valores de las propiedades e incluso modificar el cdigo en tiempo de ejecucin. Ejecute su aplicacin, introduzca un nombre y presione el botn, ver que su aplicacin se detiene abriendo la seccin de cdigo donde introdujo el punto de interrupcin como muestra la figura.

La flecha amarilla nos indica que esa es la prxima lnea que se va a leer. Si pasamos el ratn por encima de la propiedad text veremos que el GUI nos muestra el valor de esta propiedad. Si queremos que la lnea se ejecute podremos darle al botn Paso a paso por instruccin o bien presionar la tecla F8
Microsoft Visual Basic.NET 2005 Conociendo Visual Basic.NET 2005

26

Viendo el funcionamiento de nuestro programa vemos que ya va siendo un poco mas conciso, pero, qu pasara si el usuario introduce en la caja de texto espacios en blanco? Pues que se habra saltado nuestro pequeo control de errores pues en programacin una cadena de espacios en blanco no es lo mismo que la ausencia de caracteres. Vamos a corregirlo haciendo uso de las ventajas del Visual Basic .NET 2005. Con nuestro programa detenido en el punto de interrupcin modificamos la condicin de la expresin haciendo uso de la funcin Trim que elimina de una cadena de texto los espacios en blanco tanto por delante como por detrs, como muestra la figura.

Microsoft Visual Basic.NET 2005

Conociendo Visual Basic.NET 2005

27

Una vez hecha la modificacin continuamos con la ejecucin, botn Play de nuevo o F5 y vemos como el cambio en la sentencia ha modificado el funcionamiento de nuestra aplicacin sin necesidad de detenerla y volverla a ejecutar. Ahora detenga su programa y site el cursor sobre la palabra trim y presione F1 de nuevo, el Visual Basic .NET 2005 nos ayuda lanzando la Ayuda MSDN con la pgina que nos brinda una descripcin del comando, as como un ejemplo y enlaces de inters. Si quiere disponer del mejor libro de Visual Basic .NET 2005 he de decirle que este es la ayuda MSDN. Algo que hay que tener en cuenta cuando estamos programando es que nuestro cdigo puede ser visto por terceras personas (compaeros de departamento, analistas, etc); tambin tenemos que pensar que aquel cdigo que hicimos hace unos meses, puede ser que necesitemos abrirlo hoy para corregirlo o aadirle funcionalidad. Pero qu ocurre si abrimos un programa nuestro o ajeno y no entendemos el cdigo? Para poner solucin a este problema tenemos los comentarios. Los comentarios acompaan a nuestro cdigo de tal modo que sea fcil entender el funcionamiento de cada procedimiento sin entorpecer o mermar el rendimiento de nuestra aplicacin. Para introducir un comentario no tenemos ms que empezar la lnea con el carcter comilla simple, o bien seleccionar el fragmento de cdigo que queremos comentar y presionar el botn comentar.

Microsoft Visual Basic.NET 2005

Conociendo Visual Basic.NET 2005

28

no ON cl .De S Dat cid Ol visual Basic.NET 2005 visual Ba mb e 2005 visual Basic.NET 2005 vis re Ta ien scr ELE aTa enc Db. te ip CT bl ia _ co = O NET 2005 visual Basic.NET 20 , c s. Basic.NET 2005 visual Basic.N co man & per T ion T _ e m ne do ls ar _ I , visual Basic.NET 2005 visual Ba In le T x t i n 2005 visual Basic.NET 2005 vis If cto ion = N Ope os.I cid _ I cid NET 2005 visual Basic.NET 20 le r = .Op ew rar d _ enc nci enc Ge e d c i Basic.NET 2005 visual Basic.N O O i tF t tor. com n() leD os.S per as.F enc ie visual Basic.NET 2005 visual Ba b. ld Fo abl Has and Ol ele ari _ c 2005 visual Basic.NET 2005 vis Ty a. Ro o. r eD ct o NET 2005 visual Basic.NET 20 E pe co Lo bC ed = (c ad ws xec nt Basic.NET 2005 visual Basic.N om It T on (l Th ut ad ma em. visual Basic.NET 2005 visual Ba ec en eR ta or nd T to d ea D 2005 visual Basic.NET 2005 vis Ne (q r, ta or)) im = de ue NET 2005 visual Basic.NET 20 0 Wh xt bl r Lo co To a. il Basic.NET 2005 visual Basic.N lu a Co e mn le dOp visual Basic.NET 2005 visual Ba lu le t a c fi mn 2005 visual Basic.NET 2005 vis la cto As tor. ion. s. Fo NET 2005 visual Basic.NET 20 Ad = r.Re r Ne Fie Ove d( Basic.NET 2005 visual Basic.N co ta ad ld r w co Ne visual Basic.NET 2005 visual Ba Da Cou wri lu fi nta bla ta nt mn la do .N 2005 visual Basic.NET 2005 vis End ta xt Co ew (c r a) co NET 2005 visual Basic.NET 20 Wh bla lu on = Ro ne .R mn t Basic.NET 2005 visual Basic.N 0 w x il e visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 CONTROLES Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba Conoceremos los controles principales de Windows, 2005 visual Basic.NET 2005 vis sus caractersticas, eventos y comportamientos. NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N Controles visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic NET 2005 vis

s.

as

in

CONTROLES
Tal y como vimos en el captulo 2, Visual Basic. NET 2005 pone a nuestra disposicin un elevado nmero de controles que harn posible nuestro trabajo. Tenemos controles sencillos con apenas unas pocas propiedades como el control timer, y otros mucho ms complejos con decenas de propiedades y mtodos como el potentsimo oledbadapter. La mayor parte de los controles comparten innumerables propiedades por lo que no estimo necesario llenar pginas con todas las propiedades de cada control, ya que creo que para eso ya tenemos la ayuda del propio Visual Studio 2005. Considero mejor el abarcar cada control de una manera ms personalizada comentando para que se utilizan y aqullas propiedades, mtodos y eventos ms comunes de programar. Tenemos a nuestra disposicin controles de todo tipo, algunos llenarn nuestros formularios como el control TextBox y otros nos brindars su funcionalidad sin ser vistos como el objeto DataSet. Las mltiples funcionalidades de los controles que se nos brindan son mucho ms fciles de entender y aprender con la prctica, por lo que si queda alguna duda con el manejo de los controles espero que estas sean disipadas con los ejercicios que acompaan a este manual.

Consideraciones comunes
Casi todos los controles tienen una serie de caractersticas o propiedades comunes que afectan sobre todo a su diseo. Propiedades: Name: podramos decir que es la propiedad ms importante de todo objeto ya que mediante ella referenciamos al mismo. Os aconsejo nombrar los objetos en cuanto los agreguemos al formulario y que el nombre identifique la funcin del control y el tipo. Ej: lblNombre, txtEdad, btnCancelar, etc Location: estable la x y la y del objeto, es decir la distancia horizontal y vertical en pixeles del objeto respecto al lado izquierdo y superior de su contenedor. Size: establece el height y width del objeto es decir su tamao en pixeles. Anchor: define a qu bordes del contenedor est anclado control, por defecto los controles estn anclados al lado izquierdo y superior. Si queremos modificar este comportamiento no tenemos ms que modificar esta propiedad. Dock: la propiedad dock hace que el control en cuestin se acople a uno de los laterales del contenedor o formulario. Text: la propiedad text es el texto que mostrar el control. La propiedad text sustituye a la antigua propiedad caption.

Microsoft Visual Basic.NET 2005

CONTROLES

30

Enabled: la propiedad enabled establece si un control estar activado o desactivado. Si un control est desactivado el usuario no podr interactuar con l, sin embargo s podemos modificar y acceder a sus propiedades y eventos desde cdigo.

Button
El control botn sustituye al antiguo CommandButton. Permite al usuario hacer clic en l para llevar a cabo una accin. El texto que muestra es su propiedad text. Un objeto button que est en un formulario invocado como cuadro de dilogo mediante el mtodo showdialog, puede retornar un valor de la coleccin dialogresult modificando su propiedad dialogresult. Es decir, si posicionamos un objeto button en un formulario llamado mediante frmAuxiliar.showdialog y modificamos su propiedad dialogresult a OK, el botn devolver esa respuesta y cerrar el formulario automticamente.

CheckBox
El control CheckBox es la representacin grfica de una variable boolean. Su propiedad ms importante es checked; dicha propiedad podr tener el valor true o false. El control CheckBox es por lo tanto ideal para dar al usuario la posibilidad de elegir entre dos opciones, por ejemplo la tpica casilla de verificacin de los acuerdos de licencia, es un control CheckBox.

CheckedListbox
El control CheckedListbox es un control combinado a raz de un control ListBox y un control CheckedListbox. Nos permite ofrecer al usuario elegir mltiples opciones, como los ingredientes de una pizza sin recurrir al uso de varios controles CheckBox. Las propiedades principales de este control: Checkeditems que nos devuelve una coleccin con los tems seleccionados. Checkindices que nos devuelve una coleccin con los ndices de los elementos seleccionados. Items que nos permite acceder a cada uno de los elementos del control, pasndole el ndice en base 0 del elemento al cual queremos acceder. Por ejemplo el siquiente cdigo nos devolvera Sandas.

Microsoft Visual Basic.NET 2005

CONTROLES

31

CheckedListBox1.Items(2) .ToString

El evento principal del control CheckedListbox es SelectedIndexChanged y se produce cada vez que se activa o desactiva cualquier item. El CheckedListbox es muy similar al control ListBox del cual hablar en detalle ms adelante.

ComboBox
El ComboBox en un control compuesto de un TextBox, un ListBox y un button. Nos permite dar al usuario la posibilidad de elegir una opcin.

Las selecciones que aparecen en el ComboBox son las distintas entradas de su propiedad tems y el tem seleccionado es el selecteditem. El control ComboBox permite autocompletarse segn escribimos, modificando para ello sus propiedades autocompletmode y autocompletsource. Al igual que el CheckedListBox, el control ComboBox hereda gran parte de la funcionalidad del control ListBox que veremos ms adelante. El evento principal de este control es SelectedIndexChanged que sucede cuando cambia el ndice del objeto seleccionado.

Microsoft Visual Basic.NET 2005

CONTROLES

32

DateTimePicker

Este control tiene como funcionalidad el permitir al usuario seleccionar una fecha de una manera grfica. La propiedad ms importante del control DateTimePicker es su propiedad value que nos devuelve un tipo date con la fecha seleccionada. El formato de la fecha devuelta puede modificarse en la propiedad format. Si queremos evitar que el usuario seleccione una fecha incorrecta, demasiado antigua o demasiado adelantada, podremos acotar las fechas vlidas modificando las propiedades Mindate (fecha mnima) y Maxdate (fecha mxima)

Label
El control label o etiqueta es un control sencillo y de obligado uso en cualquier formulario Windows. El control label tiene como cometido el mostrar un texto al usuario; acompaar por tanto a cajas de texto, paneles, etc. La propiedad principal es su propiedad text. La etiqueta se utiliza por lo tanto para mensajes de salida ya que su propiedad text no puede ser modificada por el usuario.

LinkLabel
El objeto LinkLabel hereda toda la funcionalidad del objeto link y le agrega la posibilidad de reaccionar al evento LinkClicked. Sera por tanto dentro de este evento dnde escribiremos el cdigo necesario para realizar la apertura de un formulario, pgina web, etc.
Ej: Private Sub lnk1 _ linkclicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles lblAuxiliar.LinkClicked Form2.Show() lblAuxiliar.LinkVisited = True End Sub

Microsoft Visual Basic.NET 2005

CONTROLES

33

ListBox
Un control ListBox muestra una lista de elementos entre los que el usuario puede seleccionar uno o ms dependiendo de su propiedad selectionmode. Si el nmero total de elementos supera el nmero que se puede mostrar, se agrega automticamente una barra de desplazamiento al control ListBox. El control ListBox expone en su propiedad items una coleccin de elementos objects. A los cuales se puede acceder mediante un ndice en base 0. El siguiente cdigo dara el resultado que muestra la figura
Ej: MsgBox(ListBox1.Items(1) .ToString) .

Para agregar elementos a un ListBox lo podemos hacer a travs de la ventana de propiedades o por cdigo mediante la funcin add.
ListBox1.Items.Add(Alicante)

Si queremos eliminar un objeto lo haremos mediante el mtodo remove.


ListBox1.Items.Remove(Alicante)

La sentencia anterior eliminara Alicante de la coleccin de items en caso de que lo encontrara; si hubiera ms de una coincidencia, slo eliminara la primera por lo que el mtodo remove se utilizar en contadas ocasiones siendo preferible el mtodo removeat, que espera como argumento el ndice del elemento a eliminar.
ListBox1.Items.RemoveAt(2)

Si queremos eliminar todos los elementos lo haremos mediante el mtodo clear


Listbox1.Items.Clear

Microsoft Visual Basic.NET 2005

CONTROLES

34

Un elemento ListBox nos proporciona adems las siquientes propiedades Propiedad SectedItem SelectedIndex Descripcin Nos devuelve el elemento seleccionado. Slo es til si la propiedad selectionmode=one Nos devuelve el ndice del elemento seleccionado. Solo es til si la propiedad selectionmode=one Subcoleccin con los elementos seleccionados. Para acceder a ellos utilizaremos un ndice en base 0 Subcoleccin con los ndices de los elementos seleccionados. Para acceder a ellos utilizaremos un ndice en base 0

SelectItems

SelectedIndices

Si queremos buscar un elemento dentro del ListBox utilizaremos el mtodo indexof que nos devolver el ndice dnde encontr el elemento en caso de que lo encontrara y -1 si no fuera as.
ListBox1.Items.IndexOf(alicante)

MaskedTextBox
Este control que hereda toda la funcionalidad del TextBox nos permite acotar la entrada de texto a un formato concreto. La maskedtextbox es por tanto el control ideal para recopilar fechas, matriculas, etcPara ello deberemos configurar su propiedad mask estableciendo esta en una de las mscaras propuestas o crear la nuestra propia. Si queremos informar al usuario de que el carcter que est tratando de introducir no es vlido podemos establecer a true la propiedad Beeponerror. Si queremos validar que se ha introducido en el control el texto requerido podemos comprobar su propiedad maskfull
If MaskedTextBox1.MaskFull Then Validar _ usuario(MaskedTextBox1.Text) End If

MonthCalendar
El control MonthCalendar muestra una intuitiva interfaz grfica de usuario para que los usuarios vean y establezcan informacin relativa a fechas. El control muestra un calendario: una cuadrcula que contiene el nmero de das del mes, ordenado en columnas, debajo de los das de la semana con el intervalo de fechas seleccionado resaltado. Para seleccionar un mes diferente, puede hacer clic en los botones de fecha a los lados del ttulo del mes. A diferencia del control DateTimePicker, puede seleccionar ms de una fecha con este control con las propiedades SelectionStart y SelectionEnd
MonthCalendar1.SelectionStart = CDate(01/03/2008) MonthCalendar1.SelectionEnd = CDate(06/03/2008)

Microsoft Visual Basic.NET 2005

CONTROLES

35

NotifyIcon

El componente NotifyIcon 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. Como propiedades interesantes tenemos la propiedad icon que establece el icono que mostrar y el evento que programaremos normalmente ser el asociado al doble click.

NumericUpDown
El control NumericUpDown 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 de valor numrico fijo. 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 en la parte del cuadro de texto del control. Al presionar la tecla FLECHA ARRIBA, el nmero se mueve hacia arriba hacia el valor mximo; al presionar la tecla FLECHA ABAJO, el nmero se mueve hacia el mnimo. Debido a su verstil funcionalidad, este control es una eleccin obvia, por ejemplo, si desea crear un control de volumen para una aplicacin de reproduccin de msica. El control NumericUpDown se utiliza en muchas aplicaciones del Panel de control de Windows. La propiedad que nos dice el nmero selecionado es su propiedad value y limitaremos el nmero mayor y menor del rango con la propiedad Maximum y Minimum respectivamente.

PictureBox
El control PictureBox se utiliza para mostrar grficos en formato de mapa de bits, GIF, JPEG, metarchivo o icono. Se puede cargar la imagen en el control en tiempo de diseo gracias a su propiedad image o mediante cdigo en tiempo de ejecucin.
PictureBox1.Image = Image.FromFile(d:\fotos\coche\DSC00053.JPG)

Microsoft Visual Basic.NET 2005

CONTROLES

36

El modo en el que se mostrar la imagn se configura mediante la propiedad SizeMode la cual puede tomar los siguientes valores. Valor Normal Descripcin La imagen se coloca en la esquina superior izquierda de PictureBox. La imagen se recorta si es ms grande que el objeto PictureBox que la contiene. La imagen situada dentro de PictureBox se estira o se encoge para ajustarse al tamao de PictureBox. El tamao de PictureBox es igual al 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, se coloca en el centro de PictureBox y se recortan los bordes exteriores. Se aumenta el tamao de la imagen o se disminuye, manteniendo la proporcin de tamao.

StretchImage AutoSize

CenterImage

Zoom

ProgressBar
El control ProgressBar 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 como, por ejemplo, la carga de un archivo grande. Sus propiedades principales son el Value, Minimum y Maximum.

RadioButton

Los controles RadioButton 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 importante: cuando un usuario selecciona un botn de opcin, no puede seleccionar ninguno de los otros botones de opcin del mismo grupo
Microsoft Visual Basic.NET 2005 CONTROLES

37

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. Para definir distintos grupos de opciones debemos introducir los objetos RadioButton en algn objeto contenedor tales como GroupBox o panels. La propiedad que indica si un RadioButton est marcado o no es su propiedad checked.

RichTextBox
El control RichTextBox 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. Para cargar un archivo de texto o salvar el contenido de este en un fichero podemos utilizar los mtodos loadfile y savefile
Sub cargar _ archivo() RichTextBox1.LoadFile(C:\cv.doc) End Sub Sub salvar _ archivo() RichTextBox1.SaveFile(C:\cv.doc) End Sub

Si queremos trabajar con el texto seleccionado en el objeto RichTextBox nos serviremos de la propiedad selectedtext. Si queremos hacer una seleccin por cdigo utilizaremos el mtodo select o las propiedad selectionstart y selectionlength
RichTextBox1.Select(posicion _ inicial, tamao _ de _ la _ seleccion) RichTextBox1.SelectionStart = posicion _ inicial RichTextBox1.SelectionLength = tamao _ de _ la _ seleccion

La propiedad selectionlegth ser mayor que 0 slo cuando haya un texto seleccionado, sin embargo la propiedad selectionstart guardar la posicn del cursor haya o no seleccin.

Microsoft Visual Basic.NET 2005

CONTROLES

38

Si deseamos buscar una cadena de texto dentro de un TextBox utilizaremos el mtodo indexof, que nos devolver la posicin donde hay la cadena buscada o un cero en caso de que no se encuentre.
Posicion donde se encuentra la palabra Dim a As Integer a=RTB1.Text.IndexOf(hola, 0, StringComparison.OrdinalIgnoreCase)

TextBox
Los cuadros de texto se utilizan para obtener entradas del usuario o para mostrar texto. El control TextBox se utiliza generalmente para el texto que se puede editar, aunque tambin puede configurarse como control de slo lectura. Los cuadros de texto pueden mostrar varias lneas, ajustar el texto al tamao del control y agregar formato bsico. El control TextBox proporciona a diferencia del RichTextBox un nico estilo de formato para el texto mostrado o escrito en el control. Si queremos limitar el tamao mximo a introducir en un control textbox modificaremos su propiedad maxlegth. La propiedad booleana multiline establecida por defecto a False nos permite que el control TextBox muestre varias lneas de texto. Para permitir que el control TextBox reciba saltos de lnea o tabulados, deberemos establecer a true sus propiedades AcceptsReturn y AcceptsTabs respectivamente. Si estamos utilizando el control para solicitar un password al usuario no tendremos que implementar una tediosa rutina para substituir los caracteres presionados por asteriscos u algn otro smbolo. Bastar con modificar su propiedad PasswordChar Los eventos mas habituales de programar son los eventos de pulsacin de teclas, el evento textchanged se produce siempre que cambien el contenido de la propiedad text del control. Los eventos keydown, keypress y keyup nos permiten evaluar y modificar el normal funcionamiento del control TextBox al recibir una pulsacin de una tecla. El cdigo de ejemplo siguiente impide que el control TextBox1 acepte algn carcter fuera del rango de la a a la z
Private Sub TextBox1 _ KeyPress(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress Select Case e.KeyChar Case ac To zc No hago nada. La letra se escribe normalmente Case Else Cancelo la pulsacin de la tecla e.Handled = True End Select End Sub
Microsoft Visual Basic.NET 2005 CONTROLES

39

ToolTip

El ToolTip es un control que nos permite aadir un cartelito de informacin a otros controles windows. Una vez aadido un control ToolTip al formulario los controles reciven una nueva propiedad llamada tooltip en tooltip1 que ser el texto que se muestre automticamente al dejar posado el cursor sobre el control.

TreeView
Con el control TreeView, puede mostrar una jerarqua de nodos a usuarios, del modo en que se muestran los archivos y carpetas en el panel izquierdo de la caracterstica Explorador de Windows del sistema operativo Windows. Cada nodo de la vista de rbol podra contener otros nodos, llamados nodos secundarios. Puede mostrar nodos primarios o nodos que contienen nodos secundarios, como expandidos o contrados. Para agregar nuevos nodos al control TreeView nos serviremos del mtodo add tal como ilustra el siguiente ejemplo
Dim nuevo _ nodo As TreeNode nuevo _ nodo = New TreeNode(Archivos de programa) TreeView1.Nodes.Add(nuevo _ nodo)

El evento mas programado en los controles TreeView es AfterSelect que nos permite actuar ante las selecciones de nodo realizadas.

WebBrowser
El control WebBrowser proporciona un contenedor administrado para el control ActiveX WebBrowser. El contenedor administrado permite mostrar pginas Web en las aplicaciones cliente de los formularios Windows Forms. Se puede utilizar el control WebBrowser para duplicar la funcionalidad de exploracin Web de Internet Explorer en la aplicacin o se puede deshabilitar la funcionalidad predeterminada de Internet Explorer y utilizar el control como visor simple de documentos HTML. Tambin se puede utilizar el control para agregar elementos de la interfaz de usuario basados en DHTML al formulario y no mostrar el hecho de que se alojan en el control WebBrowser. Este enfoque permite combinar sin problemas controles Web con controles de formularios Windows Forms en una sola aplicacin.

Microsoft Visual Basic.NET 2005

CONTROLES

40

Si queremos cargar una pgina en nuestro pequeo navegador lo haremos mediante el mtodo nagivate
WebBrowser1.Navigate(http://www.microsoft.com)

La figura muestra un formulario con un control WebBrowser con su propiedad Dock establecida a Fill

Formulario
Los formularios de Visual Basic .NET tienen como noble objetivo ser el esqueleto de nuestras aplicaciones. Las aplicaciones pueden constar de uno o varios formularios y estos a su vez engloban o albergan al resto de los controles. Para agregar un formulario a nuestra aplicacin debemos actuar de manera distinta que en el resto de controles. En el explorador de soluciones seleccionamos el proyecto con el queremos trabajar, hacemos clic con el botn derecho, menu agregar, Windows Form o bien en el Menu Proyecto selecionamos agregar formulario.

Microsoft Visual Basic.NET 2005

CONTROLES

41

Una vez hecho esto aparecer una ventana como la siquiente en la que elegiremos el tipo de formulario, en este caso Windows Form y se nos pide darle un nombre al formulario.

Ahora ya tenemos un nuevo formulario en nuestro proyecto, si queremos que este se convierta en el formulario de inicio procederemos como sigue: En el Explorador de Soluciones seleccionamos nuestro proyecto y hacemos clic con el botn derecho y luego Propiedades.

Microsoft Visual Basic.NET 2005

CONTROLES

42

Se nos deplegar la siguiente ventana:

Seleccionamos el desplegable Formulario de Inicio donde se nos dar la opcin de elegir entre todos los formularios que forman nuestra aplicacin. Cerramos guardamos y listo. El objeto Form es un objeto con muchas propiedades. Tratar de definir aquellas ms importantes. AcceptButton: esta propiedad permite al formulario escuchar la pulsacin de la tecla Enter, invocando al botn deseado sin escribir una sola lnea de cdigo. Al desplegar la propiedad nos aparecern los distintos controles del tipo Button que hay actualmente sobre nuestro formulario dndonos la posibilidad de elegir uno.

Backcolor: nos permite cambiar el color de fondo de nuestro formulario. BackgroundImage: nos permite establecer una imagen como fondo de nuestro formulario. BackgroundImageLayout: nos permite modificar el comportamiento de la imagen cargada en la propiedad BackgroundImage
Microsoft Visual Basic.NET 2005 CONTROLES

43

CancelButton: funciona de manera anloga al AcceptButton, solo que en este caso la tecla encargada de invocar al botn es Esc. ContextMenuStrip: nos permite seleccionar el men contextual que mostrara nuestro formulario al presionar sobre con el botn derecho o con la tecla de men contextual de nuestro teclado. ControlBox: si la propiedad ControlBox se establece en true, el cuadro de control se muestra en el ngulo superior izquierdo de la barra de ttulo. ForeColor: nos permite modificar el color de primer plano de todos los objetos que haya situado en mi formulario. FormBorderStyle: permite modificar el aspecto de nuestro formulario eligiendo si tendr un borde redimensionable o no, o si ni tendr borde.

Aspecto de un formulario windows con su formborderstyle establecido a None y su propiedad forecolor a Red Icon: nos permite cambiar el icono que lucir nuestro formulario. IsMdiContainer: si queremos que nuestro formulario acte como un contenedor de formulario, deberemos establecer esta propiedad booleana a true. La ventana principal del Microsoft Excell es un formulario contenedor de formularios MDI Multiple Document Interface KeyPreview: cuando esta propiedad se establece en true, el formulario recibe todos los eventos KeyPress, KeyDown y KeyUp. Una vez que los controladores de eventos del formulario han terminado de procesar la presin de tecla, dicha presin se asigna al control con el foco. Por ejemplo, si la propiedad KeyPreview se establece en true y el control seleccionado actualmente es un TextBox, una vez que los controladores de eventos del formulario hayan procesado la presin de tecla, se asignar al control TextBox la tecla que se presion. MainMenuStrip: nos permite seleccionar el men que utilizar nuestro formulario.

Formulario Windows con un objeto MenuStrip asociado. ShowinTaskbar: esta propiedad permite que el formulario en cuestin no cree una nueva instancia en la barra de tareas. Es til que tan slo el formulario principal tenga establecida esta propiedad a true.
Microsoft Visual Basic.NET 2005 CONTROLES

44

StartPosition: nos permite establecer la posicin inicial de nuestro formulario, centrarlo en la pantalla, centrarlo referente a su mdiparent o posicionarlo en la ubicacin por defecto que establece el sistema operativo. Text: es el ttulo que mostrara el formulario en un barra de men. TopMost: nos permite que el formulario permanezca por encima de otros formularios. No confundir con un formulario llamado mediante el mtodo showdialog. WindowsState: nos permite hacer que nuestro formulario est maximizado, minimizado o normal. Ahora que conocemos las principales propiedades de un formulario hablar sobre algunos de sus eventos: Load: se produce antes de que se muestre un formulario por primera vez. Es un buen lugar donde inicializar conexiones de acceso a datos o inicializar ciertos valores. Closing: el evento se lanzar cuando tratemos de cerrar nuestro formulario, ya sea mediante Alt + F4 o con el aspa. Es un buen momento para dar la opcin de guardar cambios o escribir los datos a disco. Si queremos mostrar un formulario, lo haremos mediante los mtodos show y showdialog. Dependiendo de si queremos que el formulario en cuestin se comporte como un formulario normal o un cuadro de dialogo modal.
Form1.showdialog Form1.show

Microsoft Visual Basic.NET 2005

CONTROLES

45

no ON cl .De S Dat cid Ol visual Basic.NET 2005 visual Ba mb e 2005 visual Basic.NET 2005 vis re Ta ien scr ELE aTa enc Db. te ip CT bl ia _ co = O NET 2005 visual Basic.NET 20 , c s. Basic.NET 2005 visual Basic.N co man & per T ion T _ e m ne do ls ar _ I , visual Basic.NET 2005 visual Ba In le T x t i n 2005 visual Basic.NET 2005 vis If cto ion = N Ope os.I cid _ I cid NET 2005 visual Basic.NET 20 le r = .Op ew rar d _ enc nci enc Ge e d c i Basic.NET 2005 visual Basic.N O O i tF t tor. com n() leD os.S per as.F enc ie visual Basic.NET 2005 visual Ba b. ld Fo abl Has and Ol ele ari _ c 2005 visual Basic.NET 2005 vis Ty a. Ro o. r eD ct o NET 2005 visual Basic.NET 20 E pe co Lo bC ed = (c ad ws xec nt Basic.NET 2005 visual Basic.N om It T on (l Th ut ad ma em. visual Basic.NET 2005 visual Ba ec en eR ta or nd T to d ea D 2005 visual Basic.NET 2005 vis Ne (q r, ta or)) im = de ue NET 2005 visual Basic.NET 20 0 Wh xt bl r Lo co To a. il Basic.NET 2005 visual Basic.N lu a Co e mn le dOp visual Basic.NET 2005 visual Ba lu le t a c fi mn 2005 visual Basic.NET 2005 vis la cto As tor. ion. s. Fo NET 2005 visual Basic.NET 20 Ad = r.Re r Ne Fie Ove d( Basic.NET 2005 visual Basic.N co ta ad ld r w co Ne visual Basic.NET 2005 visual Ba Da Cou wri lu fi nta bla ta nt mn la do .N 2005 visual Basic.NET 2005 vis End ta xt Co ew (c r a) co NET 2005 visual Basic.NET 20 Wh bla lu on = Ro ne .R mn t Basic.NET 2005 visual Basic.N 0 w x il e visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 ELEMENTOS DEL LENGUAJE Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N Elementos bsicos de Visual Basic.NET 2005. visual Basic.NET 2005 visual Ba Uso y definicin de variables. 2005 visual Basic.NET 2005 vis Manejo de mensajes de entrada y salida. NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N Variables visual Basic.NET 2005 visual Ba Operadores 2005 visual Basic.NET 2005 vis Mensajes NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic NET 2005 vis

s.

as

in

ELEMENTOS DEL LENGUAJE


Variables
Qu es una variable? Pues como su propio nombre indica es algo que puede variar. Visual Basic .NET 2005 como todos los lenguajes se sirve del uso de variables para hacer la vida ms fcil a sus programadores. Imaginen que soy el encargado de hacer un programa que va calculando continuamente los intereses generados por los distintos clientes de bolsa. Debera de calcular cientos de valores dependiendo de distintos ndices burstiles, si los estos variaran (y varan) cada da me vera en la obligacin de ir cambiando a travs de innumerables lneas de cdigo los valores aplicados, lo cual sera imposible si no existieran las variables. Haciendo uso de las variable, tan slo tendra que cambiar el valor de esta en un slo sitio y todos mis datos que utilizaran dicha variable se recalcularan automticamente. Si vemos la definicin oficial de la RAE puede que vayamos definiendo un poco ms el termino. Variable: Magnitud que puede tener un valor cualquiera de los comprendidos en un conjunto; segn esto ya vemos que debemos acotar los posibles valores. Por lo tanto, para crear una variable tenemos que pensar en un nombre y en el tipo de valores que vamos a utilizar. Lgicamente no ser lo mismo una variable que se va a encargar de guardar el estado de una bombilla que otra que almacene una conexin con una base de datos verdad? Una variable se declara para especificar su nombre y sus caractersticas. La instruccin de declaracin para variables es Instruccin Dim seguida del nombre de la variable, seguida de la clausa as como, seguida del tipo de valor que vaya a almacenar mi variable.
Dim edad As Byte

Al escribir esta lnea de cdigo le estamos diciendo en realidad al Visual Basic .NET 2005 que nos reserve un espacio en memoria (cuanto ya lo veremos) para que podamos almacenar un valor del tipo byte, y que para dirigirme a ese espacio de memoria, ya sea para leer o escribir, voy a utilizar el nombre edad. Para almacenar un valor en una variable utilizaremos el operador =
edad =27

Almacena el valor 27 en la variable edad.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE

48

Si queremos incrementar el valor de la variable lo podremos hacer como sigue:


edad = edad + 7

O utilizando la forma abreviada


edad += 7

Si queremos por el contrario leer el valor de una variable ubicaremos a la derecha del operador de asignacin.
txtEdad.text=edad

Leera el valor almacenado en la variable edad y lo escribira en la propiedad text del control txtEdad Declarando variables Si necesitamos declarar dos o ms variables de un mismo tipo podemos hacerlo as:
Dim nombre As String Dim apellido As String Dim direccion As String

O hacerlo en una sola linea, separando los nombres de las variables por comas.
Dim nombre, apellido, direccion As String

Por defecto el lenguaje inicializa las variables una vez declaradas, pero puede ser que queramos inicializarlas nosotros para cambiar los valores por omisin. Para ello podemos optar por la declaracin e inicializacin en dos pasos.
Dim nota As Byte Nota = 6

O ahorrarnos una lnea con:


Dim nota As Byte = 7

MBITO DE VARIABLES

El mbito indica en qu lugar de la aplicacin se desea utilizar la variable y puede ser una de las siguientes palabras claves: Dim, Static, Private o Public. Dim: se puede utilizar a nivel de procedimiento y a nivel del formulario. Si se declara una variable a nivel de procedimiento con la palabra Dim, Visual Basic reinicializa (borra su contenido) la variable cada vez que ejecuta el procedimiento.
Dim nota As Byte

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE

49

Static: Se utiliza slo a nivel del procedimiento. Cuando una variable se declara con la palabra Static, Visual Basic no reinicializa la variable cada vez que se ejecuta el procedimiento, slo lo hace la primera vez. Esto quiere decir que la variable conserva su valor entre una llamada al procedimiento y otra.
Static nota As Byte

Private: Se utiliza solo a nivel del mdulo e indica que la variable es privada; es decir, slo va a ser reconocida dentro del mdulo donde ha sido declarada.
Private nombre As String

Tipos de variables Como ya hemos comentado, dependiendo de los valores que vayamos a almacenar en las variables, deberemos declarar nuestras variables de un tipo u otro. Una buena eleccin en el tipo de las variables redunda en una menor posibilidad de errores en el cdigo y una mejora del rendimiento. Tipos de datos de Visual Basic.NET y su equivalente en el Common Language Runtime (CLR)

Tipo de Visual Basic

Estructura de tipo Common Language Runtime

Asignacin de almacenamiento nominal En funcin de la plataforma de implementacin 1 byte 2 bytes

Intervalo de valores

Boolean

Boolean

True o False

Byte Char (carcter individual) Date

Byte Char

0 a 255 (sin signo) 0 a 65535 (sin signo) 0:00:00 (medianoche) del 1 de enero de 0001 a 11:59:59 p.m. del 31 de diciembre de 9999. 0 a +/-79.228.162.514.264.337.593.543.950.335 (+/-7,9... E+28) sin separador decimal; 0 a +/7,9228162514264337593543950335 con 28 posiciones a la derecha del decimal; el nmero distinto de cero ms pequeo es +/0,0000000000000000000000000001 (+/-1E-28)

DateTime

8 bytes

Decimal

Decimal

16 bytes

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE

50

Double (punto flotante de precisin doble) Integer Long (entero largo)

-1,79769313486231570E+308 a -4,94065645841246544E-324 para los valores negativos; Double 8 bytes 4,94065645841246544E-324 a 1,79769313486231570E+308 para los valores positivos Int32 Int64 4 bytes 8 bytes 4 bytes en plataforma de 32 bits -2.147.483.648 a 2.147.483.647 (con signo) -9.223.372.036.854.775.808 a 9.223.372.036.854. 775.807 (9,2...E+18 ) (con signo)

Object

Object (clase) 8 bytes en plataforma de 64 bits

Cualquier tipo puede almacenarse en una variable de tipo Object

SByte Short (entero corto) Single (punto flotante de precisin simple) String (longitud variable) UInteger ULong User-Defined (estructura) UShort

SByte Int16

1 byte 2 bytes

-128 a 127 (con signo) -32.768 a 32.767 (con signo) -3,4028235E+38 a -1,401298E-45 para los valores negativos;

Single

4 bytes 1,401298E-45 a 3,4028235E+38 para los valores positivos En funcin de la plataforma de implementacin 4 bytes 8 bytes En funcin de la plataforma de implementacin 2 bytes

String (clase)

0 a 2.000 millones de caracteres Unicode aprox.

UInt32 UInt64

0 a 4.294.967.295 (sin signo) 0 a 18.446.744.073.709.551.615 (1,8...E+19 ) (sin signo) Cada miembro de la estructura tiene un intervalo de valores determinado por su tipo de datos y es independiente de los intervalos de valores correspondientes a los dems miembros. 0 a 65.535 (sin signo)

(hereda de ValueType) UInt16

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE

51

BOOLEAN

Contiene valores que pueden ser slo True o False. Las palabras clave True y False corresponden a los dos estados de las variables Boolean. Utilice el tipo de datos Boolean para contener valores de dos estados como verdadero/falso, s/no o activado/desactivado. El valor predeterminado de Boolean es False.
Conversiones de tipo

Cuando Visual Basic convierte los valores de tipos de datos numricos en Boolean, 0 pasa a ser False y todos los otros valores, True. Cuando Visual Basic convierte los valores Boolean en tipos numricos, False pasa a ser 0 y True, -1. Ejemplo de cdigo que utiliza una variable boolean:
Dim terceraedad As Boolean If CInt(txtEdad.text) > 65 Then terceraedad = True End If

BYTE

Contiene enteros de 8 bits sin signo (1 bytes) que se sitan en el intervalo entre 0 y 255. El valor predeterminado de Byte es 0. El tipo de datos Byte se ampla a Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single y Double. Esto significa que se puede convertir Byte en cualquiera de estos tipos sin encontrar un error de desbordamiento. Ejemplo de cdigo con una variable byte:
Dim edad As Byte If CDbl(txtEdad.Text) > 0 AndAlso CDbl(txtEdad.Text) < 200 Then edad = CByte(txtEdad.Text) End If

CHAR

Contiene puntos de cdigo de 16 bits (2 bytes) sin signo comprendidos entre 0 y 65535. Cada punto de cdigo o cdigo de carcter representa un nico carcter Unicode. Utilice el tipo de datos Char cuando necesite albergar nicamente un carcter individual y no necesite la sobrecarga de String. En algunos casos, puede utilizar Char(), una matriz de elementos Char, para albergar varios caracteres. El valor predeterminado de Char es el carcter con el punto de cdigo 0.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE

52

Caracteres Unicode Los primeros 128 puntos de cdigo (0127) Unicode corresponden a las letras y smbolos de un teclado estndar de EE.UU. Estos primeros 128 puntos de cdigo son los mismos que los definidos por el conjunto de caracteres ASCII. Los siguientes 128 puntos de cdigo (128255) representan caracteres especiales, como letras de alfabetos latinos, acentos, smbolos de moneda y fracciones. Unicode utiliza los puntos de cdigo restantes (256-65535) para albergar una amplia variedad de smbolos, incluidos caracteres de texto de todo el mundo, signos diacrticos y smbolos tcnicos y matemticos. Puede utilizar mtodos como IsDigit y IsPunctuation en una variable Char para determinar su clasificacin Unicode. Visual Basic no realiza conversiones directas entre el tipo Char y los tipos numricos. Puede utilizar Asc, AscW (Funciones) para convertir un valor Char a un tipo Integer que represente su punto de cdigo. Puede utilizar Chr, ChrW (Funciones) para convertir un valor Integer a un tipo Char que tenga ese punto de cdigo. Si el modificador de comprobacin de tipos (Option Strict (Instruccin)) est habilitado, debe agregar el carcter de tipo de literal a un literal de cadena de un solo carcter para identificarlo como el tipo de datos Char. Esto se ilustra en el siguiente ejemplo:
Option Strict On Dim caracter As Char caracter = rc

DATE

Contiene valores IEEE de 64 bits (8 bytes) que representan fechas comprendidas entre el 1 de enero del ao 0001 y el 31 de diciembre de 9999, y horas comprendidas entre las 0:00:00 (medianoche) y las 11:59:59. Cada incremento representa 100 nanosegundos de tiempo transcurrido desde el comienzo del 1 de enero del ao 1 del calendario gregoriano. El valor mximo representa 100 nanosegundos antes del comienzo del 1 de enero del ao 10000. Utilice el tipo de datos Date para albergar valores de fecha, valores de tiempo o valores de fecha y hora. El valor predeterminado de Date es 0:00:00 (medianoche) del 1 de enero de 0001. Requisitos de formato Debe incluir un literal Date dentro de los signos de nmero (# #). Debe especificar el valor de fecha en el formato M/d/yyyy, por ejemplo #5/31/1993#. Este requisito es independiente de la configuracin regional y de la configuracin de formato de fecha y hora del equipo. El motivo de esta restriccin es que el significado del cdigo nunca debe cambiar en funcin de la configuracin regional en que se ejecuta la aplicaMicrosoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE

53

cin. Suponga que asigna un literal Date de #3/4/1998# para representar 4 de marzo de 1998. En una configuracin regional que utilice el formato mm/ dd/yyyy, 3/4/1998 se compila como desee. Pero suponga que implementa la aplicacin en varios pases. En una configuracin regional que utilice el formato dd/mm/yyyy, el literal incluido en el cdigo se compilar como Abril 3, 1998. En una configuracin local que utilice el formato yyyy/mm/dd, el literal podra no ser vlido (Abril 1998, 0003) y generar un error de compilacin. Para convertir un literal de tipo Date al formato de la configuracin regional o a un formato personalizado, proporcione el literal a la funcin Format (Funcin) especificando formatos de fecha y hora predefinidos o formatos de fecha y hora definidos por el usuario. En el siguiente ejemplo se muestra esta operacin.
MsgBox(F. formateada es & Format(#5/31/1993#, dddd, d MMM yyyy))

DECIMAL

Contiene valores de 128 bits con signo (16 bytes) que representan nmeros enteros de 96 bits (12 bytes) que se ajustan a una potencia variable de 10. El factor de ajuste especifica el nmero de dgitos a la derecha del separador decimal; comprendidos entre 0 y 28. Con un ajuste de 0 (sin decimales), el valor ms grande posible es +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E+28). Con 28 posiciones decimales, el valor ms grande es +/-7.9228162514264337593543950335 y el valor ms pequeo distinto de cero es +/-0.0000000000000000000000000001 (+/-1E-28). El tipo de datos Decimal proporciona el nmero mximo de dgitos significativos para un nmero. Admite hasta 29 dgitos significativos y puede representar valores que superan 7.9228 x 10^28. Es especialmente cmodo para clculos, por ejemplo, financieros, que requieren un gran nmero de dgitos pero no puede tolerar errores del redondeo. El valor predeterminado de Decimal es 0. Precisin: Decimal no es un tipo de datos de punto flotante. La estructura Decimal contiene un valor entero binario, junto con un bit de signo y un factor de ajuste de entero que especifica qu parte del valor es una fraccin decimal. Debido a esto, los nmeros Decimal tienen una representacin ms precisa en la memoria que los tipos de punto flotante (Single y Double). Rendimiento: El tipo de datos Decimal es el ms lento de todos los tipos numricos. Debe considerar la importancia de la precisin frente al rendimiento antes de elegir un tipo de datos. Ampliacin: El tipo de datos Decimal se ampla a Single o Double. Esto significa que se puede convertir Decimal a cualquiera de estos tipos sin encontrar un error de desbordamiento.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE

54

Ceros finales: Visual Basic no almacena los ceros finales en un literal Decimal. Sin embargo, una variable Decimal conserva cualquier cero final adquirido de forma computacional. Esto se ilustra en el siguiente ejemplo:
Dim d1, d2, d3, d4 As Decimal d1 = 2.375D d2 = 1.625D d3 = d1 + d2 d4 = 4D MsgBox(d1 = & CStr(d1) & , d2 = & CStr(d2) & , d3 = & CStr(d3) & , d4 = & CStr(d4))

El resultado de MsgBox en el ejemplo anterior es el siguiente:


d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4

DOUBLE

Contiene nmeros IEEE de punto flotante de doble precisin de 64 bits (8 bytes) con valores de 1,79769313486231570E+308 a 4,94065645841246544E-324 para nmeros negativos y de 4,94065645841246544E-324 a 1,79769313486231570E+308 para nmeros positivos. Los nmeros de doble precisin almacenan aproximaciones de nmeros reales. El tipo de datos Double proporciona las magnitudes ms grandes y ms pequeas posibles para un nmero. El valor predeterminado de Double es 0. Cuando trabaje con nmeros de punto flotante, tenga presente que no siempre tienen una representacin precisa en memoria. Esto podra provocar unos resultados inesperados en ciertas operaciones, como comparacin de valor y el operador Mod. Para obtener ms informacin, vea Solucionar problemas de tipos de datos. Los tipos de datos de punto flotante no tienen ninguna representacin interna de caracteres 0 finales. Por ejemplo, no distinguen entre 4,2000 y 4,2. Por consiguiente, los caracteres 0 finales no aparecen al mostrar o imprimir valores de punto flotante.

INTEGER

Contiene enteros de 32 bits con signo (4 bytes) que se sitan en el intervalo entre -2.147.483.648 y 2.147.483.647. El tipo de datos Integer proporciona rendimiento ptimo en un procesador de 32 bits. Los dems tipos integrales son ms lentos para cargarse y almacenarse en la memoria. El valor predeterminado de Integer es 0. Ampliacin: El tipo de datos Integer se ampla a Long, Decimal, Single o Double. Esto significa que se puede convertir Integer en cualquiera de estos tipos sin encontrar un error de desbordamiento
Microsoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE

55

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 establecerlo en una fraccin, el nmero se redondea. Ejemplo:
Dim nota As Integer nota = CInt(5.9) MsgBox(nota)

Este cdigo mostrara el valor 6

LONG

Contiene enteros de 64 bits (8 bytes) con signo cuyo valor se sita entre -9.223.372.036.854.775.808 y 9.223.372.036.854.775.807 (9,2... E+18). Utilice el tipo de datos Long para incluir nmeros enteros demasiado grandes para ajustarse en el tipo de datos Integer. El valor predeterminado de Long es 0.

OBJECT

Contiene direcciones de 32 bits (4 bytes) que hacen referencia a objetos. Se puede asignar cualquier tipo de referencia (cadena, matriz, clase o interfaz) a una variable Object. Una variable Object tambin puede hacer referencia a datos de cualquier tipo de valor (numrico, Boolean, Char, Date, estructura o enumeracin). El tipo de datos Object puede sealar a datos de cualquier tipo, incluso cualquier instancia de objeto que su aplicacin reconozca. Utilice Object cuando en tiempo de compilacin no conoce a qu tipo de datos puede sealar la variable. El valor predeterminado de Object es Nothing (una referencia nula). Independientemente del tipo de datos al que haga referencia, una variable Object no contiene el valor de datos en s, 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. Rendimiento: Una variable que declara con el tipo Object es bastante flexible para contener una referencia a cualquier objeto. Sin embargo, cuando invoca un mtodo o propiedad en este tipo de variable, se produce siempre el enlace en tiempo de ejecucin. Para forzar el enlace en tiempo de compilacin y un mejor rendimiento, declare la variable con un nombre de clase especfico o convirtala en el tipo de datos especfico. Cuando declara una variable de objeto, intente utilizar la clase ms especfica disponible, como TextBox en lugar de Control, as podr tener acceso a sus propiedades y mtodos.
Microsoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE

56

Ampliacin: Todos los tipos de datos y todos los tipos de referencia se amplan al tipo de datos Object. Esto significa que se puede convertir cualquier tipo a Object sin encontrar un error de desbordamiento.

STRING

Contiene secuencias de puntos de cdigo de 16 bits sin signo (2 bytes) que van de un valor de 0 a 65535. Cada punto de cdigo, o cdigo de carcter, representa un carcter Unicode nico. Una cadena puede contener de 0 a 2.000 millones (2^31) de caracteres Unicode aproximadamente. Para asignar un valor a una variable de cadena, este debe in entre comillas dobles.
Dim nombre As String nombre = Jose Gutirrez

Si queremos que la variable contenga algo entrecomillado debemos escribir dos pares de comillas. Ejemplo:
Dim comentario As String comentario = Dijo no acordarse de nada y se marcho MsgBox(comentario)

Conversion de tipo de datos Si queremos evitar fallos en nuestro cdigo y/o la sentencia option strict est activada, debemos usar funciones de conversin. Las funciones de conversin nos devuelven un dato especifco convertido (si pueden) al tipo dado. La funcin de conversin es CType(expresin, tipo) pero existen funciones reducidas para casi todos los tipos.

Nombre de la funcin CBool CByte CChar CDate CDbl

Tipo de datos devuelto Boolean Byte Char Date Double

Intervalo de valores del argumento expression Cualquier expresin numrica, Char o String vlida. 0 a 255 (sin signo); las partes fraccionarias se redondean.1 Cualquier expresin Char o String vlida; slo se convierte el primer carcter de String; el valor puede estar comprendido entre 0 y 65535 (sin signo). Cualquier representacin vlida de fecha y hora. de -1,79769313486231570E+308 a -4,94065645841246544E324 para valores negativos; de 4,94065645841246544E-324 a 1,79769313486231570E+308 para valores positivos.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE

57

CDec

Decimal

+/-79.228.162.514.264.337.593.543.950.335 para nmeros a partir de cero, es decir, nmeros sin decimales. Para nmeros con 28 posiciones decimales, el intervalo es +/-7,9228162514264337593543950335. El menor nmero posible distinto de cero es 0,0000000000000000000000000001 (+/-1E-28). de -2.147.483.648 a 2.147.483.647; las partes fraccionarias se redondean. de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807; las partes fraccionarias se redondean. Cualquier expresin vlida. de -128 a 127; las partes fraccionarias se redondean. de -32.768 a 32.767; las partes fraccionarias se redondean. De -3,402823E+38 a 1,401298E-45 para valores negativos; de 1,401298E45 a 3,402823E+38 para valores positivos. Los valores devueltos para CStr dependen del argumento expression. de 0 a 4.294.967.295 (sin signo); las partes fraccionarias se redondean. de 0 a 18.446.744.073.709.551.615 (sin signo); las partes fraccionarias se redondean.

CInt CLng CObj CSByte CShort CSng CStr CUInt CULng

Integer Long Object SByte Short Single String UInteger ULong

Operadores
Tipos de operadores

OPERADORES DE CONCATENACIN/ARITMTICOS

Exponenciacin (^) Negacin () Multiplicacin y divisin (*, /) Divisin de nmero entero (\) Mdulo aritmtico (Mod) Suma y resta (+, ), Concatenacin de cadenas (+) Concatenacin de cadenas (&)

OPERADORES DE COMPARACIN

Los operadores relacionales comparan valores entre s. Todos los operadores relacionales dan como resultado un valor Boolean. Los operadores relacionales tienen el siguiente significado general: El operador = comprueba si dos operandos son iguales. El operador <> comprueba si dos operandos no son iguales.
Microsoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE

58

El operador < comprueba si el primer operando es menor al segundo. El operador > comprueba si el primer operando es mayor que el segundo. El operador <= comprueba si el primer operando es menor o igual que el segundo. El operador >= comprueba si el primer operando es mayor o igual que el segundo. El operador Like lo utilizaremos para comparar que una cadena cumple un formato de expresin dado. El operador TypeOf...Is Lo utilizaremos para hacer comprobaciones de tipo. Ejemplo:
Dim objeto1 As Control = txtEdad If TypeOf objeto1 Is System.Windows.Forms.TextBox Then MsgBox(El objeto1 es un del tipo textbox) End If

OPERADORES LGICOS/BIT A BIT

Negacin (Not) Conjuncin (And, AndAlso) Disyuncin (Or, OrElse, Xor) Cuando aparecen la multiplicacin y la divisin juntas en una expresin, se evala cada operacin segn aparece de izquierda a derecha. Cuando aparecen la suma y la resta juntas en una expresin, cada operacin se evala en orden de aparicin de izquierda a derecha. Puede utilizar parntesis para pasar por alto el orden de prioridad y obligar a evaluar algunas partes de una expresin antes que otras. Las operaciones entre parntesis se realizan siempre antes que las de fuera del parntesis. Sin embargo, entre parntesis se mantiene la prioridad de los operadores. El operador de concatenacin de cadenas (&) no es un operador aritmtico, pero, por prioridad, va despus de todos los operadores aritmticos y antes de todos los operadores de comparacin.

OPERADOR MOD

Divide dos nmeros y devuelve slo el resto.


Dim resto As Integer resto = 12 Mod 5 MsgBox(resto)

El cuadro de mensaje mostrara un 2.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE

59

Prioridad de los operadores Cuando una expresin contiene varios operadores, la prioridad de los operadores controla el orden de evaluacin de las expresiones. Por ejemplo, la expresin x + y * z se evala como x + (y * z) porque el operador * tiene una prioridad ms alta que el operador +. La tabla siguiente muestra todos los operadores en orden descendente de prioridad. Los operadores dentro de una misma fila tienen la misma prioridad y se evalan en el orden, de izquierda a derecha, que aparecen en una expresin: Categora Principal Exponenciacin Negacin unaria Multiplicativo Divisin de nmero entero Mdulo Aditiva Concatenacin Relacionales Condicional NOT Condicional AND O condicional Condicional XOR Operadores Todas las expresiones de no operador ^ +, *, / \ Mod +, & =, <>, <, >, <=, >=, Like, Is, TypeOf...Is Not And, AndAlso Or, OrElse Xor

Cuando un operando se encuentra entre dos operadores de la misma prioridad, la asociatividad de los operadores controla el orden en que se ejecutan las operaciones. Todos los operadores binarios son asociativos por la izquierda, lo que significa que las operaciones se realizan de izquierda a derecha. La prioridad y asociatividad pueden y deben controlarse mediante el uso de expresiones entre parntesis.

Mensajes
Es habitual en programacin el tener un mtodo para mostrar cierta informacin al usuario o bien solicitrsela. Para ello disponemos de los mensajes, msgbox e inputbox. Msgbox Muestra un mensaje en un cuadro de dilogo, espera a que el usuario haga clic en un botn y devuelve un entero que indica el botn utilizado.
Microsoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE

60

Public Function MsgBox( _ ByVal Prompt As Object, _ Optional ByVal Buttons As MsgBoxStyle = MsgBoxStyle.OKOnly, _ Optional ByVal Title As Object = Nothing _ ) As MsgBoxResult

PARMETROS

Prompt: Obligatorio. 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 consta de ms de una lnea, puede separar las lneas mediante un carcter de retorno de carro (Chr(13)), un carcter de avance de lnea (Chr(10)) o una combinacin de caracteres de retorno de carro/avance de lnea (Chr(13) y 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. En la siguiente tabla se incluyen los valores de enumeracin de MsgBoxStyle: Miembro OKOnly OKCancel AbortRetryIgnore YesNoCancel YesNo RetryCancel Critical Question Exclamation Information DefaultButton1
Microsoft Visual Basic.NET 2005

Valor 0 1 2 3 4 5 16 32 48 64 0

Descripcin Muestra slo el botn Aceptar. Muestra los botones Aceptar y Cancelar. 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.
ELEMENTOS DEL LENGUAJE

61

DefaultButton2 DefaultButton3 ApplicationModal

256 512 0

El segundo botn es el predeterminado. El tercer botn es el predeterminado. Aplicacin modal: el usuario debe responder al cuadro de mensaje antes de continuar trabajando en la aplicacin actual. Sistema modal: se suspenden todas las aplicaciones hasta que el usuario responda al cuadro de mensaje. Especifica la ventana del cuadro de mensaje como ventana de primer plano. Texto alineado a la derecha. Especifica que el texto debe aparecer para ser ledo de derecha a izquierda en los sistemas rabe y hebreo.

SystemModal MsgBoxSetForeground MsgBoxRight MsgBoxRtlReading

4096 65536 524288 1048576

El primer grupo de valores (0-5) describe el nmero y tipo de botones mostrados en el cuadro de dilogo. El segundo grupo (16, 32, 48, 64) describe el estilo de icono. El tercer grupo (0, 256, 512) determina qu botn es el valor predeterminado. El cuarto grupo (0, 4096) determina la modalidad del cuadro de mensaje y el quinto grupo especifica si el cuadro de mensaje es la ventana de primer plano, junto con la alineacin y la direccin del texto. A la hora de sumar nmeros para crear el valor final del argumento Buttons, se deber utilizar nicamente un nmero de cada grupo. Podremos mostrar por ejemplo un mensaje con el icono de critical y el texto alineado a la derecha sumando sus valores. Ejemplo:
MsgBox(Problema con la conexion _ , CType(16 + 524288, MsgBoxStyle) Error de conexion) ,

O lo que es lo mismo
MsgBox(Problema con la conexion _ , CType(MsgBoxStyle.Critical + MsgBoxStyle.MsgBoxRight, _ MsgBoxStyle) Error de conexion) ,

El Msgbox da un valor de respuesta de la coleccin MsgBoxResult Constante OK Cancel Abort Retry Ignore Yes No Valor 1 2 3 4 5 6 7

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE

62

Ejemplo:
If MsgBox(Desea cancelar la conexion MsgBoxStyle.YesNo) , = MsgBoxResult.Yes Then cancelar _ conexion() End If

Inputbox Muestra un mensaje en un cuadro de dilogo, espera a que el usuario escriba un texto o haga clic en un botn y devuelve una cadena con el contenido del cuadro de texto.

Public Function InputBox( _ ByVal Prompt As String, _ Optional ByVal Title As String Optional ByVal DefaultResponse Optional ByVal Xpos As Integer Optional ByVal YPos As Integer ) As String

= , _ As String = , _ = -1, _ = -1 _

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 incluye ms de una lnea, puede separar las lneas mediante un carcter de retorno de carro (Chr(13)), un carcter de salto de lnea (Chr(10)) o una combinacin de retorno de carro y salto de lnea (Chr(13) & Chr(10)) que inserta 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.
Microsoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE

63

Si el usuario hace clic en Cancelar, se devolver una cadena de longitud cero. 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.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE

64

no ON cl .De S Dat cid Ol visual Basic.NET 2005 visual Ba mb e 2005 visual Basic.NET 2005 vis re Ta ien scr ELE aTa enc Db. te ip CT bl ia _ co = O NET 2005 visual Basic.NET 20 , c s. Basic.NET 2005 visual Basic.N co man & per T ion T _ e m ne do ls ar _ I , visual Basic.NET 2005 visual Ba In le T x t i n 2005 visual Basic.NET 2005 vis If cto ion = N Ope os.I cid _ I cid NET 2005 visual Basic.NET 20 le r = .Op ew rar d _ enc nci enc Ge e d c i Basic.NET 2005 visual Basic.N O O i tF t tor. com n() leD os.S per as.F enc ie visual Basic.NET 2005 visual Ba b. ld Fo abl Has and Ol ele ari _ c 2005 visual Basic.NET 2005 vis Ty a. Ro o. r eD ct o NET 2005 visual Basic.NET 20 E pe co Lo bC ed = (c ad ws xec nt Basic.NET 2005 visual Basic.N om It T on (l Th ut ad ma em. visual Basic.NET 2005 visual Ba ec en eR ta or nd T to d ea D 2005 visual Basic.NET 2005 vis Ne (q r, ta or)) im = de ue NET 2005 visual Basic.NET 20 0 Wh xt bl r Lo co To a. il Basic.NET 2005 visual Basic.N lu a Co e mn le dOp visual Basic.NET 2005 visual Ba lu le t a c fi mn 2005 visual Basic.NET 2005 vis la cto As tor. ion. s. Fo NET 2005 visual Basic.NET 20 Ad = r.Re r Ne Fie Ove d( Basic.NET 2005 visual Basic.N co ta ad ld r w co Ne visual Basic.NET 2005 visual Ba Da Cou wri lu fi nta bla ta nt mn la do .N 2005 visual Basic.NET 2005 vis End ta xt Co ew (c r a) co NET 2005 visual Basic.NET 20 Wh bla lu on = Ro ne .R mn t Basic.NET 2005 visual Basic.N 0 w x il e visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 ELEMENTOS DEL LENGUAJE Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba Continuamos con las estructuras de programacin. 2005 visual Basic.NET 2005 vis Hablaremos de su sintaxis y funcionamiento. NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N Estructuras de decisin visual Basic.NET 2005 visual Ba Estructuras de bucle 2005 visual Basic.NET 2005 vis Salir de un procedimiento NET 2005 visual Basic.NET 20 Realizar acciones con mtodos Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba Matrices 2005 visual Basic.NET 2005 vis Procedimientos Sub NET 2005 visual Basic.NET 20 Procedimientos Function Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba Cmo tratar errores 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic NET 2005 vis

s.

as

in

ESTUCTURAS DE DECISIN
Visual Basic permite probar condiciones y realizar diferentes operaciones en funcin de los resultados de 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

If..then
Se pueden utilizar instrucciones If...Then...Else para ejecutar una instruccin especfica o un bloque de instrucciones dependiendo del valor de tipo Boolean de una condicin. Generalmente, la condicin es el resultado de comparar dos valores, pero tambin puede ser cualquier expresin que da como resultado un valor de tipo Boolean (True o False). Esto incluye los valores de otros tipos de datos, como los numricos, que han sido convertidos a valores de tipo Boolean. Ejecutar instrucciones si una condicin es True Para ejecutar slo una instruccin cuando una condicin es True, se puede utilizar la sintaxis de una sola lnea de If...Then...Else omitiendo las instrucciones Else y End If, como muestra el ejemplo siguiente:
Sub FixDate() Dim MyDate As Date = #2/13/1973# If MyDate < Now Then MyDate = Now End Sub

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 Label ... Sub AlertUser(ByVal Value As Long) If Value = 0 Then AlertLabel.ForeColor = vbRed AlertLabel.Font.Bold = True AlertLabel.Font.Italic = True End If End Sub

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

66

Ejecutar algunas instrucciones si una condicin es True y otras si es False

If...then...else
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 System.Windows.Forms.Label ... Sub AlertUser(ByVal Value As Long) If Value = 0 Then AlertLabel.ForeColor = vbRed AlertLabel.Font.Bold = True AlertLabel.Font.Italic = True Else AlertLabel.Forecolor = vbBlack AlertLabel.Font.Bold = False AlertLabel.Font.Italic = False 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 Single, 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

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.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

67

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 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.

Select Case
Cuando compara una misma expresin con varios valores diferentes, puede utilizar las instrucciones Select...Case como alternativa a las instrucciones If...Then...Else. A diferencia de las instrucciones If y ElseIf, que pueden evaluar una expresin diferente en cada instruccin, la instruccin Select evala una nica expresin una sola vez y la utiliza para cada comparacin. Visual Basic compara el valor de la expresin con los valores de las instrucciones Case en el orden en que stos aparecen en el bloque Select...Case. Si encuentra una coincidencia o una instruccin Case Else, ejecuta el bloque de instrucciones correspondiente. En cualquier caso, despus ejecuta el cdigo que sigue a la instruccin End Select. Puede utilizarse cualquier nmero de instrucciones Case e incluirse u omitirse una instruccin Case Else. En el ejemplo siguiente se usa Select...Case para evaluar el nivel de rendimiento que se pasa al procedimiento Function. Observe que cada instruccin Case puede contener ms de un valor, un intervalo de valores o una combinacin de valores y operadores de comparacin. Cuando una instruccin Case contiene ms de un valor, el bloque Case se ejecuta si cualquiera de los valores coincide con el valor de la expresin de instruccin Select.
Function Bonus(ByVal Performance As Single, ByVal Salary As Decimal) _ As Decimal Select Performance Case 1 Performance is 1. Return Salary * 0.1 Case 2, 3 Performance is 2 or 3. Return Salary * 0.09 Case 5 To 7 Performance is 5, 6, or 7. Return Salary * 0.07 Case 4, 8 To 10 Performance is 4, 8, 9, or 10. Return Salary * 0.05 Case Is < 15 Performance is 11, 12, 13, or 14. Return 100 Case Else Performance is < 1 or > 14. Return 0 End Select End Function

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

68

ESTRUCTURAS DE BUCLE
Las estructuras de bucle permiten ejecutar una o ms lneas de cdigo repetitivamente. Una instruccin puede repetirse hasta que una condicin sea verdadera, hasta que sea falsa, un nmero de veces especificado o una vez para cada objeto de una coleccin. Las estructuras de bucle que admite Visual Basic incluyen: While Do...Loop For...Next For Each...Next

While
Se puede utilizar la instruccin While para ejecutar un bloque de instrucciones, un nmero de veces indefinido, dependiendo del valor de tipo Boolean de una condicin. Las instrucciones se repiten mientras la condicin sea True. Generalmente, la condicin es el resultado de comparar dos valores, pero tambin puede ser cualquier expresin que da como resultado un valor de tipo Boolean (True o False). Esto incluye los valores de otros tipos de datos, como los numricos, que han sido convertidos a valores de tipo Boolean. La instruccin While comprueba siempre la condicin antes de iniciar el bucle. La ejecucin en bucle contina mientras el valor de la condicin permanezca en True. En el ejemplo siguiente, el procedimiento CheckWhile comprueba la condicin antes de entrar en el bucle. Si Number se hubiera inicializado en 6 y no en 10, las instrucciones del bucle nunca se ejecutaran.
Sub CheckWhile() Dim Counter As Integer = 0 Dim Number As Integer = 10 While Number > 6 Number = Number - 1 Counter = Counter + 1 End While MsgBox(The loop ran & Counter & times.) End Sub

Runs 4 times.

Puede transferirse el control fuera de una instruccin While mediante la instruccin Exit While. 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 While 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.
Microsoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE 2

69

Sub ExitWhileExample() Dim Counter As Integer = 0 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.) ejecuta 9 veces. End Sub

Se

Do loop
Puede utilizar instrucciones Do...Loop para ejecutar un bloque de instrucciones un nmero de veces indefinido dependiendo del valor de tipo Boolean de una condicin. Las instrucciones pueden repetirse mientras el valor de la condicin sea True o hasta que sea True. Generalmente, la condicin es el resultado de comparar dos valores, pero tambin puede ser cualquier expresin que da como resultado un valor de tipo Boolean (True o False). Esto incluye los valores de otros tipos de datos, como los numricos, que han sido convertidos a valores de tipo Boolean. Repetir instrucciones mientras una condicin es True Hay dos maneras de utilizar la palabra clave While 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 el valor de la condicin permanezca en True. En el ejemplo siguiente, el procedimiento CheckWhileFirst comprueba la condicin antes de entrar en el bucle. Si Number se hubiera inicializado en 6 y no en 10, 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 CheckWhileFirst() Dim Counter As Integer = 0 Dim Number As Integer = 10 Do While Number > 6 Number = Number - 1 Counter = Counter + 1 Loop MsgBox(The loop ran & Counter & times.) Se ejecuta 4 veces End Sub

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

70

... 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.) Se ejecuta 1 vez. 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 CheckUntilLast, las instrucciones dentro 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.) Se ejecuta 5 veces. 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 MsgBox(The loop ran & Counter & times.) Se ejecuta 5 veces. 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.
Microsoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE 2

71

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.) Se ejecuta 8 veces. End Sub

La palabra clave Until especifica una condicin que finaliza la ejecucin de un bucle Do.

For...next
Los bucles Do funcionan bien cuando no se sabe de antemano cuntas veces se necesitan ejecutar las instrucciones en el bucle. No obstante, si tiene previsto ejecutar el bucle un nmero especfico de veces, un bucle ForNext es una opcin mejor. A diferencia de un bucle Do, un bucle For utiliza una variable denominada counter cuyo valor aumenta o disminuye cada vez que se repite el bucle. La sintaxis es la siguiente:
For counter = start To end [ Step step ] el contador aumenta segn el intervalo hasta sobrepasar el fin. Next [ counter ]

La variable counter debe ser un tipo de datos numrico que admita los operadores mayor que (>), menor 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. Al iniciarse la ejecucin del bucle ForNext, 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.
Microsoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE 2

72

El bucle no termina hasta que counter haya superado el valor final. La comparacin es mayor que (>) si el valor de incremento es positivo y menor que (<) si el incremento es negativo. Si counter es igual a end, el bucle contina. 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 de contador I y sus valores de inicio y fin. 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 = 1 To UBound(A) A(I) = 128 Next I End Sub

Los valores de iteracin start, end y step slo se evalan una vez, antes de iniciarse el bucle. Si en 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.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

73

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

For each...next
El bucle For Each...Next es parecido al bucle For...Next, pero ejecuta el bloque de instrucciones una vez por cada elemento de una coleccin, en vez de un nmero de veces especificado. La sintaxis es la siguiente:
For Each elementvariable In collection Statement block to be executed for each value of elementvariable. Next [ elementvariable ]

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. 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

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 utiliza la coleccin. Si el cdigo agrega, elimina o reorganiza elementos mientras recorre la coleccin, puede conseguir resultados ms fiables mediante un bucle diferente como For...Next o Do...Loop.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

74

SALIR DE UN PROCEDIMIENTO
Sale de un procedimiento o bloque y transfiere el control inmediatamente a la instruccin que sigue a la llamada al procedimiento o a la definicin del bloque.
Exit { Error! Referencia de hipervnculo no vlida. | Error! Referencia de hipervnculo no vlida. | Error! Referencia de hipervnculo no vlida. | Error! Referencia de hipervnculo no vlida. | Error! Referencia de hipervnculo no vlida. | Error! Referencia de hipervnculo no vlida. }

Partes Do: Sale inmediatamente del bucle Do en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin Loop Exit Do. Slo se puede utilizar dentro de un bucle Do. Cuando se utiliza con bucles anidados Do, Exit Do transfiere el control al bucle que est anidado un nivel por encima del bucle donde ocurre Exit Do. For: Sale inmediatamente del bucle For en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin Next. Exit For slo se puede utilizar dentro de un bucle For...Next o For Each...Next. Cuando se utiliza con bucles anidados For, Exit For transfiere el control al bucle que est anidado un nivel por encima del bucle donde ocurre Exit For. Function: Sale inmediatamente del procedimiento Function en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin que llam al procedimiento Function. Exit Function slo se puede utilizar dentro de un procedimiento Function. Select: Sale inmediatamente del procedimiento Select Case en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin End Select. Exit Select slo se puede utilizar dentro de una instruccin Select Case. Sub: Sale inmediatamente del procedimiento Sub en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin que llam al procedimiento Sub. Exit Sub slo se puede utilizar dentro de un procedimiento Sub. While: Sale inmediatamente del bucle While en el que aparece. La ejecucin contina con la instruccin que sigue a la instruccin End While. Exit While slo se puede utilizar dentro de un bucle While. Cuando se utiliza con bucles anidados While, Exit While transfiere el control al bucle que est anidado un nivel por encima del bucle donde ocurre Exit While. No confunda las instrucciones Exit con las instrucciones End. La instruccin Exit no define dnde termina una instruccin.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

75

Ejemplo En este ejemplo se utiliza la instruccin Exit para salir del bucle For...Next, Do...Loop y de un procedimiento Sub.
Sub ExitStatementDemo() Dim I, MyNum As Integer Do Bucle infinito. For I = 1 To 1000 Se ejecuta 1000 veces. MyNum = Int(Rnd * 1000) Genera nmeros aletorios. Select Case MyNum Evaluael nmero aleatorio. Case 7: Exit For If 7, exit For...Next. Case 29: Exit Do If 29, exit Do...Loop. Case 54: Exit Sub If 54, exit Sub procedure. End Select Next I Loop End Sub

REALIZAR ACCIONES CON MTODOS


Los mtodos son procedimientos asociados a objetos. Excepto los campos y las propiedades, que representan informacin que puede almacenar un objeto, los mtodos representan acciones que puede realizar un objeto. Los mtodos pueden afectar a los valores de las propiedades. Por ejemplo, en el caso de una analoga de radio, se puede emplear un mtodo SetVolume para cambiar el valor de una propiedad Volume. Asimismo, en Visual Basic . NET, los elementos de los cuadros de lista tienen una propiedad List, que se puede cambiar con los mtodos Clear y Add.

Usar mtodos en el cdigo


Al utilizar un mtodo en cdigo, la forma de crear la instruccin depende de cuntos argumentos requiere el mtodo y de si devuelve un valor. Generalmente, los mtodos se utilizan igual que las subrutinas o las llamadas de funcin. De forma ms especfica, los mtodos se invocan del mismo modo que los procedimientos de mdulos, exceptuando que los mtodos se pueden calificar con una expresin especificando la instancia del objeto a cuyo mtodo debe llamarse. Si no est calificada, la instancia es de forma implcita la variable Me. Para utilizar un mtodo que no requiera argumentos Utilice la sintaxis siguiente:
object.method()

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

76

En el ejemplo siguiente, el mtodo Refresh vuelve a dibujar el cuadro de imagen:


PictureBox1.Refresh() Forces a repaint of the control

MATRICES
Las matrices son tiles para trabajar con un conjunto de valores del mismo tipo de datos. Una matriz es una nica variable con varios compartimentos para almacenar valores, mientras que una variable escalar (es decir, no matricial) slo dispone de un compartimento para almacenar un nico valor. Se puede hacer referencia a la matriz como un todo si se desea hacer referencia a todos los valores que contiene, o bien se puede hacer referencia a sus elementos individuales uno a uno. Por ejemplo, para almacenar los gastos diarios para cada da del ao, se puede crear una matriz con 366 elementos, en vez de declarar 366 variables. Cada elemento de la matriz contiene un valor, al cual se obtiene acceso mediante el ndice del elemento. En el siguiente ejemplo se declara la variable de matriz CurExpense, se inicializa de modo que contenga 366 elementos y, a continuacin, se asigna a cada elemento el valor inicial 20.
Sub FillArray() Dim CurExpense(365) As Decimal 365. Dim I As Integer For I = 0 to 365 CurExpense(I) = 20.00 Next I End Sub Matriz de 0 a

Se pueden mezclar distintos tipos de datos en una matriz si se declara del tipo Object. En el siguiente ejemplo se almacena informacin de empleados en la variable de matriz EmployeeData.
Dim EmployeeData(3) As Object Matriz de 0 a 3. EmployeeData(0) = Ron Bendel EmployeeData(1) = 4242 Maple Blvd EmployeeData(2) = 48 EmployeeData(3) = 06-09-1953

Matrices multidimensionales
En Visual Basic, se pueden declarar matrices de hasta 32 dimensiones. Por ejemplo, la siguiente instruccin declara una matriz bidimensional con 5 filas y 10 columnas.
Dim Rectangle(4, 9) As Single De 0 a 4, 0 a 9.

El nmero total de elementos es el producto de los tamaos de todas las dimensiones; en este caso, 50.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

77

Para crear una matriz dinamica


Las variables de matriz se declaran del mismo modo que otras variables, mediante la instruccin Dim. Se agregan uno o ms pares de parntesis a continuacin del nombre de la variable para indicar que es una matriz en vez de un valor escalar (una variable que contiene un solo valor). Para declarar una variable de matriz unidimensional En la declaracin, agregue un par de parntesis detrs del nombre de la variable, tal y como muestra el siguiente ejemplo:
Dim MySingleArray() As Integer

Se utiliza a nivel de procedimiento para reasignar espacio de almacenamiento para una variable de matriz.
ReDim [ Error! Referencia de hipervnculo no vlida. ] Error! Referencia de hipervnculo no vlida.[(Error! Referencia de hipervnculo no vlida.)]

Partes Preserve: Opcional. Palabra clave utilizada para conservar los datos en una matriz existente cuando slo se cambia el tamao de la ltima dimensin. Name: Requerido. Nombre de la variable. Debe ser un identificador de Visual Basic vlido. Se pueden volver a cambiar tantas variables como desee en la misma instruccin especificando las partes name y boundlist para cada una. Las variables mltiples se separan con comas. Boundlist: Requerido. Lista de enteros que no sean negativos que representan los lmites superiores de las dimensiones de una matriz que se ha vuelto a definir. Los lmites superiores mltiples se separan por comas. El nmero de dimensiones en boundlist debe coincidir con el rango original de la matriz. Cada valor en boundlist especifica el lmite superior de una dimensin, no la longitud. El lmite inferior es siempre cero; por tanto, el subndice de cada dimensin puede variar desde cero hasta el valor del lmite superior. Es posible utilizar 1 para declarar el lmite superior de una dimensin de matriz. Esto significa que la matriz est vaca, pero no es Nothing, una distincin que requieren algunas funciones del Common Language Runtime. No obstante, el cdigo de Visual Basic no tiene un acceso satisfactorio a dicha matriz. Si se intenta obtenerlo, se produce un error IndexOutOfRangeException durante la ejecucin. La instruccin ReDim slo puede aparecer en el nivel de procedimiento. Esto significa que se puede volver a definir matrices dentro de un procedimiento pero no en el nivel de clase o mdulo.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

78

La instruccin ReDim se utiliza para cambiar el tamao de una o ms dimensiones de una matriz que ya se ha declarado formalmente. ReDim no puede cambiar el rango (el nmero de dimensiones) de la matriz. La instruccin ReDim no puede cambiar el tipo de datos de una variable de matriz o proporcionar valores nuevos de inicializacin para los elementos de la matriz. ReDim libera la matriz existente y crea una matriz nueva con el mismo rango. Los elementos de la nueva matriz se inicializan al valor predeterminado para su tipo de datos a menos que especifique Preserve. Si se incluye la palabra clave Preserve, Visual Basic copia los elementos de la matriz existente en la nueva matriz. Si se utiliza Preserve, slo se puede cambiar el tamao de la ltima dimensin de la matriz y, para cada otra dimensin, debe especificar el mismo tamao que tenga en la matriz existente. Por ejemplo, si su matriz tiene slo una dimensin, puede cambiar el tamao de dicha dimensin y conservar sin embargo el contenido de la matriz porque es la ltima y nica dimensin. Sin embargo, si su matriz tiene dos o ms dimensiones, slo puede cambiar el tamao de la ltima dimensin si utiliza Preserve. El ejemplo siguiente aumenta el tamao de la ltima dimensin de una matriz dinmica sin perder los datos existentes en la matriz y, a continuacin, se reduce el tamao con una prdida parcial de datos.
Dim IntArray(10, 10, 10) As Integer ... ReDim Preserve IntArray(10, 10, 20) ... ReDim Preserve IntArray(10, 10, 15)

El primer ReDim crea una nueva matriz, copiando todos los elementos de la matriz existente. Tambin agrega ms de 10 columnas al final de cada fila de cada capa. Los elementos de estas nuevas columnas se inicializan con el valor predeterminado del tipo de elemento de la matriz. El segundo ReDim crea otra nueva matriz, copiando todos los elementos que quepan. Sin embargo, se pierden cinco columnas desde el final de cada fila en cada capa. Esto no es un problema si ha terminado de utilizar estas columnas. Si se reduce el tamao de una matriz de gran tamao, puede liberar memoria que ya no necesite. Se puede utilizar ReDim en una propiedad que contiene una matriz de valores.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

79

Ejemplo En este ejemplo se utiliza la instruccin ReDim para asignar y reasignar espacio de almacenamiento para variables de matriz.
Dim I, MyArray() As Integer Declara una variable y una matriz. ReDim MyArray(5) Redimensiona a 6 elementos. For I = 0 To UBound(MyArray) MyArray(I) = I Initializa la matriz. Next I

La siguiente instruccin cambia el tamao de la matriz sin guardar el contenido de los elementos.
ReDim MyArray(10) Redimensiona a 11 elementos. For I = 0 To UBound(MyArray) MyArray(I) = I Initializa la matriz. Next I

La siguiente instruccin cambia el tamao de la matriz pero guarda el contenido de los elementos.
ReDim Preserve MyArray(15) Redimensiona a 16 elementos.

Cambiar el tamao de matrices


Una matriz se puede redimensionar en cualquier momento asignando un objeto matriz diferente a la misma variable de matriz, mediante ReDim o una instruccin de asignacin estndar. El nuevo objeto matriz puede tener dimensiones diferentes e incluso distinto rango. Esto ayuda a administrar la memoria de forma ms eficaz. Por ejemplo, es posible utilizar una matriz grande durante un tiempo reducido y, despus, redimensionarla mediante ReDim a un tamao menor. De este modo, se libera memoria que ya no se necesita. Cuando se redimensiona una matriz mediante ReDim, normalmente se pierden los valores existentes. No obstante, se pueden conservar si se incluye la palabra clave Preserve en la instruccin ReDim. Por ejemplo, la siguiente instruccin asigna una nueva matriz, inicializa sus elementos a partir de los elementos correspondientes de MyArray y asigna la nueva matriz a MyArray.
ReDim Preserve MyArray(10, 20)

Crear matrices de objetos


Para declarar y utilizar matrices de un tipo de objeto se procede del mismo modo que para declarar y utilizar una matriz de cualquier tipo de datos. Los miembros de esta matriz pueden recuperarse mediante su ndice y manipularse como cualquier otro objeto de este tipo. Las matrices tambin tienen funcionalidad integrada para buscar y ordenar, a la que se puede tener acceso a travs la variable de matriz.
Microsoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE 2

80

PROCEDIMIENTOS SUB
Un procedimiento Sub consiste en una serie de instrucciones de Visual Basic delimitadas por las instrucciones Sub y End. Cada vez que se llama a un procedimiento, se ejecutan las instrucciones de ste, desde la primera instruccin ejecutable tras la instruccin Sub hasta la primera instruccin End Sub, Exit Sub o Return que se encuentre. Un procedimiento Sub ejecuta acciones, pero no devuelve ningn valor. Puede tomar argumentos, como constantes, variables o expresiones, que le pasa el cdigo de llamada. La sintaxis para declarar un procedimiento Sub es la siguiente:
[accessibility] Sub subname[(argumentlist)] Statements of the Sub procedure go here. 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.

Declaracin de argumentos
Los argumentos de un procedimiento se declaran igual que las variables, especificando el nombre y el tipo de datos del argumento. Tambin puede especificarse el mecanismo que se va a utilizar para pasar el argumento, as como si se trata de un argumento opcional. La sintaxis de los argumentos en una lista de argumentos es la siguiente:
[Optional] [ByVal|ByRef] [ParamArray] argumentname As datatype

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

Sintaxis de llamada
Los procedimientos Sub se invocan de forma explcita, con una instruccin de llamada independiente. No se les puede llamar utilizando su nombre en una expresin. La instruccin de llamada debe suministrar el valor de todos los argumentos que no sean opcionales, y debe incluir la lista de argumentos entre parntesis. Si no se proporcionan argumentos, se puede omitir el parntesis. El uso de la palabra clave Call tambin es opcional.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

81

La sintaxis para llamar a un procedimiento Sub es la siguiente:


[Call] subname[(argumentlist)]

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

Una llamada tpica a TellOperator tendra esta forma:


Call TellOperator(file update)

PROCEDIMIENTOS FUNCTION
Un procedimiento Function consiste en una serie de instrucciones de Visual Basic delimitadas por las instrucciones Function y End Function. Cada vez que se llama a un procedimiento de este tipo, se ejecutan las instrucciones de ste, desde la primera instruccin ejecutable tras la instruccin Function hasta la primera instruccin End Function, Exit Function o Return que se encuentre. Un procedimiento Function es similar a un procedimiento Sub, pero adems devuelve un valor al programa que realiza la llamada al procedimiento. Un procedimiento Function puede tomar argumentos, como constantes, variables o expresiones, que le pasa el cdigo de llamada. La sintaxis para declarar un procedimiento Function es la siguiente:
[accessibility] Function functionname[(argumentlist)] As datatype Statements of the Function procedure. End Function

La accesibilidad puede ser Public, Protected, Friend, Protected Friend o Private.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

82

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.

Valores devueltos
El valor que un procedimiento Function devuelve al programa que realiza la llamada se denomina valor devuelto. La funcin puede devolver dicho valor de dos maneras: La funcin asigna un valor a su propio nombre de funcin en una o ms instrucciones del procedimiento. No se devuelve el control al programa que realiza la llamada hasta que se ejecuta una instruccin Exit Function o End Function, como en el siguiente ejemplo:
Function functionname[(argumentlist)] As datatype ... functionname = expression Control remains within the function. ... 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 posible dentro de la funcin. Si se intentara hacerlo, el compilador lo interpretar como una llamada a la funcin. En el siguiente ejemplo se genera un error de compilacin:
Function AllOnes(ByVal N As Integer) As Integer() 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() End Function
Microsoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE 2

83

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 Function Sqrt(ByVal Number As Single) As Single

Sintaxis de llamada
Para llamar a un procedimiento Function, hay que incluir el nombre y los argumentos de ste en la parte derecha de una asignacin o en una expresin. Esto ltimo se ilustra en los siguientes ejemplos de llamada:
lvalue = functionname[(argumentlist)] If ((functionname[(argumentlist)] / 3) <= expression) Then ...

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 Sqrt((Side1 ^ 2) + (Side2 ^ 2)) End Function

Son llamadas habituales a Hypotenuse las siguientes:


TestHypotenuse = Hypotenuse(TestLength, 10.7) Area = TriangleArea(X, Y, Hypotenuse(X, Y))

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 ejecutan todas las acciones de la funcin, pero el valor devuelto se omite. Las llamadas a MsgBox suelen hacerse de esta manera.

COMO TRATAR ERRORES


Instruccin Try...Catch...Finally (Visual Basic) Esta instruccin proporciona una manera de controlar algunos o todos los errores posibles que pueden ocurrir en un bloque de cdigo determinado mientras se ejecuta el cdigo.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

84

Try [ tryStatements ] [ Exit Try ] [ Catch [ exception [ As type ] ] [ When expression ] [ catchStatements ] [ Exit Try ] ] [ Catch ... ] [ Finally [ finallyStatements ] ] End Try tryStatements

Opcional. Instrucciones en las que puede ocurrir un error. Puede ser una instruccin compuesta. catch Opcional. Se permite utilizar varios bloques Catch. Si tiene lugar una excepcin mientras se procesa el bloque Try, cada instruccin Catch se examina en orden textual para determinar si controla la excepcin; el parmetro exception representa la excepcin que se ha producido.
exception

Opcional. Cualquier nombre de variable. El valor inicial de exception es el valor del error producido. Se utiliza con Catch para especificar la captura del error. Si se omite, la instruccin Catch detecta cualquier excepcin.
type

Opcional. Especifica el tipo de filtro de clase. Si el valor de exception es del tipo especificado en type o de un tipo derivado, el identificador queda enlazado al objeto de excepcin.
when

Opcional. Una instruccin Catch con una clusula When slo detecta las excepciones cuando expression se evala como True. Una clusula When slo se aplica despus de comprobar el tipo de la excepcin y expression puede hacer referencia al identificador que representa la excepcin.
expression

Opcional. Debe ser convertible implcitamente a Boolean. Cualquier expresin que describe un filtro genrico. Se utiliza normalmente para filtrar por nmero de error. Se utiliza con la palabra clave When para especificar las circunstancias bajo las que se captura el error.
catchStatements

Opcional. Instrucciones para controlar los errores que se producen en el bloque Try. Puede ser una instruccin compuesta.
Exit Try

Opcional. Palabra clave que interrumpe la ejecucin de la estructura Try... Catch...Finally. La ejecucin se reanuda con el cdigo que sigue inmediatamente a la instruccin End Try. Se ejecutar la instruccin Finally todava. No se permite en bloques Finally.
Microsoft Visual Basic.NET 2005 ELEMENTOS DEL LENGUAJE 2

85

Finally

Opcional. Siempre se ejecuta un bloque Finally cuando la ejecucin sale de cualquier parte de la instruccin Try.
finallyStatements

Opcional. Instrucciones que se ejecutan despus de las dems operaciones de procesamiento de error.
End Try

Finaliza la estructura Try...Catch...Finally. Las variables locales de un bloque Try no se encuentran disponibles en un bloque Catch porque se trata de bloques independientes. Si se desea utilizar una variable en ms de un bloque, se debe declarar la variable fuera de la estructura Try...Catch...Finally.

Las variables locales de un bloque Try no se encuentran disponibles en un bloque Catch porque se trata de bloques independientes. Si se desea utilizar una variable en ms de un bloque, se debe declarar la variable fuera de la estructura Try...Catch...Finally. El bloque Try contiene cdigo donde puede producirse un error, mientras que el bloque Catch contiene el cdigo para controlar cualquier error que tenga lugar. Si se produce un error en el bloque Try, el control del programa pasa a la instruccin Catch apropiada para su procesamiento. El argumento exception es una instancia de la clase Exception o una clase que se deriva de la clase Exception. La instancia de la clase Exception corresponde al error que se produjo en el bloque Try. La instancia contiene informacin acerca del error, como el nmero de error y el mensaje. Si una instruccin Catch no especifica un argumento exception, detectar cualquier tipo de excepcin del sistema o de la aplicacin. Esta variacin debe utilizarse siempre como el ltimo bloque Catch en la estructura Try...Catch...Finally, despus de detectar todas las excepciones especficas anticipadas. El flujo de control nunca puede alcanzar un bloque Catch situado detrs de Catch sin un argumento exception.

Microsoft Visual Basic.NET 2005

ELEMENTOS DEL LENGUAJE 2

86

no ON cl .De S Dat cid Ol visual Basic.NET 2005 visual Ba mb e 2005 visual Basic.NET 2005 vis re Ta ien scr ELE aTa enc Db. te ip CT bl ia _ co = O NET 2005 visual Basic.NET 20 , c s. Basic.NET 2005 visual Basic.N co man & per T ion T _ e m ne do ls ar _ I , visual Basic.NET 2005 visual Ba In le T x t i n 2005 visual Basic.NET 2005 vis If cto ion = N Ope os.I cid _ I cid NET 2005 visual Basic.NET 20 le r = .Op ew rar d _ enc nci enc Ge e d c i Basic.NET 2005 visual Basic.N O O i tF t tor. com n() leD os.S per as.F enc ie visual Basic.NET 2005 visual Ba b. ld Fo abl Has and Ol ele ari _ c 2005 visual Basic.NET 2005 vis Ty a. Ro o. r eD ct o NET 2005 visual Basic.NET 20 E pe co Lo bC ed = (c ad ws xec nt Basic.NET 2005 visual Basic.N om It T on (l Th ut ad ma em. visual Basic.NET 2005 visual Ba ec en eR ta or nd T to d ea D 2005 visual Basic.NET 2005 vis Ne (q r, ta or)) im = de ue NET 2005 visual Basic.NET 20 0 Wh xt bl r Lo co To a. il Basic.NET 2005 visual Basic.N lu a Co e mn le dOp visual Basic.NET 2005 visual Ba lu le t a c fi mn 2005 visual Basic.NET 2005 vis la cto As tor. ion. s. Fo NET 2005 visual Basic.NET 20 Ad = r.Re r Ne Fie Ove d( Basic.NET 2005 visual Basic.N co ta ad ld r w co Ne visual Basic.NET 2005 visual Ba Da Cou wri lu fi nta bla ta nt mn la do .N 2005 visual Basic.NET 2005 vis End ta xt Co ew (c r a) co NET 2005 visual Basic.NET 20 Wh bla lu on = Ro ne .R mn t Basic.NET 2005 visual Basic.N 0 w x il e visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N Aprenderemos que es la POO. visual Basic.NET 2005 visual Ba Confeccionaremos una clase, creando los atributos, 2005 visual Basic.NET 2005 vis propiedades y mtodos que la definen. NET 2005 visual Basic.NET 20 Crearemos una DLL que nos permita explotar su funcionalidad Basic.NET 2005 visual Basic.N en cualquier programa. visual Basic.NET 2005 visual Ba Haremos uso de la herencia de clases. 2005 visual Basic.NET 2005 vis NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N Introduccin visual Basic.NET 2005 visual Ba Definicin 2005 visual Basic.NET 2005 vis Trabajando con clases NET 2005 visual Basic.NET 20 Definiendo nuestra clase Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba Propiedades 2005 visual Basic.NET 2005 vis Mtodos NET 2005 visual Basic.NET 20 Constructores Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba Sobrecargas 2005 visual Basic.NET 2005 vis Herencia NET 2005 visual Basic.NET 20 Basic.NET 2005 visual Basic.N visual Basic.NET 2005 visual Ba 2005 visual Basic NET 2005 vis

s.

as

in

POO. PROGRAMACIN ORIENTADA A OBJETOS

POO PROGRAMACIN ORIENTADA A OBJETOS


Introduccin
Estoy seguro de que en los ltimos aos ha odo en alguna ocasin el trmino POO programacin orientada a objetos o en su forma inglesa OOP Object-oriented programming. Qu es la programacin orientada a objetos? para qu sirve? y porqu debera utilizarla? Son preguntas a las cuales tratar de dar respuesta en las siguientes pginas.

Denicin
Antes de nada me gustara aclarar que no son pocos los que estn de acuerdo en afirmar que sera mas propio denominar a la programacin orientada a objetos programacin orientada a clases, si no entiende esto no se preocupe porque se explicar en estas lneas. De la programacin orientada a objetos se dice que es un paradigma de programacin, es decir una manera de programar. Empezar dando una definicin tcnica, y permtanme que recurra para ello a la MSDN. Las clases son representaciones simblicas de objetos; describen las propiedades, campos, mtodos y eventos que forman objetos, de la misma forma que los planos describen los elementos que componen un edificio. As como un plano puede utilizarse para crear varios edificios, una nica clase puede utilizarse para crear tantos objetos como sea necesario. Imagnese la clase especie humana, nosotros somos capaces de realizar una serie de acciones mtodos tales como hablar, andar, dormir, etc. y tenemos unas propiedades que nos definen, color de piel, altura, color de ojos, longitud del cabello, etc. y somos capaces de reaccionar a una serie de estmulos eventos, si me gritas me asusto, si me cortas sangro. La especie humana sera por tanto la clase y cada uno de nosotros, yo, tu, tu compaero de trabajo seramos entidades tangibles y gestionables, seramos una instancia de esa clase es decir el objeto. Si tratamos de definir la programacin orientada a objetos de manera un poco ms tcnica debemos de definir las caractersticas imprescindibles que debe cumplir un lenguaje de programacin que presuma, como el Visual Basic .NET, de ser orientado a objetos.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

88

Herencia Se trata de la caracterstica ms importante de la POO, y establece que partiendo de una clase a la que denominamos clase base, padre o superclase, creamos una nueva clase denominada clase derivada, hija, o subclase. En esta clase derivada dispondremos de todo el cdigo de la clase base, ms el nuevo cdigo propio de la clase hija, que escribamos para extender sus funcionalidades. A su vez podemos tomar una clase derivada, creando una nueva subclase a partir de ella, y as sucesivamente, componiendo lo que se denomina una jerarqua de clases, que explicaremos seguidamente. Existen dos tipos de herencia: simple y mltiple. La herencia simple es aquella en la que creamos una clase derivada a partir de una sola clase base, mientras que la herencia mltiple nos permite crear una clase derivada a partir de varias clases base. El entorno de .NET Framework slo permite utilizar herencia simple. Como ejemplo real de herencia, podemos usar la clase Coche como clase base; en ella reconocemos una serie de propiedades como Motor, Ruedas, Volante, etc., y unos mtodos como Arrancar, Acelerar, Frenar, etc. Como clase derivada creamos CocheDeportivo, en la cul, adems de todas las caractersticas mencionadas para la clase Coche, encontramos propiedades y comportamiento especficos como ABS, Turbo, etc. Un ejemplo basado en programacin consistira en disponer de la ya conocida clase Empleado. Esta clase se ocupa, como ya sabemos, de las operaciones de alta de empleados, pago de nminas, etc.; pero en un momento dado, surge la necesidad de realizar pagos a empleados que no trabajan en la central de la empresa, ya que se trata de comerciales que pasan la mayor parte del tiempo desplazndose. Para realizar dichos pagos usaremos Internet, necesitando el nmero de tarjeta de crdito y la direccin email del empleado. Resolveremos esta situacin creando la clase derivada CiberEmpleado, que hereda de la clase Empleado, en la que slo tendramos que aadir las nuevas propiedades y mtodos para las transacciones electrnicas, puesto que las operaciones tradicionales ya las tendramos disponibles por el mero hecho de haber heredado de Empleado. La herencia por lo tanto nos sirve para reutilizar cdigo, podramos implementar una clase cuenta y despus la clase cuenta_corriente, cuenta_de_ ahorros, etc. que heredase de estas todas sus propiedades y mtodos e implementara nuevos/as.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

89

Encapsulacin La encapsulacin establece la separacin entre el interfaz del objeto y su implementacin, aportndonos dos ventajas fundamentales. Por una parte proporciona seguridad al cdigo de la clase, evitando accesos y modificaciones no deseadas; una clase bien encapsulada no debe permitir la modificacin directa de una variable, ni ejecutar mtodos que sean de uso interno para la clase. Por otro lado la encapsulacin simplifica la utilizacin de los objetos, ya que un programador que use un objeto, si este est bien diseado y su cdigo correctamente escrito, no necesitar conocer los detalles de su implementacin, se limitar a utilizarlo. Tomando un ejemplo real, cuando nosotros utilizamos un objeto Coche, al presionar el acelerador, no necesitamos conocer la mecnica interna que hace moverse al coche, sabemos que el mtodo Acelerar del coche es lo que tenemos que utilizar para desplazarnos, y simplemente lo usamos. Pasando a un ejemplo en programacin, si estamos creando un programa de gestin y nos proporcionan un objeto Cliente que tiene el mtodo Alta, y sirve para aadir nuevos clientes a la base de datos, no precisamos conocer el cdigo que contiene dicho mtodo, simplemente lo ejecutamos y damos de alta a los clientes en nuestra aplicacin.

El polimorfismo determina que el mismo nombre de mtodo, realizar diferentes acciones segn el objeto sobre el que sea aplicado. Al igual que suceda en la encapsulacin, el programador que haga uso del objeto, no necesita conocer los detalles de implementacin de los mtodos, se limita a utilizarlos. Pasando a un ejemplo real, tomamos dos objetos: Pelota y VasoCristal; si ejecutamos sobre ambos el mtodo Tirar, el resultado en ambos casos ser muy diferente; mientras que el objeto Pelota rebotar al llegar al suelo, el objeto VasoCristal se romper. En un ejemplo aplicado a la programacin, supongamos que disponemos de los objetos Ventana y Fichero; si ejecutamos sobre ambos el mtodo Abrir, el resultado en Ventana ser la visualizacin de una ventana en el monitor del usuario; mientras que en el objeto Fichero, se tomar un fichero en el equipo del usuario y se dejar listo para realizar sobre l operaciones de lectura o escritura.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

90

Trabajando con clases


Ya hemos dicho que la clase va a ser el molde a partir del cual crearemos nuestro objeto. Por lo tanto si queremos empezar a trabajar con objetos primeramente tendremos que saber cmo crear e implementar una clase. En Visual Basic .NET 2005 todo son objetos, es decir todo son instancias de clases. Tal vez no se haya dado cuenta, pero desde el mismo momento en que ha creado una aplicacin y ha empezado a programar un formulario en realidad estaba programando una clase, o es que acaso no le suena este cdigo?

Cmo creamos entonces una clase? Pues con la sentencia Class seguida del nombre de la clase. Supongamos que nos han encargado un proyecto para un gran banco y que queremos implementar una clase que nos permita trabajar con el concepto cuenta. Para ello abriremos un nuevo proyecto al que llamaremos usando_clases y seleccionaremos la opcin de agregar nueva clase de la barra de herramientas.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

91

Y le pondremos el nombre de cuenta.vb

Una vez hecho esto vemos como se ha agregado un nuevo mdulo de clase a nuestro proyecto y nos posiciona en la ventana de edicin de cdigo de nuestra clase. Cierre la venta de cdigo y vaya al diseo de nuestro formulario de inicio y agregue un objeto button y nmbrelo btnCrea_cuenta y en el manejador de su evento click agregue el siguiente cdigo.
Dim cuenta01 As New cuenta

Con esta sentencia le estamos diciendo que vamos a crear un nuevo objeto del tipo cuenta y que lo referenciaremos mediante el nombre cuenta01. Soy consciente de que nuestra clase cuenta aun carece de cdigo pero vamos a ver que por el simple hecho de haber sido creada esta expone ya unos pocos mtodos heredados de la clase system. A continuacin escriba el siguiente cdigo
Debug.WriteLine(cuenta01.ToString)

El mtodo ToString se hereda de la clase system y nos devuelve por defecto el nombre completo del tipo del objeto.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

92

Deniendo nuestra clase


Vamos a empezar a ir dando forma a nuestra clase. Lo primero que tenemos que tener en cuenta cuando nos propongamos a disear una clase son los atributos que van a definirla. En el caso que nos ocupa sabemos que toda cuenta tiene por ejemplo un nmero de cuenta, un titular , un saldo y una fecha de apertura, por citar algunas. Para implementar estos atributos nos iremos al cdigo de nuestra clase y procederemos a declarar dichos atributos.
Public Class cuenta Dim aNumero _ de _ cuenta As String Dim aTitular As String Dim aSaldo As Double Dim aFecha _ de _ apertura As Date End Class

Propiedades
Una vez hecho esto ya le hemos dado a nuestra clase ciertas caractersticas que la definen, las cuales no son accesible desde fuera de mi clase, por lo que deberemos darle al usuario un medio para leer y/o escribir en los valores de los atributos es decir un interface para manejar la clase. Para ello nos serviremos de procedimientos property, escriba a continuacin el siguiente cdigo
Public Property numero _ de _ cuenta() As String

Una vez escrita esta sentencia al presionar la tecla ENTER el Intellisense reconoce que estamos creando un procedimiento property y nos autogenera el resto del estructura.
Public Property numero _ de _ cuenta() As String Get End Get Set(ByVal value As String) End Set End Property

La estructura consta de dos partes: una encargada de asignar un valor a un atributo SetEnd Set conocido como el setter y otra encargada de devolver un valor GetEnd Get o getter. Como habr podido adivinar la property numero_de_cuenta se va a encargar de leer y escribir en el atributo aNumero_de_cuenta. Para ello programamos el property de la siguiente manera:
Public Property numero _ de _ cuenta() As String Get Return aNumero _ de _ cuenta End Get Set(ByVal value As String) aNumero _ de _ cuenta = value End Set End Property
Microsoft Visual Basic.NET 2005 PROGRAMACIN ORIENTADA A OBJETOS

93

Con este cdigo cuando alguien que este utilizando un objeto del tipo cuenta trate de leer la propiedad numero_de_cuenta se ejecutar el getter y le devolver el valor del atributo y cuando alguien trate de asignar un valor a la propiedad el setter se encargar de escribir el nuevo valor en esta. Vamos a escribir algunas lineas para comprobar el correcto funcionamiento de nuestro clase. Abra el manejador del evento click de nuesto botn btnCrea_cuenta y aada el siguiente cdigo
Private Sub btnCrea _ cuenta _ Click(ByVal sender As System. Object, _ ByVal e As System.EventArgs) Handles btnCrea _ cuenta.Click Dim cuenta01 As New cuenta cuenta01.numero _ de _ cuenta = 01234567890123456789 MsgBox(cuenta01.numero _ de _ cuenta) End Sub

Ahora agregue un punto de interrupcin en la linea 5 y 6 como muestra la figura.

Ejecute la aplicacin y haz clic en el boton. El cdigo se detendr antes de ejecutar la linea 5.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

94

Presione la tecla F8 paso a paso por instruccin y observe como el cdigo salta al interior de nuestra clase.

Se ejecuta la asignacin del value.

Quedando almacenado en el atributo aNumero_de_cuenta.

Presionamos F5 confiando en que nuestro cdigo se detendr en el 2 punto de interrupcin de nuestro cdigo.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

95

Est a punto de leerse el valor de la propiedad numero_de_cuenta. Presionamos F8 de nuevo y vemos como nuestro cdigo entra en la clase de nuevo, en esta ocasin en el getter.

El getter le devuelve el valor y nuestra aplicin muestra el mensaje.

Agreguemos ahora un Property para el campo aTitular


Public Property titular() As String Get Return aTitular End Get Set(ByVal value As String) If value.Trim.Length > 0 Then aTitular = value End If End Set End Property

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

96

Espero que con este ejemplo y con la ayuda de su formador haya entendido el funcionamiento de los mtodos property. Estos se encargan bsicamente de escribir en los atributos privados de las clases cuando un objeto as lo requiere y leer cuando sea necesario. Pero, qu pasara si en vez de tratar de escribir 20 caracteres vlidos escribimos un galimatas sin sentido o una cadena de texto vaca?. Pues que tal y como hemos implementado nuestros property este guardara sin problemas el valor en el atributo. Permitame que refuerze este concepto. Detenga su aplicacin, vaya al formulario principal y posicione sobre l, un objeto timer. Ahora abra el manejador del evento clic del botn btnCrea_cuenta, comente las lineas escritas hasta ahora y escriba esto.
Private Sub btnCrea _ cuenta _ Click(ByVal sender As System. Object, ByVal e As System.EventArgs) Handles btnCrea _ cuenta.Click Dim intervalo As Integer = 0 Timer1.Interval = intervalo Dim cuenta01 As New cuenta cuenta01.numero _ de _ cuenta = 01234567890123456789 MsgBox(cuenta01.numero _ de _ cuenta) End Sub

Con esto estamos declarando una variable llamada intervalo del tipo integer y la estamos inicializando a 0. Despues le estamos diciendo a la propiedad Interval del tipo Integer de nuestro reloj que va a ser igual a Intervalo, que recordemos vale 0. Bien, pues si ejecuta la aplicacin y presiona el botn obtendremos una excepcin tal y como se muestra en la figura.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

97

Por qu ha ocurrido esto? Pues porque al igual que nosotros con nuestra propiedad numero_de_cuenta el programador de la clase timer quiso evitar que alguien escribiera en la propiedad interval un valor no vlido y previno esto lanzando una excepcin que el programador pudiera controlar cuando esto sucediera. Tras esta breve demostracin vamos a aprender a operar igual que el programador de la clase timer para evitar ciertos valores incorrectos en nuestros atributos. Elimine su objeto timer y las dos lineas que hemos utilizado para nuesto ejemplo. Ahora abra el cdigo de la clase e introduzca el siguiente cdigo en el property numero_de_cuenta
Public Property numero _ de _ cuenta() As String Get Return aNumero _ de _ cuenta End Get Set(ByVal value As String) If value.Trim.Length = 20 Then Dim contador As Integer For contador = 0 To value.Length - 1 If Not Char.IsDigit(value.Substring(contador, 1)) Then Throw New ArgumentException(Numero de cuenta invlido) Exit Property End If Next aNumero _ de _ cuenta = value Exit Property End If Throw New ArgumentException(Numero de cuenta invlido & vbCrLf _ & Este debe tener 20 caracteres) End Set End Property

Con este cdigo nos aseguramos de que nuestro numero de cuenta siempre va a tener 20 digitos y en caso contrario, no asignamos el valor y reportamos el fallo al usuario de nuestra clase mediante el uso de una excepcin. La manera general de trabajar de los property es esta. En caso de error podramos haber optado por escribir un numero de cuenta automtico, pero es bueno que las clases sean polivalentes y sea el usuario de la clase, no el programador de esta, quien decida que hacer en caso de error.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

98

Para probar esto de una manera rpida haremos unos pequeos cambios en nuestra aplicaccin, agregaremos una label, una caja de texto y un botn a nuestro formulario, de nombre lblNumeroDeCuenta , txtNumeroDeCuenta y btnGrabar tal y como podemos ver en la figura adjunta.

Y modificaremos nuestro cdigo para hacer que el objeto se declare en la zona de declaraciones, se cree o instancie en la carga del formulario y sea el botn el encargado de intentar asignarle un valor a su propiedad numero_de_cuenta.
Public Class Form1 Dim cuenta01 As cuenta Private Sub Form1 _ Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load cuenta01 = New cuenta End Sub Private Sub btnGrabar _ Click(ByVal sender As System. Object, _ ByVal e As System.EventArgs) Handles btnGrabar.Click Try cuenta01.numero _ de _ cuenta = txtNumeroDeCuenta.Text MsgBox(N de cuenta asignado correctamente) Catch ex As Exception MsgBox(Se produjo un error & vbCrLf & ex.Message) End Try End Sub End Class

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

99

Probemos ahora su correcto funcionamiento. Primero probaremos si todo sigue funcionando correctamente en caso de darle un nmero de cuenta correcto; es decir 20 dgitos.

Ahora trataremos de darle un nmero de cuenta con menos de 20 dgitos.

Y por tlimo un nmero de cuenta con 20 caracteres pero algunos no son dgitos.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

100

Ahora que hemos aprendido como realizar mtodos de comprobacin ser fcil implementar procedimientos property que comprueben los datos que nos pasan desde fuera de nuestra clase verdad?. Implementemos pues un property que nos permita leer y escribir? en el atributo saldo. Estoy seguro de que a muchos nos gustara cambiar el saldo de nuestra cuenta a nuestro antojo, pero en realidad somos conscientes de que el saldo de una cuenta solo se modifica a base de sacar y meter dinero, ya sea mediante extractos de cajero, retirada de efectivo en ventanilla, recivos, transferencias, etc Quiere decir eso que no podremos modificar el saldo? No, ni mucho menos. Primero implementemos una propiedad que permita al usuario de nuestra clase el averiguar el saldo actual.
Public ReadOnly Property saldo() As Double Get Return aSaldo End Get End Property

Como habr podido apreciar nuestra property carece de setter ya que es de solo lectura, por lo que debemos escribir ReadOnly Implementemos ahora el property de la fecha de apertura. Para ello implementaremos un mtodo property de solo escritura, s que puede parecer extrao que podamos leer y no escribir en el atributo pero lo habitual es que queramos saber la antigedad de una cuenta, y esta la calcularemos despues. Introduzca el siguiente property para la fecha de apertura y confie en mi.
Public WriteOnly Property fecha _ de _ apertura() As Date Set(ByVal value As Date) If value > 01/01/1900 AndAlso value <= Date.Now Then aFecha _ de _ apertura = value Else Throw New ArgumentException(Fecha no vlida) End If End Set End Property

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

101

Mtodos
Continuemos completando nuestra clase, dado que hemos restringido la property Saldo a solo lectura debemos de implementar un mtodo que nos permita modificar el saldo. Abra su clase y agregue el siguiente cdigo.
Public Sub retirar _ efectivo(ByVal importe As Double) If importe > 0 AndAlso importe <= saldo Then aSaldo -= importe Else Throw New ArgumentException(Importe n vlido) End If End Sub

Este prodecimiento nos permitira retirar efectivo de nuestra cuenta siempre que el importe sea positivo y claro est, siempre que nuestra cuenta disponga de suficiente efectivo. Creemos ahora un procedimiento anlogo para el ingreso de efectivo.
Public Sub ingresar _ efectivo(ByVal importe As Double) If importe > 0 Then aSaldo += importe Else Throw New ArgumentException(Importe n vlido) End If End Sub

Con estos dos procedimientos ya somos capaces de modificar el valor del atributo aSaldo. Sigamos completando nuestra clase. Si recuerda el atributo aFecha_de_apertura tan solo iba a poder ser leido gracias a una property de solo lectura. Es habitual en los programas de banca que se hagan estadsticas de la antigedad de sus clientes u ofertas especiales para ciertos colectivos, jovenes, 3 edad, etc. Sera til pues dar al usuario de nuestra clase un medio de obtener la antigedad de la cuenta. La antigedad es el tpico ejemplo de campo calculado, es decir no se almacena si no que se calcula en tiempo real cuando hace falta. Vamos a agregar a nuestra clase una funcin que devuelva al usuario de la clase la antigedad de la cuenta, calculando la diferencia entre la fecha de apertura y el da de hoy. Abra el cdigo de su clase e implemente el siguiente cdigo.
Public Function antigedad() As Integer Return (DateDiff(DateInterval.Year, _ aFecha _ de _ apertura, Date.Now)) End Function
Microsoft Visual Basic.NET 2005 PROGRAMACIN ORIENTADA A OBJETOS

102

La funcin datediff nos permite averiguar la diferencia entre dos fechas cualesquiera, el primer argumento es la unidad en la que se nos devolver el resultado: aos, das, etc. el segundo y tercer parmetro son las fechas de las cuales se realizar la diferencia. Nuestra clase ya dispone por lo tanto de una interface bastante completa, que nos permite modificar algunos de sus campos ya sea mediante procedimientos property, o mtodos, y leer los atributos mediante los getter de los property.

Constructores
El constructor de un objeto es el mtodo que se ejecuta cuando invocamos la sentencia New de un objeto. Abra su clase y agregue el siguiente procedimiento.
Public Sub New() MsgBox(Se acaba de crear un objeto del tipo cuenta) End Sub

Cuando el usuario introduzca una linea como la siguiente se ejecutar la sentencia anterior y saldr el mensaje. Es habitual que en el constructor del objeto se inicializen ciertos valores. Recuerda que aun no hemos dispuesto ningn modo de escribir la fecha de apertura? Seguro que cuando ustd crea un archivo de texto, o una fotogrfia no se encarga de escribir en ningn campo cuando la cre. En lugar de ello confia en que la aplicacin o el propio sistema operativo la cree por usted verdad?.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

103

Sera absurdo obligar al usuario a que cuando cree un objeto cuenta se le pida Cundo lo cre? El usuario podra maldecir nuestra aplcacin alegando cmo que cundo estoy creando la cuenta? Pus ahora!!... Exacto ahora, en el momento en el que se invoca al constructor. Podramos hechar una mano a nuesto desesperado usuario agregando el siguiente cdigo al constructor del objeto.
Public Sub New() aFecha _ de _ apertura = Date.Now End Sub

La propiedad Now de la clase Date nos proporciona un objeto fecha con la fecha de hoy. Prctico, verdad?

Sobrecargas
Una de las ventajas que tiene la POO es la reutilizacin de cdigo. Si queremos que nuestra clase sea utilizada en el mayor nmero de aplicaciones posibles esta debe ser estable y debe ser polivalente, es decir ofrecer distintas maneras de ser utilizada. Se imagina que pasara si al crear una cuenta el usuario olvidara darnos el numero de cuenta o el titular? Pues que en caso de que se realizara posteriormente una lectura de estas propiedades, estas estaran vacias.
cuenta01 = New cuenta MsgBox(cuenta01.numero _ de _ cuenta) MsgBox(cuenta01.titular)

Si queremos obligar al usario a que siempre que cree un objeto nos de unos valores obligatorios, podemos modificar el constructor agregndole parmetros. De hecho hay un alto nmero de programadores que opinan que sera obligatorio trabajar as. Abra el cdigo de su clase y modifique nuestro contructor tal y como sigue.
Public Sub New(ByVal nombre As String, ByVal numero As String) fecha _ de _ apertura = nombre numero _ de _ cuenta = numero aFecha _ de _ apertura = Date.Now End Sub

Con este cdigo estamos modificando nuesto constructor de modo que estemos obligando al usuario a que cuando instancie el objeto me pase dirctamente el nombre del titular y el numero de cuenta.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

104

Sirvindonos de este constructor, estamos forzando a el usuario de nuestra clase a que siempre que cree un objeto cuenta nos pase los argumentos solicitados. Qu pasara si el usuario aun no dispone de toda la informacin necesaria? o simplemente no quiere hacerlo? Pues que dado que hemos modificado el constructor por defecto le sera imposible. Recuerden que nuestras clases deben de facilitar su uso y para ello, por qu no dar al usuario distintas posibilidades de creacin? Un mtodo que puede ser invocado de dos o mas maneras se dice que est sobrecargado. Cuando tratemos de sobrecargar un mtodo tenemos que recordar que debemos crear las distintas sobrecargas o con distinto numero de parmetros o con distinto tipo de esto, pues si no el GUI sera incapaz de distinga cual estamos utilizando. No se preocupe si esto no ha quedado demasiado claro, lo aclaramos con el uso de nuesto ejemplo. Ya hemos visto como configurar el constructor de nuestra clase. Ahora vamos a darle al usuario la posicilidad de crear el objeto cuenta sin parmetros, con el nmero de cuenta, o con el titular y el numero de cuenta. Abra su clase y agregue los siquientes constructores.
Public Sub New() Constructor sin pametros aFecha _ de _ apertura = Date.Now End Sub Public Sub New(ByVal numero As String) Constructor con un parmetro numero _ de _ cuenta = numero aFecha _ de _ apertura = Date.Now End Sub Public Sub New(ByVal nombre As String, ByVal numero As String) Construtor con dos parametros fecha _ de _ apertura = nombre numero _ de _ cuenta = numero aFecha _ de _ apertura = Date.Now End Sub

Fjese en que al asignar el valor al atributo no lo hago directamente sino que utilizo los setters de los property oportunos, ya que de no hacerlo el constructor del objeto permitira escribir valores no vlidos en los atributos. Ahora al tratar de crear un objeto cuenta el usuario se encuentra con alternativas y ser l, quin elija cual se adeca mejor a sus necesidades.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

105

Podra crear el objeto sin parmetros.

Con el nmero de cuenta.

O con el nmero de cuenta y el titular.

Conclusin Hemos aprendido como crear una clase sencilla con unas cuantos atributos, mtodo, propiedades y varias maneras de ser instanciadas. En este ejemplo nos hemos servido de un mdulo de clase que hemos agregado a nuesto proyecto. Peroqu pasara si quiero utilizar mi clase en otro proyecto? Podra coger el archivo cuenta.vb e incluirlo en el proyecto en cuestin, pero de este modo el programador vera que es lo que hace mi clase y como lo hace rompiendo as el principio de encapsulacin. Imaginemos que mi clase ya est acabada y probada, y decido tratar de subirla a internet para que cualquier persona pueda hacer uso de ella. Para ello tendra que compilar mi clase en un archivo dll. Vamos a seguir los pasos necesarios. Visual Basic .NET 2005 nos invita desde el men de nuevo proyecto a generar las clases con un tipo de proyecto Biblioteca de Clases

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

106

Pero dado que nuestro proyecto ya est generado voy a ensearle a convertir una aplicacin para Windows en una clase ensamblada en un archivo DLL. Lo primero que deberemos hacer es quitar el formulario de nuestro proyecto. Esto no es algo verdaderamente necesario, pero este ha sido utilizado solo para probar la funcionalidad de nuestra clase e incluirlo en el ensamblado no valdr para nada mas que aumentar su peso, es decir su tamao. Para ello en el explorador de soluciones seleccionamos el formulario y le damos a botn derecho excluir.

Ahora seleccionamos la solucin y hacemos clic en el botn derecho y seleccionamos propiedades.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

107

Se desplegar la venta de propiedades del proyecto. En ella cambio el tipo de aplicacin a biblioteca de clases, el espacio de nombre a mis_clases veremos mas adelante para ques sirve y el nombre del ensamblado a cuenta. Cerramos la ventana y le decimos que si queremos guardar los cambios.

Ahora debemos generar nuestra DLL para ellos nos vamos al menu Generar/ Generar o bien seleccionamos nuestra solucin y hacemos clic con el botn derecho y marcamos la opcin generar.

Si todo ha ido bien Generacin satisfactoria habremos generado un archivo DLL con nuestra clase. Para comprobarlo dirjase al directorio del proyecto\bin\release y deber de tener en ese directorio el archivo generado, en nuestro caso cuenta.dll Ahora solo nos queda comprobar que puedo utilizar nuestra clase en cualquier proyecto. Abra una nueva instancia del Visual Basic .NET 2005, cree un proyecto del tipo Aplicacin para windows y nombrelo Usando mi DLL.
Microsoft Visual Basic.NET 2005 PROGRAMACIN ORIENTADA A OBJETOS

108

Ahora elija el menu agregar referencia del menu proyecto.

Haga click en la pestaa Examinar y navegue por el explorado hasta seleccionar la DLL que generamos.

Ahora en el menu explorador de soluciones haga click en el botn Mostrar todos los archivos, desplegue referencias y observe que se ha agregado la referencia a nuestra clase cuenta. Ahora situe un objeto boton en el formulario y en el manejador del evento de clic agregue el siguiente cdigo.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

109

Private Sub Button1 _ Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim nueva _ cuenta As New mis _ clases.cuenta nueva _ cuenta.numero _ de _ cuenta = 01234567890123456789 nueva _ cuenta.ingresar _ efectivo(600) Console.WriteLine(nueva _ cuenta.antigedad) End Sub

Como puede apreciar, estamos utilizando nuestro objeto nueva_cuenta creado gracias a la clase cuenta que se situa porque as lo configuramos en el espacio de nombre mis_clases

Herencia
Hasta ahora hemos aprendido como crear una clase, pero qu sucedera si deseo crear una clase que tenga mucho en comn con la clase cuenta, pero algunas diferencias? Tendra que escribir una nueva clase? Gracias a Dios no. Podremos hacer uso de la herencia. Imaginemos que queremos crear una nueva clase, llammosla cuenta nomina que herede de cuenta pero que aada a esta un campo cuanta_nomina. Podramos crear una nueva clase del modo que ya conocemos y escribiremos inherits nombre_de_cuenta.
Public Class cuenta _ nomina Inherits cuenta Dim aCuana As Double Public Property cuantia() As Double Get Return aCuana End Get Set(ByVal value As Double) If value > 0 Then aCuana = cuantia End If End Set End Property End Class

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

110

Al utilizar la clase cuenta_nomina tendramos acceso a todos los mtodos y propiedades de la clase cuenta de la que hereda y aquellos declarado en la propia clase cuenta_nomina.

Hemos visto como crear una clase, configurarla, ensamblarla, hacer uso de ella desde otro programa y como reutilizar cdigo gracias a la herencia. El tema de la programacin orientada a objetos es realmente apasionante y el nmero de pginas que hay escritas sobre el no cabran en este manual. Espero que con el ejemplo aqu tratado, los ejercicios adjuntos y las explicaciones de su formador aclare los conceptos principales de la POO con visual Basic .NET 2005 y utilize esta en su da a da como programador. Se sorprender.

Microsoft Visual Basic.NET 2005

PROGRAMACIN ORIENTADA A OBJETOS

111

You might also like