0% encontró este documento útil (0 votos)
48 vistas108 páginas

Programacion Logica Teoria

El documento trata sobre la programación visual. Explica que la programación visual se basa en notaciones gráficas y componentes de software manipulables para definir programas. Los lenguajes de programación visual (LPV) usan representaciones visuales como gráficos e iconos. Algunos ejemplos de LPV son los sistemas basados en flujos de datos y los de programación por ejemplo. El documento también cubre conceptos clave de los LPV como la abstracción de datos, los sistemas de tipos y las estructuras de control.

Cargado por

matias.sciutto91
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
48 vistas108 páginas

Programacion Logica Teoria

El documento trata sobre la programación visual. Explica que la programación visual se basa en notaciones gráficas y componentes de software manipulables para definir programas. Los lenguajes de programación visual (LPV) usan representaciones visuales como gráficos e iconos. Algunos ejemplos de LPV son los sistemas basados en flujos de datos y los de programación por ejemplo. El documento también cubre conceptos clave de los LPV como la abstracción de datos, los sistemas de tipos y las estructuras de control.

Cargado por

matias.sciutto91
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Tecnicatura Superior en Análisis de Sistemas

PROGRAMACIÓN VISUAL

Tema 1- Programación visual

La programación visual (visual programming) se refiere al desarrollo de software donde


las notaciones gráficas y los componentes de software manipulables interactivamente son
usados principalmente para definir y componer programas.
La programación visual se define comúnmente como el uso de expresiones visuales (tales
como gráficos, animación o iconos) en el proceso de la programación, pueden ser
utilizadas para formar la sintaxis de los nuevos lenguajes de programación visuales que
conducen a los nuevos paradigmas tales como programación por la demostración; o
pueden ser utilizadas en las presentaciones gráficas del comportamiento o de la estructura
de un programa.
El objetivo de la programación visual es mejorar la comprensión de los programas y
simplificar la programación en sí. Más allá, la programación visual deberá fomentar a los
usuarios finales a construir sus propios programas, que de otra forma deben ser escritos
por programadores profesionales.
Está basada en un ambiente gráfico interactivo por medio del cual se diseñan las
interfaces, las características de los diversos objetos que las componen, y se escribe y
valida el código fuente que le da operabilidad a unos y otros.

Lenguajes de programación visual

La programación visual se basa en el uso de lenguajes visuales (LVP). Un lenguaje de


programación visual puede definirse como:

• Un lenguaje de programación que usa una representación visual (tal como


gráficos, dibujos, animaciones o iconos, parcial o completamente).
• Un lenguaje visual manipula información visual o soporta interacción visual, o
permite programar con expresiones visuales.
• Un lenguaje visual es un conjunto de arreglos espaciales de símbolos de texto y
gráficos con una interpretación semántica que es usada para comunicar acciones
en un ambiente.
• Los LVPs son lenguajes de programación donde se usan técnicas visuales para
expresar relaciones o transformaciones en la información.

Por ejemplo, un objeto visual que representa un proceso de adición (suma) toma dos
entradas y produce una salida. En un LVP típico de flujo de datos, el usuario simplemente
selecciona un valor de entrada y selecciona un puerto de entrada al objeto para establecer
una relación entre los datos y el proceso.
El génesis de los LPV surgió en 1975 con la publicación de David Canfield Smith
“Pygmalion: A Creative Programming Environment''. Por ejemplo, Pygmalion incorporó
un paradigma de programación basado en iconos en el cual los objetos creados podían ser
modificados, y conectados juntos, con las características definidas para realizar
cómputos.
Muchos LPV modernos emplean un acercamiento basado en iconos como el de Smith.
Pygmalion también hizo uso el concepto de programación por ejemplo, en donde el
usuario muestra al sistema cómo realizar una tarea en un caso específico y el sistema
utiliza esta información para generar un programa el cuál realiza la tarea en casos
generales.
¿Por qué insistimos en comunicarnos con las computadoras usando lenguajes de
programación textuales? ¿No sería mejor comunicarnos con las computadoras usando una
representación que aproveche nuestra naturaleza visual?
Obviamente, los autores de los lenguajes de programación visuales (LPV) discuten que
la respuesta a ambas preguntas es sí. Las principales motivaciones para la mayoría de la
investigación en LPV son:
• Mucha gente piensa y recuerda cosas en términos de cuadros.
• Ella se relaciona con el mundo de una manera intrínsecamente gráfica y utiliza
imágenes como componente primario del pensamiento creativo.
• Además, los lenguajes de programación textuales han demostrado ser algo
difíciles para que mucha gente creativa e inteligente aprenda a utilizar con
eficacia.
• La reducción o eliminación de la necesidad de traducir ideas visuales en
representaciones textuales puede ayudar a atenuar este problema de la curva del
aprendizaje.
• Además, una variedad de aplicaciones, incluyendo la visualización científica y
la simulación interactiva se prestan bien a los métodos visuales de desarrollo.
• Un LPV NO es un ambiente integrado de desarrollo (o IDE). La diferencia es
que un VPL debe ser capaz de llevar a cabo todas las tareas de programación de
forma visual, sin tener que recurrir a la representación textual.

Clasificación de los lenguajes visuales

Los lenguajes visuales se dividen en las siguientes categorías:


• Lenguajes puramente visuales
• Sistemas híbridos de texto y elementos visuales
• Sistema de programación por ejemplo (Programming-by-example)
• Sistemas orientados a restricciones (Constraint-oriented systems)
• Sistemas basados en formas (entradas tipo “hoja de cálculo” animada)

Aunque los LPVs comunican la información de una manera más visual que los lenguajes
textuales tradicionales, el texto aún tiene su lugar en la programación visual. Hay tres
áreas que ilustran la superioridad del texto en algunas situaciones:
• Documentación,
• Asignar nombres para distinguir entre elementos de un mismo tipo, y
• Expresar conceptos bien conocidos y compactos que son inherentemente textuales
([Link]. fórmulas algebraicas)

Principales conceptos de los lenguajes visuales

Los principales conceptos relativos a los lenguajes visuales son:


• Abstracción procedural (descomposición del programa en módulos)
• Abstracción de datos, consiste en encapsular los tipos de datos abstractos definidos
por el usuario, permitiendo su acceso solo por medio de operaciones definidas.
• Sistema de tipos
• Control de flujo
• Estructuras de control (selección, iteración)
• Formatos y estándares. Se refiere a la definición de reglas que permitan especificar
los elementos del LPV ([Link]. GXL, XGMML, GML)
• Gramáticas de lenguajes visuales. Los lenguajes visuales se especifican por una
tripleta (ID,G,B), donde :
• ID es el diccionario de iconos, el cual es un conjunto de iconos generalizados, cada
uno representado por un par (Xm,Xi) , donde Xm es la parte lógica (significado) y Xi
es la parte física (imagen).
• G es una gramática que especifica cómo pueden construirse objetos compuestos a
partir de iconos simples usando operadores de relación espaciales.
• B es una base de conocimiento de dominio específico, la cual contiene la
información necesaria para construir el significado de la sentencia visual
(nombres de eventos, relaciones, referencias a los objetos, etc).

GUI: Interfaz Gráfica de Usuario (Graphical User Interface)

Interfaz gráfica de usuario (En inglés Graphic User Interface, también conocido con su
acrónimo GUI) es un método para facilitar la interacción del usuario con el ordenador o
la computadora a través de la utilización de un conjunto de imágenes y objetos pictóricos
(iconos, ventanas, etc.) además de texto. Surge como evolución de la línea de comandos
de los primeros sistemas operativos y es pieza fundamental en un entorno gráfico.
GUI es un acrónimo del vocablo inglés Graphical User Interface. Douglas Engelbart,
además de inventor del mouse, desarrolló la primera interfaz gráfica en los años 1960 en
[Link]. en los laboratorios de XEROX. Fue introducida posteriormente al público en las
computadoras Apple Macintosh en 1984, y a las masas hasta 1993 con la primera versión
popular del sistema operativo Windows 3.0.
Los GUIs que no son PUIs son encontrados en juegos de computadora, y los GUIs
avanzados basados en realidad virtual ahora son usados con más frecuencia en las
investigaciones. Muchos grupos de investigación en Norteamérica y Europa están
trabajando actualmente en el interfaz de enfoque del usuario o ZUI (Zooming User
Interface), que es un adelanto lógico en los GUI, mezclando 3D con 2.o o "2D y medio
objetos vectoriales de una D".

Principios para el diseño de interfaces


gráficos.

Existen principios relevantes para el diseño e


implementación de Interfaces de usuario
(IU) ya sean para IU graficas como para la
web.
Autonomía: La computadora, la IU y el
entorno de trabajo deben estar a disposición
del usuario. Se debe dar al usuario el
ambiente flexible para que pueda aprender rápidamente a usar la aplicación.
Percepción del Color: Aunque se utilicen convenciones de color en la IU, se deberían usar
otros mecanismos secundarios para proveer la información a aquellos usuarios con
problemas en la visualización de colores.
Legibilidad: Para que la IU favorezca la usabilidad del sistema de software, la
información que se exhiba en ella debe ser fácil de ubicar y leer. Es importante hacer
clara la presentación visual (colocación /agrupación de objetos, evitar la presentación de
excesiva información).

Programando con GUI’s

V • Existen IDEs (Integrated Development Enviroment ó Ambientes de Desarrollo


Integrados) que permiten programar aplicaciones con ventanas, botones, y una serie de
elementos visuales de manera sencilla y en paralelo con la programación de la lógica de
la aplicación propiamente tal.
• Dependiendo del lenguaje de programación que uno desee utilizar, existen distintos
IDEs que utilizan uno u otro lenguaje.

Java => Eclipse, NetBeans (Sun)


C++, C#, Visual Basic => Microsoft Visual Studio (MS)
Pascal => Delphi, Kylix (Borland)

Podemos decir entonces que la GUI permite la interacción del usuario con la
máquina/aplicación en cuestión. Además utiliza una serie de herramientas y tecnologías
para mejorar los procesos de entrega tanto como la generación de información por lo que
es responsable en gran medida de la masificación de las computadoras personales.

Ejemplos de GUI’s

)
Conclusiones.

Algunas de las perspectivas en el desarrollo de la programación visual son:


• Complemento de IDEs.
• Construcción de aplicaciones sobre una plataforma nativa.
• Generación de código (de la representación visual a un lenguaje textual)
• Fusión con lenguajes de modelado (UML + SDL)
• Integración de recursos multimedia a las aplicaciones

Podemos decir que las ventajas de la programación visual son varias, entre ellas
Tenemos que:
• El usuario “normal” no desea trabajar/ver resultados por una consola de
comandos.
• La mayoría de las aplicaciones comerciales utilizan ventanas, botones, íconos,
etc.
• Es posible separar un código que realiza operaciones muy complejas con su
interfaz hacia el usuario.
• Permite integrar elementos propios del sistema operativo.

El desarrollo de lenguajes visuales de programación implicará que los codificadores


pierdan su hegemonía en el desarrollo de software, lo cual es sano si se toma en cuenta
que tener un experto en la sintaxis de un lenguaje y en el uso de herramientas de
desarrollo, dista mucho de que sea capaz de resolver problemas mediante el uso de
recursos de cómputo y sistemas informáticos. Así que los programadores mejoran su
efectividad y productividad con herramientas que les permitan mejorar la proyección de
sus modelos mentales y soluciones a problemas dados.
Vale la pena responder por adelantado a la pregunta de muchos programadores: "¿me
sirven los conocimientos que ya tengo o hay que empezar de nuevo?". Manejar lenguajes
visuales implica para empezar, conocer la sintaxis del lenguaje (esto es una constante),
pero a partir de este punto los beneficios son muchos:
• Se cuenta con una herramienta de integración de componentes robusta
• La representación de los módulos, subsistemas y sistemas es comprensible para
todos los miembros del equipo
• Las mini especificaciones de diseño se fusionan con la implementación
• dependiendo de la herramienta es posible reusar componentes de plataformas
disponibles en el mercado
• El aprendizaje de técnicas de programación es más rápido y claro
Dentro de este paradigma, Visual Basic proporciona un amplio y sofisticado conjuntos
de herramientas para simplificar el desarrollo rápido de aplicaciones RAD (rapid
application development). La técnica empleada se refiere a un conjunto de herramientas
que permiten crear una Interfaz Gráfica de Usuario (GUI – Graphical User Interface). En
lugar de escribir numerosas líneas de código para describir la apariencia y ubicación de
los elementos de la interfaz (como en los ambientes basados en texto), el usuario
simplemente agrega objetos predefinidos a un formulario base de diseño. En nuestro caso,
utilizaremos esta IDE de Microsoft por su sencillez de uso y tamaño reducido.
Identificaremos una serie de elementos esenciales para el trabajo con las GUI’s.
Bibliografía

Jack [Link] myth of code-centricity.


David Canfield Smith. “Pygmalion: A Creative Programming Environment''.
Nan C. [Link] Nostrand Reinhold, 1988. Visual Programming.
Eugenio Jacobo Hernández Valdelamar & Humberto Manuel Uribe León. El
paradigma de la programación visual.
Tecnicatura Superior en Análisis de Sistemas

PROGRAMACIÓN VISUAL

Tema 2- Visual Basic (VB 2008)

Visual Basic es un lenguaje visual que desciende del lenguaje de programación BASIC.
Fue desarrollado por Microsoft, su primera versión fue presentada en 1991 con la
intención de simplificar la programación utilizando un ambiente de desarrollo
completamente gráfico que facilitara la creación de interfaces gráficas y en cierta
medida también la programación misma.
El término “Visual” hace referencia a que nos movemos en un entorno gráfico e
intuitivo. “Basic” alude al conocido lenguaje BASIC (Beginners All – Purpose Simbolic
Instruction Code) del que se conservan diversas palabras claves e instrucciones. Aparte
de esto, poco tiene que ver el Visual Basic con el antiguo lenguaje de programación ya
que casi todo ha cambiado, y muy especialmente la forma de estructurar los programas.

Características generales

Es un lenguaje simple pensado para programadores inexpertos, guiado por eventos, y


centrado en un motor de formularios poderoso que facilita el rápido desarrollo de
aplicaciones gráficas. Su sintaxis, derivada del antiguo BASIC, ha sido ampliada con el
tiempo al agregarse las características típicas de los lenguajes estructurados
[Link] varias bibliotecas para manejo de bases de datos. Es utilizado
principalmente para aplicaciones de gestión de empresas, debido a la rapidez con la que
puede hacerse un programa que utilice una base de datos sencilla, además de la cantidad
importante de programadores en este lenguaje.
El compilador de Microsoft genera ejecutables que requieren una DLL para que sus
ejecutables funcionen, en algunos casos llamada [Link] (acrónimo de
"MicroSoft Visual Basic Virtual Machine x.y", siendo x.y la versión) y en otros
[Link] ("Visual Basic Runtime [Link]"), que provee todas las funciones
implementadas en el lenguaje. Además existen un gran número de bibliotecas (DLL)
que facilitan el acceso a muchas funciones del sistema operativo y la integración con
otras aplicaciones.

Algunas de las ventajas que posee son:

• Visual Basic es un lenguaje simple y por tanto fácil de aprender.


• Su mayor facilidad radica en el diseño de formularios, mediante el arrastre de
controles.
• La sintaxis está cercana al lenguaje humano.
• Las ramas de Visual Basic X ha muerto. Microsoft ha comenzado con su versión
.NET, completamente diferente del Visual Basic original. Visual Basic .NET compila
hacia el mismo código final que C#. Visual Basic .NET es mucho más potente y alberga
muchas más funcionalidades que ésta versión.
• Es un lenguaje RAD, centrado en conseguir en el menor tiempo posible los resultados
deseados, por eso mismo su mayor uso está en las pequeñas aplicaciones, como gestión
de bares, empresas, restaurantes...
• Tiene una ligera implementación de POO
• Permite el tratamiento de mensajes de Windows.
• Gran parte del trabajo en el diseño de formularios está realizado, gracias a la gran
gama de controles incorporados junto al lenguaje que ahorran costes de tiempo de
desarrollo.
• Permite crear controles personalizados fácilmente del mismo modo que el diseño de
formularios.

Algunos de sus inconvenientes son los siguientes:

• Es propietario de Microsoft, por tanto nadie que no sea del equipo de desarrollo de
esta compañía decide la evolución del lenguaje.
• Sólo existe un compilador & IDE, llamado igual que el lenguaje.
• Sólo genera ejecutables para Windows.
• Sólo permite el uso de funciones de librerías dinámicas (DLL) stdcall.
• Para que los ejecutables que genera funcionen necesita una DLL llamada
[Link]: Microsoft Visual Basic Virtual Machine x.y (version). Provee todas
las funciones y características implementadas en el lenguaje.
• El tratamiento de mensajes de Windows es básico e indirecto.

Extensiones

• Su derivado VBScript es el lenguaje predeterminado para Active Server Pages (ASP).


• Además, una extensión propia del lenguaje llamada Visual Basic for Applications
(VBA) permite codificar módulos (a veces llamados macros) para las aplicaciones de
Microsoft Office.
• Especialmente a partir de la versión 6 del lenguaje, se permite la interacción y
generación de objetos remotos que puedan ser invocados desde páginas de scripts
(concretamente las ASP, aunque no es imposible hacer un enlace empleando JSP),
alojándolos en servidores de web.
• Visual Basic .NET, parte de .NET, es un lenguaje prácticamente equivalente en
funcionalidades a C# (por ejemplo, no admite pseudo-punteros), añadiendo la capacidad
de POO que sus anteriores versiones (como Visual Basic 6) no poseían: Herencia,
polimorfismo, etc.

Programación orientada a objetos y dirigida por eventos

La programación orientada a objetos (POO) es una filosofía y metodología de


programación que se popularizó en la década de los 90 desplazando a la programación
estructurada tradicional, no para eliminarla o dejarla obsoleta, sino para construir sobre
ella. Por lo tanto nos centraremos en aspectos fundamentales de la programación sin
entrar a estudiar la programación orientada a objetos.
Todas las versiones de Visual Basic hacen uso de un entorno gráfico de objetos y en
este sentido sí debemos tener unas pequeñas nociones sobre qué es un objeto. Un objeto
es la combinación de código y datos. Un módulo (paquete de código) se ejecutará en
base a que está asociado a un objeto y no de forma libre. A efectos prácticos, veremos
los objetos como elementos prefabricados a los que dotamos de sentido. Supongamos
que somos fabricantes de naves prefabricadas. Montamos la nave (objeto), la dotamos
de personal y maquinaria con una, dos o tres líneas de proceso (código) y damos
instrucciones precisas sobre qué se debe hacer cuando se transmitan determinados
mensajes a la nave (p. ej. “fabricar pan”), en función del contenido o existencias de la
nave (datos).
La forma de pensar varia respecto a la programación tradicional. En primer lugar, no
tenemos que construir la nave, puesto que disponemos de ella prefabricada. No vamos a
generar instrucciones sobre lo que debe pasar, sino sobre lo que hay que hacer en
función de los mensajes que se reciban. Por último, los datos no van a viajar libres, sino
que van a estar vinculados a objetos portadores de datos.
En todas las versiones de Visual Basic también resulta de gran importancia el concepto
de evento. Un evento es “algo que sucede” como que el usuario haga click con el ratón
sobre un botón, o que pulse una tecla, o que transcurra un determinado periodo de
tiempo, etc. Debido a la importancia que tienen los eventos en la programación con
Visual Basic suele decirse que se trata de “programación guiada por eventos”.

¿Qué versión de Visual Basic usaremos?

Usaremos para el cursado de esta materia Visual Basic 2008 ya que nos centraremos en
comprender cómo se aplican los fundamentos de la programación y la lógica de la
programación que en los detalles del lenguaje.
En resumen, los lenguajes evolucionan de forma constante, pero detrás de los aparentes
cambios casi siempre se encuentra el mismo “fondo”. Nos vamos a centrar en estudiar
ese fondo para adquirir la lógica de la programación.

Desde la página [Link] en la sección descargas podrán


bajar la versión de Visual que utilizaremos (VB 2008) para comenzar a trabajar.

Entorno de Desarrollo

Este entorno es personalizable y contiene todas las herramientas necesarias para


construir programas para Microsoft Windows. Contiene múltiples ventanas y múltiples
funcionalidades y es por consecuencia llamado un entorno de desarrollo integrado
(integrated development environment- IDE).
La ventana central es la ventana de diseño (Designer Window), la cual contiene el
formulario a desarrollar.
La caja de herramientas (ToolBox) se localiza de lado izquierdo. En el extremo derecho
tenemos la ventana de explorador de soluciones (Solution Explorer).
La ventana de propiedades (Properties window) contiene tres partes:
1. La parte superior contiene un combo box que muestra el nombre y la clase del
objeto seleccionado.
2. La parte media contiene la lista de propiedades del objeto seleccionado, de lado
derecho contiene un conjunto de cajas para ver y editar el valor de la propiedad
seleccionada.
3. La parte inferior es un cuadro descriptivo que proporciona una breve
descripción de la propiedad seleccionada.
Para iniciar un nuevo proyecto, de clic en la opción Projects y clic en el botón New
Project, esta acción abre una ventana donde se indicará el archivo a abrir, los proyectos
tienen la extensión .vb Una vez que abre el proyecto si la página de inicio estaba visible
continuará así y en el Explorador de Soluciones (Solution Explorer) se cargan los
archivos correspondientes al proyecto.

Configurar Visual Basic

Para configurar el Visual como, por ejemplo cambiar el tipo, tamaño o color de la letra
de las instrucciones que escribe o el color del texto de cada comentario, etc., debemos
elegir la opción Herramienta/Opciones. Podremos visualizar una ventana con las
siguientes secciones:
En la primera ventana se debe seleccionar el elemento de Visual Basic que desea
configurar.
En la segunda ventana se
muestran los datos que
puede configurar del
elemento seleccionado.

La siguiente sección se
muestra cuando elegimos
el elemento
Entorno/General donde,
por ejemplo podemos
indicar que se muestre o
no la barra de estado.
La barra de estado indica si el Visual Basic está listo para trabajar o está realizando
algún proceso, el número de fila y columna donde se encuentra el cursor dentro de un
programa en la ventana de código y si el teclado está en el modo insert.

Si deseamos modificar el
tipo de letra y los colores
que utiliza el Visual Basic,
debemos elegir de la
primera sección la opción
Entorno/Fuentes y colores.
Se visualiza la siguiente
sección:

En la opción proyectos y soluciones/General se indica la carpeta donde se grabarán en


forma predeterminada los proyectos que desarrolle, así como las plantillas que usemos.
Al elegir está opción se visualiza la siguiente sección:

La opción Proyectos y
soluciones/Valores
predeterminados de
Visual permite configurar
los valore en On u OFF
para:
Option Explicit
Permite indicar si es obligatorio o no declarar a las variables que utilizamos dentro de
un programa. Cuando está configurado para que se declaren las variables, estas se
visualizan subrayadas cuando no las declaramos. Si pasamos el puntero del mouse por
la variable, se muestra u n texto explicativo. Al ejecutar el programa se mostrará un
mensaje de error.

Option Strict
Permite configurar el Visual para que controle la conversación de datos. Cuando está en
On no permite conversaciones donde se pierdan datos. Por ejemplo, en una instrucción
donde se declara una variable N para almacenar valores enteros pero se le está
asignando un valor decimal, por lo que se muestra subrayada, indicando error.

Option Compare
Permite configurar el Visual para el tipo de comparación de cadenas de caracteres. El
tipo de comparación puede ser Binary o text.
El tipo de comparación binary compara cada carácter por su valor binario que lo
representa. La característica principal de este tipo de comparación es que las letras
mayúsculas son diferentes a las minúsculas.
El tipo de comparación Text compara carácter por carácter. Su característica principal
es que las letras mayúsculas son iguales a las minúsculas.

La opción editor de textos


Basic/Editor permite
configurar la sangría e
interacción, es decir, las
líneas de instrucciones
que escribimos, por
ejemplo, podemos activar
para que se enumere cada
línea.

La opción Diseñador de
Windows
Form/Personalización de
IU permite configurar los
controles que están asociados a cada uno de los tipos de datos de visual Basic.
La opción Diseñador de Windows Form/General permite configurar el formulario. Por
ejemplo, puede asignar el valor true a la opción ShowGrid para que en los formularios
se muestren con líneas en el modo de diseño.
Bibliografía

Microsoft Visual Basic 2008 Express Edition: Build a Program Now.


David Canfield Smith. “Pygmalion: A Creative Programming Environment''.
Nan C. [Link] Nostrand Reinhold, 1988. Visual Programming.
Tecnicatura Superior en Análisis de Sistemas

PROGRAMACIÓN VISUAL

Tema 3 - Proyectos en VB 2008

Un proyecto es una agrupación lógica de archivos relacionados, normalmente todos los


archivos requeridos para desarrollar un componente de software. Los archivos se
pueden agrupar dentro de un proyecto para crear proyectos secundarios. Los proyectos
se pueden definir de cualquier manera significativa para el(los) usuario(s) como un
proyecto por versión, o un proyecto por lenguaje, por ejemplo. Como norma general, los
proyectos tienden a organizarse de la misma forma que los directorios. Cada aplicación
que se comienza a desarrollar en VB 2008 es un nuevo proyecto. Un proyecto
comprende entre otras componentes a los formularios. El Formulario se utiliza para
crear la interfaz de usuario que es la parte del programa que realizará la comunicación
entre el usuario y la aplicación cuando ejecutan el programa. Una interfaz de usuario
suele estar formada por una ventana o formulario principal y varios controles, como
botones, campos para la introducción de texto, etc. Los programas de Visual Basic
Express que se ejecutan en el equipo se denominan Aplicaciones de Windows Forms y
la interfaz de usuario se crea mediante los controles de formularios Windows Forms.
El código general compartido por todos los formularios de una aplicación puede ser
dividido en varios módulos, que también se archivan separadamente.
Visual Basic Express permite crear varios tipos de aplicaciones. Esto incluye
aplicaciones de formularios Windows Forms, aplicaciones de Windows Presentation
Foundation, aplicaciones de consola y bibliotecas de clases. Cada aplicación que se crea
está contenida en su propio proyecto, y se proporcionan plantillas de proyecto que le
ayudarán a empezar. Facilita el proceso de desarrollar aplicaciones; en la mayoría de los
casos, el proceso consta de los pasos siguientes:

• Un proyecto contiene todos los archivos necesarios para desarrollar una


aplicación y además almacena información sobre está. A veces, una aplicación
contendrá más de un proyecto, por ejemplo, un proyecto de aplicación para
Windows y uno o varios proyectos de biblioteca de clases. Tal aplicación se
denomina solución, que es sólo otro nombre para un grupo de proyectos.
• Diseñar la interfaz de usuario. Para ello, puede arrastrar distintos controles,
como botones y cuadros de texto, a una superficie de diseño conocida como
formulario. Puede establecer propiedades que definan el aspecto y
comportamiento del formulario y de sus controles.
• Escribir el código. A continuación, tendrá que escribir el código de Visual
Basic Express que define cómo se comportará la aplicación y cómo interactuará
con el usuario. Visual Basic Express facilita la escritura de código con
características como Intellisense, finalización automática y miniprogramas.
• Prueba del código. Siempre deseará probar la aplicación para asegurarse de que
se comporta del modo que esperaba; este proceso se conoce como depuración.
Visual Basic Express dispone de herramientas de depuración que facilitan la
búsqueda y corrección de errores en el código de forma interactiva.
• Distribuya la aplicación. Una vez que la aplicación está completa, puede
instalar el programa final en el equipo o distribuirlo y compartirlo con otros
usuarios. Visual Basic Express utiliza una nueva tecnología conocida como
publicación de ClickOnce, que permite implementar fácilmente una aplicación
con un asistente y proporcionar versiones actualizadas de la aplicación si más
adelante realiza cambios.

Tipos de Proyectos

Podremos crear varios tipos de proyectos utilizando las plantillas disponibles en Visual
Basic. Algunas de ellas son:

• Plantilla de aplicaciones para Windows : Se utiliza con el fin de crear


aplicaciones basadas en Windows que se ejecuten localmente en los equipos de
los usuarios. Puede generar desde una simple herramienta con una única ventana
como la calculadora de Windows, hasta una aplicación completa con varias
ventanas y funciones avanzadas.

• Plantilla de biblioteca de clases: Se usa para crear clases reutilizables o


componentes que se pueden compartir con varios proyectos.

• Plantilla de aplicación de consola: Se utiliza para crear aplicaciones de la línea


de comandos, programas que se ejecutan desde un símbolo del sistema de
Windows y no tienen ninguna interfaz visual.

Programas para el entorno de Windows

Visual Basic 2008 está orientado a la realización de programas para Windows, pudiendo
incorporar todos los elementos de este entrono informático: ventanas, botones, cajas de
diálogo y de texto, botones de opción y de selección, barras de desplazamiento,
gráficos, menús, etc.
Prácticamente todos los elementos de interacción con el usuario de los que dispone
Windows en sus distintas versiones pueden ser programados en Visual Basic 2008 de
un modo muy sencillo. En ocasiones bastan unas pocas operaciones con el mouse y la
introducción a través del teclado de algunas sentencias para disponer de aplicaciones
con todas las características de Windows.

Modo de diseño y modo de ejecución


La aplicación Visual Basic de Microsoft puede trabajar de dos modos distintos: En
modo diseño y en modo de ejecución. En modo diseño el usuario construye
interactivamente la aplicación, colocando controles en el formulario, definiendo sus
propiedades, y desarrollando funciones para gestionar los eventos.
La aplicación se prueba en modo de ejecución. En este caso el usuario actúa sobre el
programa (introduce eventos) y prueba cómo responde el programa. Hay algunas
propiedades de los controles que deben establecerse en modo de diseño, pero muchas
otras pueden cambiarse en tiempo de ejecución desde el programa escrito en Visual
Basic 2008.

Formularios y Controles
Cada uno de los elementos gráficos que pueden formar parte de una aplicación típica de
Windows es un tipo de control: botones, cajas de dialogo y de texto, cajas de selección
desplegables, los botones de selección y de opción, las barras de desplazamiento
horizontales y verticales, los gráficos, los menús, y muchos otros elementos son
controles para Visual. Cada control debe tener un nombre a través del cual se puede
hacer referencia a él en el programa. Visual asigna nombres por defecto a los controles
pero también permite al usuario cambiar los nombres por defecto.
En Visual un formulario es una ventana. Este puede ser considerado como una especie
de contenedor para los controles. Una aplicación puede tener uno o varios formularios
(ventanas), pero un único formulario puede ser suficiente para la creación de una
aplicación sencilla. Los formularios deben también tener un nombre que permita
hacerse referencia a él ó del él.

Propiedades, métodos y eventos


Todos los objetos en el lenguaje de Visual Basic, incluidos los formularios y controles,
tienen sus propias propiedades, métodos y eventos. Las propiedades pueden
considerarse como los atributos de un objeto, los métodos como sus acciones y los
eventos como sus respuestas.
Un objeto como un globo de helio también tiene propiedades, métodos y eventos. Las
propiedades de un globo incluyen atributos visibles como su alto, diámetro y color.
Otras propiedades describen su estado (inflado o desinflado) o atributos que no se ven,
como su edad. Todos los globos tienen estas propiedades, aunque sus valores pueden
diferir de un globo a otro.
Un globo también tiene métodos o acciones conocidas que puede realizar. Tiene un
método para inflarse (llenarlo con helio), un método para desinflarse (expulsar su
contenido) y un método para elevarse (soltarlo). Asimismo, todos los globos pueden
tener estos métodos.
Los globos también tienen respuestas a ciertos eventos externos.
Por ejemplo, un globo responde al evento de ser pinchado desinflándose o al evento de
ser soltado elevándose.
Un globo tiene propiedades (Color, Alto y Diámetro), responde a eventos (Puncture) y
puede ejecutar métodos (Deflate, MakeNoise).
Propiedades
Si pudiera programar un
globo, el código de Visual
Basic Express podría
parecerse al siguiente
"código" que establece las
propiedades de un globo.

[Link] = Red
[Link] = 10
[Link] = True

Observando el orden del código podemos ver que, el objeto (Globo) seguido por la
propiedad (Color) seguida por la asignación del valor (= Rojo). Puede cambiar el color
del globo sustituyendo un valor diferente.
Métodos
Los métodos de un globo se denominan del siguiente modo:

[Link]
[Link]
[Link](5)

El orden es parecido al de una propiedad: el objeto (un nombre), seguido por el método
(un verbo). En el tercer método, hay un elemento adicional, llamado argumento, que
especifica la distancia a que se elevará el globo. Algunos métodos tendrán uno o más
argumentos para describir aún más la acción que se va a realizar.

Eventos

El globo podría responder a un evento de la siguiente manera:


En este caso, el código describe el
comportamiento del globo cuando se produce un
evento Puncture: llama al método MakeNoise con
un argumento "Bang", (el tipo de ruido a realizar),
luego llama al método Deflate. Debido a que el
globo ya no está inflado, la propiedad Inflated se
establece en False.
Si bien, en realidad no puede programar un globo,
puede programar un formulario o control de
Visual Basic. Como programador se debe decidir que propiedades se deben cambiar, los
métodos que se deben invocar o los eventos que se deben responder para lograr la
apariencia y el comportamiento deseados.

Crear el primer Proyecto en Visual Basic

El primer paso para crear un programa de Visual Basic Express es abrir Visual Studio y
crear un proyecto. Esto se hará al crear cualquier programa de Visual Basic.
Para crear un proyecto para el programa:
En el menú Inicio de Windows, elija Microsoft Visual Basic Express. Aparecerá la
pantalla de bienvenida a Visual Basic Express. Ésta es la interfaz para Visual Basic
Express, también conocida como entorno de desarrollo integrado o IDE.

• En el menú Archivo, haga clic en Nuevo


proyecto. Aparece el cuadro de diálogo
Nuevo proyecto. Seleccione Aplicación
para Windows y haga clic en Aceptar.
Se muestra un nuevo formulario en el IDE y se agregan los archivos necesarios para el
proyecto a la ventana Explorador de soluciones. Como es nuestro primer proyecto de
Aplicación para Windows que hemos creado, se denomina por defecto
"WindowsApplication1”. Obviamente podremos cambiar este nombre posteriormente.

Al crear el proyecto, aparece un


formulario (también conocido
como diseñador de formularios)
en el entorno de desarrollo
integrado (IDE). Este
formulario representa una
ventana que se mostrará cuando
se ejecuta el programa. Muchos
programas muestran más de una
ventana, por lo que un proyecto
puede contener múltiples
formularios.

Es el momento de comenzar a generar la interfaz de usuario (la parte visible con la cual
interactúan los usuarios) agregando controles del Cuadro de herramientas al formulario.
El Cuadro de herramientas se encuentra en el lado izquierdo de Visual Studio y consta
de varias fichas, como Datos, Componentes y Todos los formularios Windows Forms.
Dentro de cada ficha hay un conjunto de entradas, que representan controles o
componentes que se pueden agregar a la aplicación. Por ejemplo, la ficha Todos los
formularios Windows Forms tiene entradas denominadas Textbox, Button y Checkbox
que representan los controles que puede agregar a la aplicación arrastrándolos al
formulario.

Agregar controles o componentes a la aplicación

Para agregar controles a nuestra aplicación debemos trabajar


con la barra de herramientas que contiene cada uno de los
elementos que podemos utilizar para generar la interfaz de
nuestro proyecto.
Grabar un proyecto
La forma de grabar un proyecto depende de cómo está configurado el Visual Basic.
Este tipo de configuración se realiza ingresando a la opción Herramientas/Opciones del
menú principal y luego ingresando a Proyectos y soluciones/General.

En la ventana que se visualiza


existe una casilla llamada guardar
nuevo proyecto al crearlo.
Si la casilla indica está desactivada,
el proyecto se grabará sólo después
de crearlo.

El nombre predeterminado de una aplicación es WindowsAplication, lo


reemplazaremos por el nombre que deseemos asignar a nuestra aplicación y luego pulse
la tecla Enter o haga clic en el Botón Aceptar.

Ejecutar y probar un programa

Ahora que el programa está terminado, es hora de ejecutarlo y probarlo. Para programas
complejos, la prueba puede ser un proceso largo y difícil. Para otros mas sencillos, todo
lo que debe hacerse es ejecutarlo.

Para ejecutar el programa:


En el menú Depurar del
IDE de Visual Basic, haga
clic en Iniciar depuración.
Este comando ejecuta el
programa.
Para cerrar el programa, en
el menú Depuración, haga
clic en Detener depuración.
Bibliografía

[Link]
Garay Gaitan [Link] Basic 2008.
Guerreros Montoya Johan. Microsoft Visual Basic 2008 Express Edition.
Guilermo Som.(Adaptación a Word, Marc Salvador. Rev A).
Curso de iniciación a la programación con Visual Basic .NET
Tecnicatura Superior en Análisis de Sistemas

PROGRAMACIÓN VISUAL

Tema 4 - Controles Básicos

Es el momento de comenzar a crear la interfaz de nuestro proyecto, utilizando Microsoft


Visual Basic Express para generar dicha interfaz de usuario (la parte visible con la cual
interactúan los usuarios) agregamos controles del Cuadro de herramientas al formulario.
Como ya vimos dicho cuadro de herramientas se encuentra en el lado izquierdo de
Visual y consta de varias fichas, como Datos, Componentes y Todos los formularios
Windows Forms. Dentro de cada ficha hay un conjunto de entradas, que representan
controles o componentes que se pueden agregar a la aplicación. Por ejemplo, la ficha
Todos los formularios Windows Forms tiene entradas denominadas Textbox, Button y
Checkbox que representan los controles que puede agregar a la aplicación
arrastrándolos al formulario.

Analizaremos algunos de los controles básicos que podrá contener nuestro proyecto:

• Formulario (Form)
El formulario es el objeto principal de cada
aplicación porque aquí se construye la interfaz
del usuario, es decir, la comunicación del usuario
con la aplicación que se desarrolla. El desarrollo
de una aplicación consiste en agregar los
formularios necesarios y asignarles sus
propiedades luego dibujar los controles que cada
uno de ellos necesitan y asignarles también sus
propiedades y finalmente escribir las
instrucciones requeridas por la aplicación.
Cuando se crea una aplicación, en forma
predeterminada se crea un formulario llamado Form1.

Para agregar nuevos formularios a su


aplicación puede elegir la opción
Proyecto/Agregar Windows Forms.

Otra forma de agregar formularios a una aplicación es haciendo clic en el


nombre del proyecto del explorador de soluciones y eligiendo la opción
Agregar/Windows Forms.
Cuando se agrega un nuevo formulario al proyecto,
su nombre se visualiza en el explorador de
soluciones.

Para eliminar un formulario haga


clic derecho en su nombre en el explorador de soluciones y del
menú contextual que se visualiza elija la opción Eliminar.
Al ejecutar el proyecto, se visualiza el primer formulario. Para indicar cual será
el formulario inicial de nuestra aplicación se debe elegir la opción
Herramientas/Propiedades o haciendo clic derecho en el nombre de la aplicación
en el explorador de soluciones y eligiendo Propiedades. La ventana que se
visualiza tiene dos secciones. La primera sección contiene un conjunto de
opciones de las cuales debe elegir Aplicación. En esta sección debe elegir en
Formulario de Inicio el formulario que desea ejecutar primero.

• Control Button

Este control, como en versiones anteriores del Visual


[Link], permite escribir instrucciones, las cuales se
ejecutan normalmente cuando se hace clic en dicho
control.
• Control Tooltip

Permite establecer un texto explicativo para otros


controles cuando el usuario pase el puntero del
mouse por el control. Para poder asignarle a los
controles el texto explicativo, se debe insertar en el
formulario un control ToolTip. Este se ubica en la parte inferior del formulario.
Después de insertar el control ToolTip, en el formulario se agrega
automáticamente la propiedad ToolTip en TooTip1 a los controles que contiene
el formulario.

• Control Label

Permite mostrar mensaje o resultados de algún cálculo


numérico en el formulario.

• Control Text Box

Este control es utilizado para ingresar datos a nuestra


aplicación desde el exterior.

• Control ContextMenuStrip

Permite crear un menú contextual en un


formulario, el cual se podrá enlazar a
cualquier control para que se visualiza
cuando se hace clic derecho.
Cuando se inserta en el formulario o se
selecciona, se muestra la ventana para
escribir las opciones que debe mostrar el
menú contextual. Ubique el cursor en cada
caja donde dice: Escriba aquí y escriba las opciones deseadas. Las propiedades
que se visualizan dependen si se ha seleccionado el control o una de las opciones
del menú.
Convenciones para el nombre de los controles

Es recomendable utilizar convenciones para el nombre de los


controles, es decir, que al momento de dar lectura al código
sea fácil de entender y comprender, por lo que el
establecimiento de convenciones ayuda a identificar qué
control se empleó, por ejemplo, si emplea un control botón
debería siempre utilizar como prefijo la palabra btn después
se completa con un nombre descriptivo acorde a la
funcionalidad que este tendrá. Ej. btnAceptar

Agregar controles a la aplicación

Hacemos clic en el panel Cuadro de herramientas y seleccionamos el control deseado


haciendo clic sobre él y lo agrego al formulario (drag and drop).
Los controles contienen código que define el aspecto que tendrán y las tareas que
pueden realizar.
Por ejemplo, considere el control Button: casi todos los programas tienen un botón
"Aceptar" o un botón "Salir". Si bien podría escribir su propio código para dibujar un
botón en la pantalla, cambiar su apariencia cuando se presione y realizar alguna tarea
cuando se haga clic en él, hacerlo para cada programa se convertirá en un asunto
tedioso. El control Button ya contiene el código necesario para hacer estas tareas, lo que
le ahorra mucho trabajo innecesario.
Como podemos ver, el Cuadro de herramientas contiene numerosos controles y cada
uno de ellos tiene un propósito único. Los controles Panel se pueden utilizar para
contener otros controles, como los que acaba de agregar. Los controles Button se
utilizan generalmente para realizar tareas cuando el usuario hace clic en ellos; por
ejemplo, cerrar el programa. Los controles TextBox se utilizan para escribir texto en
una pantalla a través del teclado. Un control WebBrowser proporciona funciones de
exploración Web integradas similares a Chrome o internet Explorer.
Además de utilizar los controles del Cuadro de herramientas, también puede crear sus
propios controles, los que se conocen como controles de usuario.

Establecer las propiedades de los controles

Al diseñar la interface de usuario de una aplicación Visual Basic, se deben establecer las
propiedades para los controles (objetos) creados.

• Estableciendo Propiedades en Tiempo de Diseño

Algunas propiedades pueden ser establecidas en tiempo de diseño. Para establecer


estas propiedades se emplea la ventana de propiedades. Para acceder a la ventana de
propiedades, oprima el botón secundario del mouse sobre un objeto, y luego haga
clic en Propiedades. También se puede obtener el mismo resultado seleccionado el
objeto y luego presionando F4.
Si selecciona varios objetos a la vez y accede a la ventana de propiedades, sólo se
mostrarán las propiedades que son comunes para todos los controles seleccionados.
Cualquier cambio que se haga a una propiedad será aplicada a todos los controles.
• Estableciendo Propiedades en Tiempo de Ejecución

En tiempo de ejecución, se puede escribir código para establecer u obtener el valor


de una propiedad.
La siguiente línea de código establece a negrita la fuente de un cuadro de texto
llamado txtData.
[Link] = True ' Establece el texto a negrita

Este código establece la propiedad Text del cuadro de texto txtData


[Link] = "Hola mundo" 'Establece el valor del texto

Si se omite el nombre de la propiedad, se establece la propiedad predeterminada del


control. La propiedad predeterminada de un cuadro de texto es la propiedad Text.
La propiedad predeterminada de una etiqueta es la propiedad Caption.
Las siguientes líneas de código establecen las propiedades predeterminadas text
y caption de un cuadro de texto y de una etiqueta.
txtData = "Se establece la propiedad Text del cuadro de texto"
lblData = "Se establece la propiedad Caption de la etiqueta"

• Obteniendo Propiedades en Tiempo de Ejecución

Puede emplear el siguiente código para obtener el valor de una propiedad en tiempo
de ejecución.
Dim sNombre as String
sNombre = [Link]

En el Diseñador de Windows Forms, seleccione el control [Link] ventana


Propiedades ubicada en la esquina inferior derecha del IDE muestra todas las
propiedades para el control Panel denominado Panel1.
En la ventana Propiedades, seleccione la propiedad Dock y, a continuación, haga clic en
la flecha a la derecha. Se mostrará una ventana pequeña de selección de propiedades
con varios cuadros. Haga clic en el cuadro superior en la ventana de selección de
propiedades para establecer la propiedad Dock en Top. El control Panel se expandirá
para rellenar la parte superior del formulario.
En el Diseñador de Windows Forms, seleccione el control WebBrowser. En la ventana
Propiedades, para establecer la propiedad Dock en Fill seleccione la propiedad Dock,
haga clic en la flecha a la derecha y seleccione el cuadro del centro de la ventana de
selección de propiedades.
En el Diseñador de Windows Forms, seleccione el control Button. En la ventana
Propiedades, seleccione la propiedad Text del control Button y reemplacé el contenido
por la palabra Go!. Cambie el tamaño o vuelva a ubicar cualquiera de los controles y
cambie nuevamente el tamaño del formulario según sus preferencias. Ahora podemos
establecer varias propiedades que cambian la apariencia de los controles para la
aplicación.
Una propiedad en Visual Basic Express representa un atributo de un objeto, en este
caso, un control. Por ejemplo, un atributo de un control Button es el texto que muestra.
En este caso, estableceremos la propiedad Text para mostrar "Go!".
Como dijimos las propiedades pueden tomar tipos diferentes de valores además del
texto. Por ejemplo, la propiedad Dock utilizó una ventana de selección de propiedades
para mostrar las opciones disponibles. Otros valores de la propiedad pueden ser
números, una opción que se selecciona de una lista, o una opción true o false.
Si cambiamos el tamaño o la ubicación de un control, es decir establecemos nuevos
valores paras las propiedades Size y Location ya que son las que determinan el tamaño
y la ubicación del control en el formulario. Para comprobar esto, seleccionamos la
propiedad Size en la ventana Propiedades y utilizamos el mouse para cambiar el tamaño
del control. Cuando se suelta el botón del mouse, los nuevos valores de Size se
mostrarán en la ventana Propiedades.
Además de establecer las propiedades en la ventana Propiedades, la mayoría de éstas se
pueden establecer escribiendo un código.

Agregar código de Visual Basic

Código es un término general para todas las sentencias Visual Basic que escribimos en
una aplicación: procedimientos de evento y procedimientos generales. El código en
Visual Basic se escribe en la ventana de Código. El editor de texto es solo un editor
ASCII con colores para diferenciar las palabras claves en el código que escribe.
La ventana de Código se usa para escribir, mostrar y editar el código de su aplicación.
Puede abrir una ventana de código por cada módulo de su aplicación, de modo que
puede fácilmente copiar y pegar entre ellos.
Lista de
Eventos

Lista de
Objetos

Como vimos se utiliza la ventana Propiedades para configurar las propiedades de los
controles en el formulario. También, se agregará el código que controlará las funciones
del programa.
Para agregar el código y la funcionalidad al programa, debemos usar el Event
procedures/Event handler, procedimiento que contiene código que es ejecutado en
respuesta a un evento. Cuando el evento es disparado el código dentro del manejador de
eventos es ejecutado.
Para los manejadores de eventos se utiliza una convención estándar la cual combina el
nombre del objeto seguido de un guion bajo y el nombre del evento.
Cada manejador de eventos provee dos parámetros:
• el primer parámetro llamado sender provee una referencia al objeto que
dispara el evento.
• el segundo parámetro es un objeto cuyo tipo de dato depende del evento que
es manejado.

Ambos parámetros son pasados por valor. Si un parámetro es declarado por


referencia ByRef el parámetro apunta al argumento actual. Por default los argumentos
se pasan por valor ByVal el parámetro es una copia local del argumento.
Las Function procedures, contiene código que el desarrollador crea para realizar una
acción lógica y regresa un valor, el valor que una función envía de regreso al programa
que lo invoco es llamado valor de regreso. Para regresar un valor se utiliza la
sentencia Return.
Mientras que los Sub procedures, contiene código que el desarrollador crea para
realizar una acción lógica.
Por ejemplo, tenemos una aplicación que contiene un formulario cuyo contenido es un
Button. En el Diseñador de Windows Forms, hacemos doble clic en el control Button.
Se abre una nueva ventana, como vimos es el editor de código donde agregamos el
código para el [Link] que cuando se abre el Editor de código, éste ya
contiene algún código con el siguiente aspecto:

Este código es el controlador de eventos, en este caso también denominado


procedimiento Sub. Cualquier código dentro de este procedimiento (entre Sub y End
Sub) se ejecuta cada vez que se haga clic en el botón. También se puede observar que el
cursor se encuentra dentro del procedimiento de evento, de manera que todo lo que se
debe hacer es comenzar a escribir las sentencias necesarias para obtener la tarea
deseada.

Editando el Código

Se debe usar las características de edición de Visual Basic para que así el código sea
más fácil de leer.
1. Sangría
Usamos sangría para diferenciar partes del código como estructuras repetitivas y
condicionales. Para aplicar sangría a una sección de sentencias de un código use
la tecla Tab o el comando Aplicar sangría del menú Edición.
Veamos el siguiente ejemplo:
2. Carácter de Continuación de Línea
El carácter subrayado ( _ ) es el carácter de continuación de línea, y se usa para
dividir una sentencia en múltiples líneas. Esto hace que la sentencia sea más
fácil de leer porque está contenida totalmente dentro de la ventana de código en
lugar de extenderse más allá de sus límites.
El carácter de continuación de línea se coloca luego de un espacio de la
sentencia, como se muestra en el siguiente ejemplo:

3. Comentarios
El añadir documentación y comentarios a su código permite comprender mejor
lo que hace el código. Esto también ayuda a comprender el código si necesita
volver a revisarlo en alguna fecha posterior. Un comentario se inicia con el
carácter apóstrofe (‘), de modo que todo el texto que continúe a este carácter será
ignorado en la ejecución de la aplicación.
Veamos el siguiente ejemplo:

Cuadro de Mensaje y de Entrada

Una de las formas más simples de obtener información para y desde el usuario es
utilizando las funciones MsgBox e InputBox respectivamente.

1. Función MsgBox()
Los cuadros de mensaje ofrecen un modo simple y rápido de consultar a los usuarios
por información simple o para permitirles tomar decisiones sobre el camino que su
programa debe tomar. Podemos usar esta función para mostrar diferentes tipos de
mensaje y botones con los cuales el usuario da una respuesta.

Formato:
MsgBox(prompt [, buttons] [, title ] [, helpfile,
context] )
EL formato de la función MsgBox consta de los
siguientes argumentos:

1. Prompt Requerido. Expresión de cadena que representa el mensaje en el


cuadro de diálogo. La longitud máxima de prompt es de aproximadamente
1024 de caracteres, según el ancho de los caracteres utilizados. Si prompt
consta de más de una línea, puede separarlos utilizando un carácter de
retorno de carro (Chr(13) ) o un carácter de avance de línea (Chr(10) ), o una
combinación de caracteres de retorno de carro - avance de línea (Chr(13 y
Chr(10) ) entre cada línea y la siguiente.
2. Buttons Opcional. Expresión numérica que corresponde a la suma de los
valores que especifican el número y el tipo de los botones que sepretenden
mostrar, el estilo de icono que se va a utilizar, la identidad del botón
predeterminado y la modalidad del cuadro de mensajes. Si se omite este
argumento, el valor predeterminado para buttons es 0.
3. Title Opcional. Expresión de cadena que se muestra en la barra de título del
cuadro de diálogo. Si se omite title, en la barra de título se coloca el nombre
de la aplicación.
4. Helpfile Opcional. Expresión de cadena que identifica el archivo de Ayuda
que se utiliza para proporcionar ayuda interactiva en el cuadro de diálogo. Si
se especifica helpfile, también se debe especificar context.
5. Context Opcional. Expresión numérica que es igual al número de contexto
de Ayuda asignado por el autor al tema de Ayuda correspondiente. Si se
especifica context, también se debe especificar helpfile.

2. Función InputBox ()

Esta función muestra un mensaje en un cuadro de diálogo, espera que el usuario


escriba un texto o haga clic en un botón y devuelve un tipo String con el
contenido del cuadro de texto.

Formato
InputBox( prompt [, title] [, default]
[,xpos] [,ypos] [, helpfile, context] )

El formato de la función InpuBox consta de los siguientes argumentos:

1. Prompt Requerido. Expresión de cadena que se muestra como mensaje en


el cuadro de diálogo. La longitud máxima de prompt es de aproximadamente
de 1024 caracteres, según el ancho de los caracteres utilizados. Si prompt
consta de más de una línea, puede separarlos utilizando un carácter de
retorno de carro (Chr(13)), un carácter de avancede línea (Chr(10)) o una
combinación de los caracteres de retorno de carro – avance de línea (Chr(13)
y (Chr(10)) entre cada línea y la siguiente.
2. Title Opcional. Expresión de cadena que se muestra en la barra de título del
cuadro de diálogo. Si omite title, en la barra de título se coloca el nombre de
la aplicación.
3. Default Opcional. Expresión de cadena que se muestra en el cuadro de texto
como respuesta predeterminada. Si omite default, se muestra el cuadro de
texto vacío.
4. Xpos Opcional. Expresión numérica que especifica, la distancia en sentido
horizontal entre el borde izquierdo del cuadro de diálogo y el borde
izquierdo de la pantalla. Si se omite xpos, el cuadro de diálogo se centra
horizontalmente.
5. Ypos Opcional. Expresión numérica que especifica, la distancia en sentido
horizontal entre el borde izquierdo del cuadro de diálogo y el borde
izquierdo de la pantalla. Si se omite ypos, el cuadro de diálogo se coloca
aproximadamente un tercio de la altura de la pantalla, desde el borde
superior de la misma.
6. Helpfile Opcional. Expresión de cadena que identifica el archivo de Ayuda que
se utilizará para proporcionar ayuda interactiva para el cuadro de diálogo. Si se
especifica helpfile, también deberá especificar context.
7. Context Opcional. Expresión numérica que es el número de contexto de Ayuda
asignado por el autor al tema de Ayuda correspondiente. Si se especifica
context, también deberá especificarse helpfile.
Bibliografía

[Link]
Garay Gaitan [Link] Basic 2008.
Guerreros Montoya Johan. Microsoft Visual Basic 2008 Express Edition.
Guilermo Som.(Adaptación a Word, Marc Salvador. Rev A).
Tecnicatura Superior en Análisis de Sistemas

PROGRAMACIÓN VISUAL

Tema 5 - Variables, Constantes y operadores

Las variables son "nombres" que pueden contener un valor, ya sea de tipo numérico
como de cualquier otro tipo. Estos nombres son convenciones que nosotros usamos
para facilitarnos su uso, ya que para las computadoras, una variable es una dirección de
memoria en la que se guarda un valor o un objeto.
Existen distintos tipos de valores que se pueden asignar a una variable, por ejemplo, se
puede tener un valor numérico o se puede tener un valor de tipo alfanumérico o de
cadena, pero en cualquier caso, la forma de hacerlo siempre es la misma.
Por ejemplo si queremos guardar el número 10 en una variable, haremos algo como
esto:
En este caso i es la variable, mientras que 10 sería una constante, (10
siempre vale 10), la cual se asigna a esa "posición" de memoria a la que
llamamos i, no nos interesa saber dónde se guarda ese valor, lo único
que nos interesa es saber que se guarda en algún lado para en cualquier
ocasión poder volver a usarlo.

Ámbito de las variables


Cuando es declarada una variable también se define su ámbito, el ámbito de una
variable es la región de código en la cual la variable se referencia directamente. Existen
dos tipos de ámbitos de las variables:
• Local, es una variable declarada dentro de un procedimiento y se destruye
cuando el procedimiento termina de ejecutarse.

• Modular, es una variable declarada a nivel módulo fuera de cualquier


procedimiento y son declaradas en la parte superior del Editor de Código arriba
del primer procedimiento, este espacio es llamado Sección de Declaraciones
Generales (General Declaration Section).

Declaración de variables
Es necesario, aunque no obligatorio, declarar las variables según el tipo de datos que va
a almacenar.
Por ejemplo, en el caso anterior, la variable i era de tipo numérico Esta variable habría
que declararla de la siguiente forma: Dim as Integer.
Por lo tanto, todas las variables deberán ser declaradas por la instrucción:

Dim es la abreviatura de Dimensión, que


sirve para reservar espacio para la variable.
La sentencia Dim especifica el nombre de la
variable y su tipo de dato asociado.
Las variables deben tener un nombre único llamado Identificador, los identificadores se
forman siguiendo las siguientes reglas:
• Comenzar con una letra o guion bajo (underscore)
• Deben contener letras, dígitos y guiones bajos.
• No pueden ser palabras reservadas.

Hay varias recomendaciones que hay que tener en cuanto al nombre de las mismas:
✓ El nombre de las variables debería comenzar con una letra.
✓ El nombre de las variables debería distinguir cada nueva palabra escribiendo la
primera letra en mayúscula.
✓ El nombre de las variables debería ser lo suficientemente largo para ser
significativo y lo suficientemente corto para ser manejable.
Además de declarar las variables podremos también inicializarlas en el mismo tiempo
asignándole un valor inicial.
Si no se define un tipo de dato
para la variable, entonces asume el
tipo de dato por default que
es Object.
Es posible declarar variables como se hacía en Visual Basic 6, si emplea la
instrucción Option Explicit Off.

Visual Basic .NET incorpora la instrucción Option Strict si desea que los tipos de datos
en las operaciones sean del mismo tipo y evitar la conversión y perdida de datos.

Tipos de Datos
Como dijimos las variables en Visual Basic pueden almacenar diferentes tipos de datos,
por ejemplo:
• Texto:
1. String de longitud variable
por ejemplo:
Dim sNombreCompleto as String

2. String de longitud fija


por ejemplo:
Dim sNombreCompleto as String * 50

sNombreCompleto contendrá siempre 50 caracteres (los caracteres


faltantes se completan con espacios en blanco)
• Números:
1. Integer
2. Long
3. Single
4. Double
• Boolean
• Otros:
1. Variant
2. Object
3. Currency
4. Date

A diferencia de otros lenguajes como Lenguaje C, algo importante y que es necesario


tenerlo en cuenta es que Visual Basic no requiere especificar explícitamente un tipo de
dato al declarar una variable sólo es necesario declarar la variable de manera genérica y
al ser genérica por default las variables en Visual Basic son de tipo Variant.
Variant, es un tipo de dato que puede almacenar cualquier tipo de valor, incluyendo,
texto, números, objetos y null. Visual Basic determina y convierte los valores Variant.
Una vez que las variables son creadas con la sentencia Dim, Visual Basic
automáticamente inicializa las de tipo numérico con el valor 0 y cadenas de texto o
variant con el valor vacío ("").
Empty
Es un valor especial distinto de 0, para verificar si una variable contiene el
valor Empty deberemos utilizar la función IsEmpty.

Sintaxis de la función Empty:


Por ejemplo, cualquier variable declarada sin
referencia con un tipo de dato asume por default el
tipo de dato Variant y el contenido por default
de Variant es Empty antes de asignarle un valor.

Tipos de Datos Definidos por el Usuario: Structure


Podemos crear nuestros propios tipos de datos, esto es posible a través del empleo de la
instrucción Structure, ejemplo:

Cada variable declarada dentro de la estructura es llamada un “member”.


Para poder definir una estructura vacía escribimos la siguiente declaración:

Constantes
Una constante es almacena un valor que no es posible cambiar durante la ejecución del
programa. Debemos tener en cuenta que su nombre sea escrito en su totalidad en
mayúsculas.
Por ejemplo:

Si desea que la constante esté disponible para todos los formularios y módulos de la
aplicación deberá ser declarada en un módulo y anteponer a su declaración la palabra
reservada Public.
Operadores
Visual Basic .NET dispone de las siguientes categorías de operadores:

• Operadores Matematicos
Las expresiones habitualmente se utilizan para realizar operaciones aritméticas
con variables: suma, resta, multiplicación o división. La tabla siguiente describe
los operadores normalmente utilizados para operaciones aritméticas.

El tipo de variable que se utiliza al realizar la operación aritmética puede afectar


el resultado. La división de dos números a menudo da como resultado un valor
que no es un número entero. Por ejemplo, cuando se divide 3 por 2, el resultado
es 1,5. Si se asigna el valor devuelto de esa expresión a una variable Integer, se
redondeará al número entero más cercano. Al realizar la división, se debe utilizar
una variable Double para almacenar el valor devuelto. La división entre 0 no
está permitida en los cálculos matemáticos ya que produce un resultado infinito,
en la versión Visual Basic 6 hacer esto produce un error de ejecución 11
"División entre 0", pero en Visual Basic .NET se maneja esta situación
automáticamente y muestra un valor de Infinito.

En el siguiente código al comparar resultados vemos que el valor que regresa la


excepción del cálculo matemático entre 0 es Infinito con la primera letra en
mayúscula:
• Operadores String
El operador de concatenación (&) String requiere operadores String y producen
resultados String.

• Operadores comparativos
Los operadores Comparativos requieren operadores Comparativos (>, <,>=, <=,
=, <>) y producen un resultado lógico (True or False).

• Operadores Logicos
Los operadores Lógicos requieren operadores Lógicos (NOT, AND, OR,
XOR) y producen un resultado lógico.

• Operadores abreviados
Visual Basic .NET incorpora nuevos operadores abreviados que facilitan la
escritura de código, por ejemplo:
x = x + 1 'Antes escribía
x += 1 'Ahora puede escribir

Prioridad de los operadores

Tenemos que tener en cuenta que los operadores pueden ser de distintas categorías y
cada una tiene una prioridad de ejecución a la hora de realizar una operación.

• Prioridad de los operadores aritméticos y de concatenación:

Exponenciación (^), Negación (-), Multiplicación y división (*, /) División de


números enteros (\) Módulo aritmético (Mod)

Suma y resta (+, -) Concatenación de cadenas (&)

• Operadores de comparación:

Igualdad (=), Desigualdad (<>), Menor o mayor que (<, >) Mayor o igual que
(>=) Menor o igual que (<=)

• Operadores lógicos:
Negación (Not) Conjunción (And, AndAlso) Disyunción (Or, OrElse, Xor)

Cuando en una misma expresión hay sumas y restas o multiplicación y división, es decir
operadores que tienen un mismo nivel de prioridad, éstos se evalúan de izquierda a
derecha. Cuando queramos alterar este orden de prioridad, deberíamos usar paréntesis,
de forma que primero se evaluarán las expresiones que estén dentro de paréntesis.

Por ejemplo, si tenemos la siguiente expresión:

El resultado será diferente de esta otra:

En el primer caso el resultado será 72, mientras que, en el segundo el resultado será 78,
ya que primero se evalúa lo que está entre paréntesis y el resultado (22) se le resta a
100.

Convertir un tipo de variable en otro

Como hemos visto, hay variables de diferentes tipos. El tipo determina la clase de datos
que puede contener una variable. Una variable de tipo Integer sólo puede contener datos
numéricos sin decimales. Una variable de tipo String sólo puede contener texto.
¿Qué pasa cuándo deseamos mostrar un valor Integer en un control TextBox que
requiere una variable de tipo String? La respuesta es que los datos se deben convertir de
un tipo a otro.
Veremos algunas técnicas utilizadas para la conversión de datos, así como algunos de
sus problemas habituales.
• Convertir variables en texto

Cada variable de Visual Basic Express se puede convertir en texto utilizando una
función especial llamada CStr (que viene de abreviar Convert to String). Esta
función, como el nombre implica, devuelve los datos representados por la
variable como de tipo String. El procedimiento siguiente muestra un ejemplo
sencillo de convertir un valor Integer en texto.

Este código declara una variable de tipo entero llamada


anInteger, le asigna un valor de 54 y, a continuación,
convierte ese valor en texto y lo muestra en un cuadro de
mensaje llamando a la función CStr. Presione F5 para
compilar y ejecutar la aplicación. Aparece un cuadro de
mensaje que indica 54.
Ahora en el Editor de código, cambie la línea que indica
MsgBox(CStr(anInteger)) para que indique
MsgBox(anInteger) y presione F5 para ejecutarla. ¿Qué
pasa? El programa se comporta exactamente como hizo antes. Visual Basic
Express es lo suficientemente inteligente como para saber que lo que desea
realmente es convertir la variable de tipo Integer en texto para que se muestre en
el cuadro de mensaje. Sin embargo, no puede confiar en este comportamiento
para todas las clases: existen muchos tipos de variables que no se pueden
convertir automáticamente. Por consiguiente, es una buena práctica usar siempre
la función CStr, aun cuando una variable se convertiría automáticamente en
texto.
Además de la conversión de variables Integer en texto, se puede utilizar la
función CStr en cualquier tipo de dato numérico, como Double o Long. También
se puede utilizar para convertir la información de Date y tipos de datos Boolean
en texto.

• Conversión entre tipos de datos numéricos

A veces el resultado de una operación aritmética no se puede expresar como


un valor de tipo Integer. Así como Visual Basic Express tiene una función
para convertir los números en texto, también tiene funciones para convertir
las variables de un tipo de datos numéricos en otro. Por ejemplo, puede
utilizar la función CDbl (de Convert to Double) en una operación aritmética
para devolver un número fraccionario al trabajar con variables de tipo
Integer. El procedimiento siguiente muestra cómo utilizar la función CDbl al
dividir dos enteros.

Este código declara dos variables de tipo Integer (A y B), les asigna los
valores 1 y 2 y, a continuación, convierte el
resultado de la operación de división (A / B)
utilizando la función CDbl y lo muestra en un
cuadro de mensaje.
Presione F5 para compilar y ejecutar la aplicación.
Aparece un cuadro de mensaje que indica 0.5.

Visual Basic Express también tiene funciones para


otros tipos de variables numéricas. Por ejemplo, si
agrega dos variables de tipo Double y desea
redondear el resultado al número entero más cercano, se utiliza la función
CInt.
Otras funciones de conversión numéricas son CByte, CDec, CLng y CShort.
Bibliografía

[Link]
Garay Gaitan [Link] Basic 2008.
Guerreros Montoya Johan. Microsoft Visual Basic 2008 Express Edition.
Guilermo Som.(Adaptación a Word, Marc Salvador. Rev A).
Tecnicatura Superior en Análisis de Sistemas

PROGRAMACIÓN VISUAL

Tema 6 - Procedimientos y Funciones.

Un procedimiento es simplemente un fragmento de código que indica al programa que


realice una acción. Por ejemplo, la función MsgBox tiene un procedimiento integrado
que realiza la acción de mostrar un cuadro de diálogo.
Mientras Visual Basic tiene muchos procedimientos integrados para realizar las
acciones comunes, siempre habrá casos en que se desea que el programa realice una
acción que un procedimiento integrado no puede controlar. Por ejemplo, la función
MsgBox no puede mostrar un cuadro de diálogo con una imagen. Debe escribir un
procedimiento para realizar esta tarea.
Un procedimiento se ejecuta llamándolo en el código. Por ejemplo, para ejecutar el
procedimiento MsgBox, simplemente se agrega una línea de código al programa con el
nombre del procedimiento.
Cuando el programa llegue a esa línea, irá al procedimiento MsgBox y ejecutará el
código contenido allí. A continuación, el programa regresa a la siguiente línea que viene
después de la llamada a MsgBox.
Podemos llamar a tantos procedimientos como se necesite. Los procedimientos se
ejecutan en el orden de llamada. Por ejemplo, podríamos tener también un
procedimiento llamado Prueba; para ejecutarlo después de ejecutar el procedimiento
MsgBox, llamamos a los procedimientos como se muestra a continuación.

Funciones y Subs

Existen dos tipos de procedimientos: funciones y subrutinas (llamadas a veces sub).


Una función devuelve un valor al procedimiento que la llamó, mientras que una
subrutina simplemente ejecuta código. Se llama a una subrutina cuando una línea de
código, que contiene el nombre de ésta, se agrega al programa como en el siguiente
ejemplo.

Las funciones son diferentes, porque las funciones no sólo ejecutan códigos, también
devuelven un valor.
Por ejemplo, imagine una función llamada MontoTotal que devuelve un Integer que
indica el monto total de una compra. Se llama a esta función primero mediante la
declaración de una variable para almacenar el valor devuelto y luego se asigna el valor
devuelto a la variable para un uso posterior.

En este ejemplo, el valor devuelto por la función se copia a la


variable denominada Monto y se almacena para un uso
posterior.
Escribir procedimientos

Los procedimientos se escriben colocando primero una declaración de procedimiento.


Una declaración de procedimiento realiza varias acciones:
• Indica si el procedimiento es una función o una subrutina,
• Denomina el procedimiento
• detalla todos los parámetros que puede tener (los parámetros se analizarán en
detalle más adelante en esta lección).
A continuación, se ofrece un ejemplo de una declaración de procedimiento sencilla.

La palabra clave “Sub” indica al programa que este


procedimiento es una subrutina y no devolverá un valor. El
nombre de la subrutina (MiPrimerSub) viene a continuación y
el paréntesis vacío indica que no hay parámetros para este procedimiento. Finalmente,
la palabra clave “End Sub” indica el fin de la subrutina. Todos los códigos que tiene
que ejecutar esta subrutina van entre estas dos líneas.
Declarar funciones es similar, pero, además, se debe especificar el tipo de valor
devuelto (como, por ejemplo: Integer, String, etc.).
Por ejemplo, una función que devolvió un valor Integer puede ser similar a la siguiente:
Las palabras clave As Integer indican que la función
devolverá un valor Integer. Para devolver un valor
desde una función, debemos utilizar la palabra clave
Return.

Parámetros en funciones y subrutinas

A veces se debe proporcionar información adicional a los procedimientos. Por ejemplo,


en el procedimiento DiaSemana, se desea mostrar uno de los días de la semana. La
información acerca de qué día mostrar se puede proporcionar utilizando los parámetros.
Los parámetros se parecen mucho a las variables. Tienen un tipo y un nombre y
almacenan información al igual que las variables. Se pueden utilizar como variables en
un procedimiento. Las dos diferencias principales entre los parámetros y las variables
son:
• Los parámetros se declaran en la declaración de procedimiento, no en líneas
individuales de código.
• Sólo se pueden utilizar los parámetros en el procedimiento en el que se declaran.
Los parámetros se declaran en la declaración de procedimiento, en los paréntesis que
siguen al nombre del procedimiento. La palabra clave As
se utiliza para declarar el tipo y la palabra clave ByVal
precede generalmente a cada parámetro. Visual Basic
agregará automáticamente esta palabra clave si no se
agrega.
Llamamos a la subrutina con un valor para su parámetro:

Visual Basic contiene varias funciones predefinidas que podemos utilizar para realizar
nuestros programas, están agrupadas en categorías.
Tales como:
• Funciones de fecha.
• Funciones numéricas.
• Funciones de texto.

Funciones de Fecha: Algunas de las funciones para trabajar con fechas son las
siguientes:

• Now: Esta función devuelve la fecha y hora del sistema. El formato en el que se
visualiza la fecha y hora depende de la configuración que tiene la computadora.
• TimeString: Esta función devuelve sólo la hora del sistema como una cadena de
caracteres.
• DateString: Esta función devuelve sólo la fecha del sistema como una cadena de
caracteres.
• ToDate: Esta función devuelve también la fecha del sistema.
• Hour: Esta función devuelve sólo el número de la hora del sistema.
• Minute: Esta función devuelve sólo los minutos de la hora del sistema.
• Seconds: Esta función devuelve sólo los segundos de la hora del sistema.
• Day: Esta función devuelve sólo el número del día de la fecha del sistema.
• Month: Esta función devuelve sólo el número del mes de la fecha del sistema.
• MonthName: Esta función devuelve el nombre del número del mes de una fecha.
• Year: Esta función devuelve sólo el año de la fecha del sistema.
• WeekDay: Esta función devuelve un número entre 1 y 7 que representa el
número del día de la semana.
• WeekDayName: Esta función devuelve el nombre del número del día de la
semana.
• IsDate: Esta función devuelve el valor True si un valor es de tipo Fecha.

Vemos un ejemplo: Este programa permite


ingresar una fecha y mostrar por separado
toda su información. Además, verifica que
se ingrese una fecha correcta.
-Instrucciones del evento Load del formulario

-Instrucciones del botón Ver

• DateDiff: Esta función devuelve la diferencia entre dos fechas. Su sintaxis es:

La Fecha1 es la fecha menor y la Fecha2


es la fecha mayor. Si se intercambian las
fechas el resultado es un número negativo.
El intervalo es el tiempo en el cual se va a calcular la diferencia entre las dos
fechas y puede tener cualquiera de los siguientes valores:

• DateAdd: Esta función permite incrementar o disminuir un intervalo de tiempo a


una fecha. Su sintaxis es:
El número es el valor que se le va a incrementar o
disminuir a la fecha. Si el valor
es negativo se disminuye a la fecha.
Funciones numéricas: Algunas de las funciones para trabajar con números son las
siguientes:

• Fix: Esta función devuelve sólo la parte entera de un número. Si el número es


negativo, esta función devuelve el primer número entero negativo mayor o igual
que el número. Su sintaxis es:

• Int: Esta función devuelve sólo la parte entera de un número. Si el número es


negativo, esta función devuelve el primer número entero negativo menor o igual
que el número. Su sintaxis es:

• IsNumeric: Esta función permite saber si un dato es numérico. Si el dato es


numérico devuelve True de lo contrario devuelve False. Su sintaxis es:

• Val: Esta función convierte un valor a tipo numérico. Su sintaxis es:

• Sqrt: Esta función permite obtener la raíz cuadrada de un número. Su sintaxis es:

• Max: Esta función devuelve el número mayor de dos números que se pasan
como parámetros. Su sintaxis es:

• Min: Esta función devuelve el número menor de dos números que se pasan
como parámetros. Su sintaxis es:

• Pow: esta función devuelve la potencia de un número. Su sintaxis es:

• Round: Esta función permite redondear un número. Si el valor decimal es mayor


a 0.5 se redondea al entero mayor más próximo. Su sintaxis es:
Funciones de texto: Algunas de las funciones para trabajar con texto son las siguientes:

• Len: Esta función devuelve la cantidad de caracteres que tiene una cadena
incluyendo los espacios en blanco. Su sintaxis es:

• Left: Esta función devuelve una cantidad de caracteres de una cadena


empezando por la izquierda. Para evitar confusiones con propiedades Left de
otros objetos, se debe utilizar su espacio de nombre:
N es la cantidad de caracteres que se desea
obtener de la cadena.

• Right: Esta función devuelve una cantidad de caracteres de una cadena


empezando por la derecha. Su sintaxis es:

• Mid: Esta función devuelve una cantidad de caracteres de una cadena a partir de
una determinada posición.
Su sintaxis es:
P es la posición de la cadena a partir
de la cual se desean obtener los
caracteres. N es la cantidad de caracteres que se desea obtener de la cadena.
Las variables tipo String tienen un método llamado SubString que obtiene el
mismo resultado de la función Mid, con la diferencia que el primer elemento es
el cero (0). Se le debe dar como parámetros la posición inicial y la cantidad de
caracteres.

• Ucase: Esta función convierte un texto a mayúsculas. Su sintaxis es:

Si no existe ninguna propiedad o


método que se llama UCase se puede
escribir directamente el nombre de la función. También se puede utilizar el
método ToUpper de las variables String.

• LCase: Esta función convierte un texto a minúsculas. Su sintaxis es:


También se puede utilizar el método
ToLower de las variables String.

• StrConv: Esta función convierte un texto a caracteres de otra región o


minúsculas, mayúsculas o sólo la primera letra de cada palabra a Mayúsculas.
Su sintaxis es:
El tipo representa la conversión que desea realizar al
texto y se pueden utilizar las siguientes opciones:

Las opciones que se pueden utilizar para la


configuración de nuestra región son:

• [Link]: Convierte el texto a


minúsculas.
• [Link]: Convierte el texto a sólo la primera letra de cada
palabra a mayúsculas.
• [Link]: Convierte el texto a mayúsculas.

• Trim: Esta función quita los espacios en blanco que se encuentran a la izquierda
o derecha de una cadena. Su sintaxis es:

Las variables String tienen también método con el mismo nombre y cumple la
misma función.
• InStr: Esta función devuelve la posición inicial de una subcadena dentro de una
cadena. La subcadena se empieza a buscar por la izquierda de la cadena. Su
sintaxis es:

• InStrRev: Esta función devuelve la posición inicial de una subcadena dentro de


una cadena. La subcadena se empieza a buscar por la derecha de la cadena. Su
sintaxis es:

Donde I es un valor opcional


que indica la posición de la cadena a partir de la cual se desea realizar la
búsqueda.

• Str: Esta función convierte un valor a tipo String Su sintaxis es:

• Chr: Esta función devuelve el carácter de un valor que se envía como parámetro.
Su sintaxis es:

• Remove: Es un método de las variables String que permiten eliminar una


subcadena de una cadena. Se le debe indicar la posición inicial y la cantidad de
caracteres que se desea eliminar. La primera posición e cero (0).
Bibliografía

[Link]
Garay Gaitan [Link] Basic 2008.
Guerreros Montoya Johan. Microsoft Visual Basic 2008 Express Edition.
Tecnicatura Superior en Análisis de Sistemas

PROGRAMACIÓN VISUAL

Tema 7 - Estructuras de Control

Las estructuras de control permiten controlar el flujo de ejecución de un programa.


Tenemos dos tipos de estructuras de control:
• Estructuras de decisión.
• Estructuras de repetición.

Estructuras de decisión

Los procedimientos de VB pueden probar condiciones y, dependiendo de los resultados,


realizar diferentes operaciones. Entre las estructuras de decisión que acepta VB se
incluyen las siguientes:
1. IF…THEN
2. IF…THEN…ELSE
3. SELECT CASE

If… Then

Usa la estructura If...Then para ejecutar una o más instrucciones basadas en una
condición. Puede utilizar la sintaxis de una línea o un bloque de varias líneas:

Condición normalmente es una comparación, pero


puede ser cualquier expresión que dé como
resultado True o False; Si condición es True,
Visual Basic ejecuta todas las sentencias que
siguen a la palabra clave Then. Puede utilizar
sintaxis de una línea o de varias líneas para
ejecutar una sentencia basada en una condición.
El formato de una única línea de
If...Then no utiliza la instrucción
End If. Si se desea ejecutar más de
una línea de código cuando la
condición sea True, debe utilizar la
sintaxis de bloque de varias
líneas If...Then...End If.

If...Then...Else

Utilice un bloque If...Then...Else para definir varios bloques de sentencias, uno de los
cuales se ejecutará:

Visual Basic evalúa primero condición1. Si es


False, procede a evaluar condición2 y así
sucesivamente, hasta que encuentre una condición
True. Cuando encuentra una condición True, se
ejecuta el bloque de instrucciones correspondientes
y después ejecuta el código que sigue a End If.
Opcionalmente, se puede incluir un bloque de
instrucciones Else, que Visual ejecutará sin ninguna
de las condiciones es True.
If...Then...ElseIf es un caso especial de
If...Then...Else. Observe que puede tener cualquier
número de cláusula ElseIf o ninguna. Puede incluir
una cláusula Else sin tener en cuenta si tiene o no cláusula ElseIf.

Por ejemplo, la aplicación podría realizar distintas acciones dependiendo de la


evaluación de una expresión:
Observe que siempre puede agregar más cláusulas ElseIf a la estructura If...Then. Sin
embargo, esta sintaxis puede resultar tediosa de escribir cuando cada ElseIf compara la
misma expresión con un valor distinto. Para estas situaciones, puede utilizar la
estructura de decisión “Select Case”.

Select Case

Se proporciona esta estructura como alternativa de la estructura IF…THEN…ELSE


para ejecutar selectivamente un bloque de sentencias entre varios bloques. La sentencia
Select Case ofrece posibilidades similares a la instrucción If…Then…Else, pero hace
que el código sea más legible cuando hay varias opciones. La estructura Select Case
funciona con una única expresión de prueba que se evalúa una vez solamente, al
principio de la estructura. Visual compara el resultado de esta expresión con los valores
de cada Case de la estructura. Si hay una coincidencia, ejecuta el bloque de sentencias
asociado a ese Case:

Cada lista_expresiones es una lista de uno a más


valores. Si hay más de un valor en una lista, se
separan los valores con comas. Cada bloque de
sentencias contiene cero o más instrucciones. Si
más de un Case coincide con la expresión de
prueba, sólo se ejecutará el bloque de
instrucciones asociado con la primera
coincidencia. Visual Basic ejecuta las
instrucciones de la cláusula (opcional) Case Else
si ningún valor de la lista de expresiones
coincide con la expresión de prueba.
Por ejemplo, suponga que agrega otro comando al menú Edición en el ejemplo
If...Then...Else. Podría agregar otra cláusula ElseIf o podría escribir la función con
Select Case:
Observe que la estructura Select Case evalúa una expresión cada vez al principio de la
estructura. Por el contrario, la estructura If...Then...Else puede evaluar una expresión
diferente en cada sentencia ElseIf. Sólo puede sustituir una esructura If...Then...Else con
una estructura Select Case si la intrucción If y cada instrucción ElseIf evalúa la misma
expresión.
Estructura de repetición

Las computadoras están diseñadas especialmente para aquellas aplicaciones en las


cuales una operación o conjunto de ellas deben de repetirse varias veces. A las
estructuras que repiten una secuencia de instrucciones un número determinado de veces
se les denomina bucles y se llama iteración al acto de repetir la ejecución de una
secuencia de acciones.
En estas estructuras el conjunto de instrucciones que forman parte del bucle se repite
mientras se cumple una determinada condición.

Las estructuras de repetición que utiliza VB son:

• Do …Loop
• While…End while
• For… Next

Do…Loop

La construcción Do...Loop le permite probar una condición al comienzo o al final de


una estructura de bucle. También puede especificar si repite el bucle mientras la
condición sigue siendo True o hasta que se convierta en True.
Las instrucciones Do...While y Do...Until permiten repetir un bloque de código
mientras cierta condición sea verdadera o hasta que cierta condición sea verdadera.
Por ejemplo, si se disponía de un programa para agregar una serie de números,pero
nunca deseó que la suma de los números fuera mayor que 100. Se podría utilizar la
instrucción Do...While para llevar a cabo la suma de la siguiente forma:
En el codigo, la línea Do While evalúa la variable sum para ver si es menor que 100; si
lo es, se ejecuta la siguiente línea de código; si
no lo es, se desplaza a la línea siguiente del
código a continuación de Loop. La palabra
clave Loop le dice al código que regrese a la
línea DoWhile y evalúe el nuevo valor de sum.
Ejemplo:
En una aplicación tenemos un boton y una caja de texto. En el evento clic del botón
ingresamos el siguiente código de manera tal que al ejecutarlo nos mostrará un mensaje
indicando el número de veces que se realizó el bucle.

Do…until

La instrucción Do...While repite un bucle mientras una condición permanece verdadera,


pero a veces es posible que desee que el código se repita a sí mismo hasta que una
condición se convierta verdadera. Puede utilizar la instrucción Do...Until del siguiente
modo.

Este código es similar al código para la instrucción


Do...While, sólo que esta vez, el código evalúa la
variable sum para ver si es igual a o mayor que 100.

Ejemplo:
En una aplicación tenemos un botón y una caja de texto. En el evento clic del botón
ingresamos el siguiente código de manera tal que podamos repetir un número
deteminado de veces una línea en pantalla. Lo que deseamos es sumar un valor hasta
que que supere el valor 100 y nos mostrará en pantalla el número de veces en que se
llevo a cabo el bucle.

While…End while

La construcción While...End While ejecuta un conjunto de instrucciones mientras la


condición especificada en la instrucción While sea verdadera.
Si la condición es verdadera, se ejecutan todas las sentencias hasta que se encuentra la
instrucción End While, el control se devuelve al While entonces la condición se
comprueba de nuevo. Si la condición aún es verdadera, se repite el proceso. Si es falsa,
el control pasa a la sentencia que sigue al End While.
La estructura While comprueba siempre la condición antes de iniciar el bucle. La
ejecución en bucle continúa mientras el resultado de la condición sea verdadera. Si la
condición es Falsa no se ejecuta el bucle ni una vez.
Se pueden anidar bucles While colocando un bucle dentro de otro. También puede
anidar distintos tipos de estructuras de control dentro de otras.
En el ejemplo siguiente, las
instrucciones del bucle continúan
ejecutándose hasta que la variable
index es superior a 10.

For…Next

Cuando escribimos un programa, a veces debemos repetir las acciones con frecuencia.
Por ejemplo, supongamos que estámos escribiendo un método que muestra una serie de
números en pantalla. Deseariamos repetir la línea de código que muestra el número las
veces que sea necesario.
El bucle For...Next permite especificar un número y repetir un código contenido dentro
de ese bucle para el número específico de veces.
El siguiente ejemplo muestra cómo aparece un bucle For...Next en un código.
El bucle comienza con una variable contador, i.
Ésta es una variable que utiliza el bucle para contar
la cantidad de veces que se ha ejecutado. La
siguiente le dice al programa cuántas veces se debe
repetir el bucle y los valores i que va a tener.
Cuando el código entra en el bucle For...Next, se
inicia con i que contiene el primer valor, en este caso 1. El programa ejecuta las líneas
de código entre la línea For y la línea Next, en este caso llamando al método
DisplayNumber con el argumento i.
Cuando se alcanza la línea Next, se agrega 1 a i y la ejecución de programa regresa
nuevamente a la línea For. Esto se repite hasta que el valor de i es mayor que el segundo
número en la línea For, en este caso 10. Cuando esto sucede, el programa continúa con
cualquier código después de la línea Next.
Ejemplo:
En una aplicación tenemos un botón y una caja de texto. En el evento clic del botón
ingresamos el siguiente
código de manera tal que
podamos repetir un
número deteminado de
veces una línea en
pantalla. El número de
repeticiones lo ingresaremos por teclado usando el componente textbox. Notemos que
tendremos que hacer una conversión de datos ya que el componente textbox siempre
nos devolvera un string(cadena) y nosotros necesitamos un número entero que nos sirve
como contador de la instrucción For.
Bibliografía

Garay Gaitan [Link] Basic 2008.


Guerreros Montoya Johan. Microsoft Visual Basic 2008 Express Edition.
[Link]
Tecnicatura Superior en Análisis de Sistemas
PROGRAMACIÓN III
Tema 8 - Manejo de Errores

Al escribir un programa, se pueden producir y se producirán errores. Es posible


que se cometa un error tipográfico, el programa se puede comportar no como
lo esperaba o no se puede ejecutar en lo absoluto. Cuando hay un error en el
programa, debe encontrarlo y corregirlo, el proceso de encontrar y corregir los
errores se denomina depuración.

Encontrar errores

No importa lo cuidadoso que seamos al diseñar un programa o cuando se


escriba el código, siempre pueden aparecer errores. En ocasiones los errores
impedirán que se inicie el programa, unas veces harán que el programa deje
de ejecutarse o se bloquee y otras se ejecutará pero no ofrecerá los resultados
esperados. Y, por supuesto, cuando los errores aparecen, queremos
encontrarlos y corregirlos. Los errores de un programa se conocen
normalmente como errores, y el proceso de encontrarlos y corregirlos se
denomina depurar.
El proceso de depuración es iterativo; es decir, se repetirá una y otra vez. Por
lo general, escribe código, ejecuta el programa hasta que aparece un error,
encuentra el error, lo corrige y, a continuación, ejecuta el programa de nuevo.
En la mayoría de los casos, no necesitamos detener el programa para
corregirlo. Podemos corregir el código donde apareció el error y seguir
ejecutando el programa desde allí; este proceso se llama Editar y continuar.
La depuración se realiza en el IDE (entorno de desarrollo integrado) de Visual
Basic, que contiene varios comandos y ventanas especiales para ayudar a
encontrar los errores.
Para utilizar el proceso de editar y
continuar: En el controlador del evento
Form_Load del formulario escribir el
siguiente código:
En este ejemplo hay una excepción. Las excepciones son objetos que se crean
(y producen) cuando el programa detecta un error. Se crean distintos tipos de
excepciones, dependiendo del tipo de error generado. Con los valores
predeterminados del usuario, si se produce una excepción cuando se ejecuta el
programa de Visual Basic, aparecerá un cuadro de diálogo que describe el
error y ayuda a corregirlo. Presionando F5 para ejecutar el programa, esté se
detendrá y se mostrará un cuadro de diálogo de excepciones con el mensaje
siguiente: "No se controló InvalidCastException".
La excepción ha ocurrido porque hay un error tipográfico en el código. Se
utilizó la variable equivocada: debería ser number, Integer, no numbers, que es
una variable String.
Observemos que el programa todavía está en ejecución; está en el modo de
interrupción de depuración. Con Editar y continuar, podemos corregir el error
sin tener que detener el programa (ni volver a ejecutarlo para comprobarlo).
En el Editor de código, cambiar “numbers + 1” por “number + 1”. Presionamos
F5 para continuar. Debe aparecer un cuadro de mensaje con el número 2.

Control de errores
Incluso los programas mejor diseñados a veces encuentran errores. Algunos
errores son defectos en el código que se pueden encontrar y corregir. Otros
errores son una consecuencia natural del programa. Por ejemplo: el programa
puede intentar abrir un archivo que ya está en uso. En casos así, los errores se
pueden predecir, pero no evitar.
Como desarrollador, se deben predecir estos errores y ayudar a que el
programa los solucione.

Tipos de errores de programación


Incluso los programadores más experimentados cometen errores; y conocer
cómo depurar una aplicación y encontrar esos errores es una parte importante
de la programación. No obstante, antes de obtener información sobre el
proceso de depuración, conviene conocer los tipos de errores que deberá
buscar y corregir.
Los errores de programación pertenecen a tres categorías:
 Errores de compilación.
 Errores en tiempo de ejecución
 Errores lógicos.

Errores de compilación
Los errores de compilación, también conocidos como errores del compilador,
son errores que impiden que su programa se ejecute. Cuando se presiona F5
para ejecutar un programa, Visual Basic Express compila el código en un
lenguaje binario que entiende el equipo. Si el compilador de Visual Basic
Express se encuentra con código que no entiende, emite un error de
compilador.
La mayoría de los errores del compilador se deben a errores cometidos al
escribir el código. Por ejemplo, puede escribir mal una palabra clave, omitir
alguna puntuación necesaria o intentar utilizar una instrucción “End If” sin antes
utilizar una instrucción “If”.
Por suerte el editor de código fue diseñado para identificar estos errores antes
de que se intente ejecutar el programa.

Error ortográfico: encontrar y eliminar errores del compilador


Como vimos, los errores del compilador aparecen cuando el compilador de
Visual Basic Express se encuentra con código irreconocible, generalmente
porque se cometió algún error al escribir. Dado que los errores del compilador
impiden que se ejecute un programa, deberá encontrarlos y corregirlos, o
depurarlos, antes de ejecutar el programa.
Encontrar los errores del compilador es bastante fácil, ya que el programa no
se ejecuta hasta que se han corregido. Cuando presionamos F5, si hay algún
error del compilador, aparecerá un cuadro de diálogo que indica "Errores al
generar. ¿Desea continuar?". Si selecciona Sí, se ejecutará la última versión
sin errores del programa; si selecciona No, el programa se detendrá y
aparecerá la ventana Lista de errores.
La ventana Lista de errores muestra toda la información sobre el error, incluida
su descripción y ubicación en el código. Si hace doble clic en el error en la Lista
de errores, se resaltará la línea incorrecta del código en el Editor de código.
También puede presionar F1 para mostrar Ayuda y obtener más información
sobre el error y cómo corregirlo. También puede ayudar a encontrar y corregir
los errores del compilador antes incluso de que se intente ejecutar el programa.
Mediante una característica llamada IntelliSense, se observa el código a
medida que se escribe y si encuentra código que producirá un error del
compilador, lo subraya con una línea ondulada de color azul. Si mantiene
presionado el mouse sobre esa línea, se muestra un mensaje que describe el
error. Si la ventana Lista de errores está visible, también mostrará los mensajes
de error.

Errores en tiempo de ejecución


Un error que se produce mientras un programa se está ejecutando se llama
error en tiempo de ejecución. Los errores en tiempo de ejecución se producen
cuando un programa trata de hacer algo para lo cual no fue diseñado.
Por ejemplo, si el programa intenta realizar una operación no válida, como
convertir una cadena no numérica en un valor numérico, se producirá un error
en tiempo de ejecución.
Cuando se produce un error en tiempo de ejecución, el programa produce una
excepción, que soluciona los errores buscando código dentro del programa
para tratar el error. Si no se encuentra tal código, se detiene el programa y se
tiene que reiniciar. Dado que esto puede conducir a la pérdida de datos, se
debería crear el código de control de errores dondequiera que se tenga
previsto que se produzcan errores.

Encontrar y corregir errores en tiempo de ejecución


La mayoría de los errores en tiempo de ejecución se producen porque se
cometió un error en el código; por ejemplo, olvidó asignar un valor a una
variable antes de utilizarla. Cuando se ejecute el programa y se descubra el
error, el programa se detendrá y el cuadro de diálogo Ayudante de excepciones
se mostrará en la ventana Editor de código. Cuando esto sucede, el programa
está en modo de interrupción, que es el modo en que se realiza la depuración.
El cuadro de diálogo Ayudante de excepciones contiene una descripción del
error, así como sugerencias para la solución de problemas que indican la
causa. Podemos hacer clic en las sugerencias sobre solución de problemas
para mostrar los temas de Ayuda y obtener más detalles.
Es necesario corregir el error para que pueda continuar con el programa; para
ello, debemos inspeccionar el código para encontrar la causa del error. Por
ejemplo, si sospecha que se produjo un error porque una variable contiene el
valor equivocado, estando todavía en el modo de interrupción, puede utilizar
IntelliSense para ver el valor de la variable. Cuando se coloca el mouse sobre
la variable en el Editor de código, la información sobre herramientas muestra el
valor de la variable. Si el valor no es lo que esperaba, compruebe en el código
anterior dónde se estableció el valor y después arreglamos el código y
continuamos con la ejecución del programa.
En el ejemplo, podemos ver el siguiente código en el controlador de eventos
load del formulario

Al ejecutar el programa tendremos lo siguiente:

Aparece un cuadro de diálogo Ayudante de excepciones con el mensaje "No se


controló OverflowException". Una línea de puntos que va del cuadro de diálogo
a su archivo de código señala la línea de código que produjo el error.
Debemos observar que la primera sugerencia sobre solución de problemas del
Ayudante de excepciones indica que debe asegurarse de no estar dividiendo
por cero. Movemos el mouse sobre la variable miles y lo mantenemos ahí
durante unos segundos. La información sobre herramientas que veremos dice
"miles 55". Ahora movemos el mouse sobre la variable hours; la información
sobre herramientas debe decir "hours 0".
Debido a que no se puede dividir por cero y el valor de hours es cero, ya ha
encontrado la causa del error: no haber actualizado el valor de hours.
Agregue una línea de código que nos permita actualizar el valor de la variable
hours para que sea distinto de 0, por ejemplo “hours =2”. Haga clic en la flecha
amarilla situada en el margen izquierdo del código y arrástrela hasta la línea
“hours = 2”. Esto permite que el programa continúe desde esa línea en lugar
de continuar desde la línea que contiene el error. Para que se reconozca la
solución del error es necesario ejecutar la nueva línea de código recién
agregada. Presionemos F5 para que el programa continúe. Aparece un cuadro
de diálogo que muestra "28 miles per hour".

Comprobar código en la ventana Inmediato


Se puede evaluar y ejecutar un código utilizando la ventana Inmediato. Antes
vimos cómo corregir errores en tiempo de ejecución utilizando el Ayudante de
excepciones. Sin embargo, a veces es posible que no esté claro cómo corregir
un error y se desee probar una posible corrección sin cambiar el código. Una
ventana de depuración especial, la ventana Inmediato, permite hacer eso y
más.
Cuando el programa está en modo de interrupción, se puede utilizar la ventana
Inmediato para ejecutar fragmentos de código o evaluar variables y
expresiones. Por ejemplo, si aparece un error en tiempo de ejecución debido a
una variable vacía, se puede comprobar el valor de la variable. Utilizamos
también la ventana Inmediato para asignar un valor a esa variable y comprobar
cómo se ejecuta el resto del programa.
Para ejecutar el código en la Ventana Inmediato lo escribimos como lo
haríamos en el Editor de código y presionamos ENTER. Para evaluar una
variable o expresión, escribimos un signo de interrogación seguido por la
variable o expresión que desea evaluar y presionamos ENTER, el resultado se
mostrará en la siguiente línea.
Ingresamos el siguiente código en el controlador clic de un componente Button:

Presionamos F5 para ejecutar el programa. Ingresamos


100 en el primer cuadro de texto y, a continuación,
ingresamos 0 en el segundo cuadro de texto. Hacemos
clic en Button1. El programa se detendrá y aparecerá el
cuadro de diálogo Ayudante de excepciones con el
mensaje "No se controló OverflowException".
En la ventana Inmediato en la parte inferior del IDE, escribimos:
“?miles” y presionamos ENTER.
El valor 100 debe aparecer en la línea siguiente.

Escribimos:
“?hours” y presionamos ENTER.
El valor 0 debe aparecer en la línea siguiente.
Ahora escribimos “hours = 4” y presionamos ENTER
Observemos que el valor de hours es ahora 4, el valor que especificó en la
línea anterior. Podemos cambiar el valor de hours en la ventana Inmediato sin
cambiar el código del programa.

Presionamos F5 para continuar. Se mostrará un cuadro de mensaje con el


resultado.

El bloque Try...Catch...Finally.
Se puede utilizar este bloque para controlar errores en tiempo de ejecución en
el código. Puede utilizar “Try” para un segmento de código; si ese código
produce una excepción, salta al bloque “Catch” y se ejecuta el código del
bloque Catch. Después de que ese código ha finalizado, se ejecuta cualquier
código en el bloque “Finally”. La instrucción “End Try” cierra el bloque completo.

Primero, se ejecuta el código del


bloqueTry. Si se ejecuta sin
error, el programa omite el
bloque Catch y ejecuta el código
del bloque Finally. Si se produce un error en el bloque Try, la ejecución salta
inmediatamente al bloque Catch y se ejecuta el código que se encuentra allí;
luego se ejecuta el código del bloque Finally.
Veamos la siguiente aplicación que contiene un cuadro de texto y un botón, se
debe escribir un valor numérico y hacer clic en el botón.
Aparece un cuadro de mensaje
que muestra el número que
hemos ingresado, seguido por
una invitación para volver a
intentarlo. A continuación,
ingresemos un valor no
numérico en el cuadro de texto,
como una palabra y luego
hacemos clic en el botón. Esta
vez, cuando el programa intente
convertir el texto del cuadro de
texto en un número, no podrá hacerlo y se producirá un error. En lugar de
finalizar el código en el bloque Try, se ejecuta el bloque Catch y aparece un
cuadro de mensaje solicitando que se escriba un número. Se ejecuta el bloque
Finally y se le invita a intentarlo de nuevo.

Errores lógicos
Los errores lógicos son errores que impiden que un programa haga lo que
estaba previsto. Su código puede compilarse y ejecutarse sin errores, pero el
resultado de una operación puede generar un resultado no esperado. Con
estos errores no se obtiene ninguna advertencia, se ejecutará el programa pero
proporcionará resultados incorrectos. Es necesario investigar el código y
determinar la razón del problema.
Por ejemplo, puede tener una variable llamada “Nombre”, establecida
inicialmente en una cadena vacía. Después en el programa, podemos tener
que concatenar “Nombre” con otra variable denominada “Apellido” para mostrar
un nombre completo. Si no se asigna un valor a “Nombre”, sólo se mostrará el
“Apellido”, no el nombre completo como se desea.
Los errores lógicos son los más difíciles de detectar y corregir, pero Visual
Basic también dispone de herramientas de depuración que facilitan el trabajo.
Las técnicas de depuración, que establecen puntos de interrupción e
instrucciones paso a paso a través del código, permiten inspeccionar el código
línea por línea mientras se ejecuta para encontrar el error.
Se puede establecer un punto de interrupción en el Editor de código para
cualquier línea ejecutable de código. Cuando se ejecuta el programa, los
puntos de interrupción fuerzan a que se detenga y entonces el programa entra
en el modo de interrupción cuando llega a esa línea de código. Podremos
obtener la información que se desee sobre el estado del programa en ese
momento. Se puede verificar el valor de cualquier variable, comprobar
expresiones en la ventana Inmediato o realizar cambios en el código con Editar
y continuar.
Cuando está en modo de interrupción, puede recorrer el código, ejecutando
línea por línea para ver cómo funciona. Al presionar la tecla F8, se ejecutará la
línea de código actual y se detendrá en la línea siguiente. Podremos
inspeccionar los valores de variables para ver cómo cambian de una línea a la
siguiente.
Si la línea de código actual llama a una función o procedimiento Sub en otra
parte del código, cuando presiona F8, la ejecución se desplazará a ese
procedimiento. Una vez que se haya ejecutado ese procedimiento, el programa
volverá a la línea siguiente a la que llamó al procedimiento. Si no desea
recorrer un procedimiento, puede presionar MAYÚS+F8 para saltarlo.
Veamos el siguiente programa que calcula las millas por hora dividiendo el
número de millas recorridas por el número de horas que demoró un viaje. En
este ejemplo usamos un componente button y dos textbox. Agregamos el
código siguiente en el controlador clic del botón. Además definimos una función
que recibirá dos argumentos de tipo Double y devuelve un valor del tipo String.
Esta función devuelve el resultado de la división, convirtiendo el resultado en
un tipo String. Para ellos usamos la Función de Visual CStr

Presionamos F5 para ejecutar


el programa. En el primer
cuadro de texto, ingresamos 10
(para representar 10 minutos) y
en el segundo cuadro de texto,
ingresamos 5 (para representar
las millas) y, a continuación,
haga clic en Button1.
Aparecerá un cuadro con el
mensaje "Average speed
0.0333333" (velocidad media
0,0333333); no obstante, si
recorre 5 millas en diez
minutos, la respuesta
correcta serían 30 mph.

En el último ejemplo, algo está obviamente mal con la lógica del programa.
Según el resultado, viaja menos de una milla por hora, no treinta millas por
hora como espera, pero ¿dónde está el error? En el siguiente procedimiento se
establecerá un punto de interrupción y se examinará el código para encontrar
el error.

Establecer Punto de interrupción

Para establecer un punto de interrupción y recorrer el código, en el Editor de


código, buscamos la línea hours = minutes / 60 y hacemos clic en el margen
izquierdo. Aparecerá un punto rojo en el margen y el código resaltado en rojo,
lo que representa un punto de interrupción.

Presionamos F5 para ejecutar el programa nuevamente. En el primer cuadro


de texto, ingresamos 10 y en el segundo cuadro de texto, ingresamos 5.
Hacemos clic en Button1.
El programa se detendrá cuando llegue al punto de interrupción. En la línea
hours = minutes / 60 aparecerá resaltada en amarillo. Inspeccione los valores
de las variables manteniendo el mouse sobre ellos; el valor de hours debe ser
0 y el valor de minutes debe ser 10.

Presionamos F8 para ejecutar la línea hours = minutes / 60 y pasar a la


siguiente línea. Inspeccionamos los valores de las variables de la línea
MsgBox("Average speed " & GetMPH(hours, miles)), el valor de hours debe ser
ahora 0.166666672 y el valor de miles debe ser 5.0. Presionamos F8 de nuevo
para ejecutar la línea actual.
Se observa que la ejecución baja a la línea Function GetMPH. Inspeccionando
los valores de las variables en esta línea; observará que el valor de miles es
ahora 0.166666672 y el de hours es 5.0, lo contrario de lo que eran en la línea
anterior. Se ha encontrado el error.

Corregir errores lógicos


En el último procedimiento, los valores para las variables miles y hours
cambiaron de lugar. ¿Se puede identificar la causa?
Si examina la línea:
 MsgBox("Average speed " & GetMPH(hours, miles)), veremos que a la
función GetMPH se le pasan dos argumentos, “hours” y “miles”, en ese
orden.
Si examina la declaración de función
Function GetMPH(ByVal miles As Double, ByVal hours As Double)...,
vemos que los argumentos se muestran como miles primero y como
hours después.
Se produjo un error en la lógica porque los argumentos se pasaron en el orden
equivocado, produciendo un cálculo incorrecto. Si los argumentos hubieran
sido de tipos diferentes, habría visto un error en tiempo de ejecución, pero
como los argumentos eran del mismo tipo, no se produjo el error. Fue un error
simple, pero el error resultante fue difícil de encontrar.
Para corregir el error lógico: en el Editor de código, cambiamos la línea
MsgBox("Average speed " & GetMPH(hours, miles)), para que se lea de
la siguiente manera:
MsgBox("Average speed " & GetMPH(miles, hours))
Hacemos clic en el punto rojo en el margen izquierdo para borrar el punto de
Interrupción. Presionamos F5 para ejecutar el programa. En el primer cuadro
de texto, escribimos 10 y en el segundo cuadro de texto, escribimos 5. A
continuación, hacemos clic en Button1. Esta vez el cuadro de mensaje debe
mostrar el resultado correcto,
"Average speed 30" (velocidad media 30).
Bibliografía

Garay Gaitan [Link] Basic 2008.


Guerreros Montoya Johan. Microsoft Visual Basic 2008 Express Edition.
[Link]
[Link]
Tecnicatura Superior en Análisis de Sistemas

PROGRAMACIÓN VISUAL

Tema 9 - Controles Estándar Adicionales

En este tipo de Programación orientada a lo visual, la importancia del diseño de la


Interface con el Usuario aumenta; el programa es lo que se muestra y la funcionalidad
debe reflejarse en el diseño. Veremos otros controles adicionales que nos permitira
agregar mayor funcionalidad a nuestro programa de manera fácil y rápida.

Contenedores
Son objetos que permiten contener a otros objetos, con la finalidad de darle mayor
funcionalidad a la interfaz. Para agrupar controles, se debe dibujar primero el control
contenedor y, a continuación, dibujar los controles dentro del [Link] controles que
necesariamente deben estar agrupados dentro de un contenedor, por ejemplo el control
de opciones.

Algunas Propiedades comunes de estos controles son:


• Caption: Título del Control.
• Enabled: Determina si está habilitado para
responder a las acciones del usuario.
• Name: Nombre del control.
• Visible: Determina si el control y los
controles que contiene están visibles o no.

Controles RadioButton y CheckBox

La clase base de estos dos controles, al igual que el de la clase Button es ButtonBase.
• El control RadioButton o botón de opción se utiliza cuando se pretende elegir
una única opción entre varias. La opción seleccionada tendrá un punto en el
centro. Un buen ejemplo lo constituye un formulario en que el usuario debe
elegir, una opción de pago. Un RadioButton sólo puede tener dos estados:
seleccionado o no seleccionado. Los controles RadioButton deben ser
mutuamente excluyentes entre sí. Esto se consigue haciendo que pertenezcan a
una misma unidad “lógica” por medio de un control GroupBox, o bien, si
únicamente es una unidad, el formulario que los contiene los agrupa.
Para hacer esto, se ubica en primer lugar
en el formulario el control GroupBox y
posteriormente, se van colocando en su
interior los controles RadioButton que
deban estar ligados entre sí. Si no se hace
de esta manera, pueden elegirse varias
opciones RadioButton de manera
simultánea, es decir, no serán excluyentes
entre sí.
• Un CheckBox o casilla de verificación
permite elegir varias opciones que no sean
mutuamente excluyentes. Cuando el
usuario selecciona una opción (activa la
casilla), aparece una marca de verificación (a
) dentro de la [Link] buen ejemplo, es un
formulario en el que se pregunte acerca de
los idiomas que se habla.
A diferencia de un RadioButton, este control puede tener tres estado:
seleccionado, no seleccionado e inhabilitado, que es un estado en el cual el
control se dibuja en gris y no tiene ningún efecto hacer click sobre él.

Propiedades y eventos más importantes de estos controles:


• Propiedades
1. Appearance: Define la apariencia del control, bien con apariencia estándar o
bien con apariencia de un botón en 3D.
2. AutoCheck: Hace que el control cambie de estado siempre que se haga click
sobre él.
3. Checked: Indica si el control está en estado seleccionado o no.
4. CheckState: Indica el estado de selección del control. Sólo para el
CheckBox. Puede ser Unchecked, Checked o Indeterminate. En este último,
el control se dibuja en gris.
5. ThreeState:(Sólo CheckBox) Propiedad booleana. A False no se permite el
estado Indeterminate. A True, se permiten los tres estados.
• Eventos
Los eventos más utilizados – por supuesto que también son eventos de estos
controles todos los que se derivan de la clase Control- son los siguientes:
1. CheckedChanged: Ocurre cuando cambia la propiedad Checked. Es el
evento por defecto.
2. Click: Ocurre al realizar un click de ratón sobre el control.
3. CheckedStateChanged: Ocurre cuando cambia la propiedad CheckedState
(Sólo CheckBox).

Controles ListBox y CheckedListBox

Vemos estos dos controles juntos porque su funcionalidad es muy parecida y, por lo
tanto, coinciden muchas de sus propiedades y eventos.
• Un control ListBox permite presentar una lista de
elementos que el usuario puede seleccionar pulsando
con el mouse o con el teclado. Tiene dos modos de
selección: simple o múltiple. El modo selección se
define en la propiedad SelectionMode. Puede también
tener una o varias columnas -propiedad MultiColumn.

Las propiedades Items, SelectedItems y


SelectedIndices dan acceso a las tres colecciones que
controlan la información de un ListBox, que son las
siguientes:
1. [Link]: Es la colección que contiene todos los
elementos del control ListBox.
2. [Link]: Es la colección que contiene todos los
elementos seleccionados del control ListBox.
3. [Link]: Es la colección que contiene todos los
índices de los elementos seleccionados.

• Un control CheckedListBox es una lista que


tiene un control CheckedBox en la parte
izquierda de cada elemento, indicando si está
seleccionado o no.
Se diferencia del control ListBox porque cada
uno de sus elementos se muestran
acompañados de una casilla de verificación, es
decir, con un control CheckedBox para que el
usuario los pueda seleccionar.

Propiedades y eventos más importantes de estos controles:


• Propiedades
1. Items: Es la colección que contiene todos los items o elementos de la lista.
Esta propiedad se utiliza para añadir, insertar o eliminar elementos de la
lista, por medio de los métodos Add, Insert, Remove, etc. En tiempo de
diseño tiene un editor de la colección, para añadir, insertar o eliminar los
elementos que estarán presente es al comienzo de la ejecución de la
aplicación.
2. SelectedIndex: Es un valor entero que indica el índice del elemento
seleccionado. Si su valor es –1, no hay ningún elemento seleccionado.
3. SelectedItem: Es el item o elemento seleccionado en la lista.
4. SelectedIndices: Devuelve una colección con una lista de índices de los
elementos de la lista seleccionados.
5. SelectedItems: Devuelve una lista de los elementos o items seleccionados.
6. SelectionMode Indica el modo de selección de la lista. Tiene cuatro
posibles valores:
None: No se puede seleccionar ningún item.
One: Sólo es posible seleccionar un elemento.
MultipleSimple: se pueden seleccionar varios ítems de manera
simultánea.
MultiExtended: Igual que la anterior, pero el usuario puede utilizar
las teclas CTRL, SHIFT y las flechas para hacer sus selecciones.
7. MultiColumn: Define el número de columnas de la lista.
8. ColumnWidth: En una lista de varias columnas, esta propiedad define el
ancho de ellas.
9. Sorted: Propiedad booleana que indica si la lista está ordenada por orden
alfabético.

Además de estas propiedades, el control CheckListBox tiene otras cuatro importantes


propiedades que se explican a continuación.

1. CheckedIndices: Es una colección que contiene los elementos de la lista que


están en estado Checked o Indeterminate.
2. CheckedItems: Es la colección de los elementos de la lista que están en estado
Checked o Indeterminate.
3. CheckedOnClick: Propiedad booleana que indica si un item cambiará de estado
cuando el usuario pulse con el ratón en él.
4. ThreeDCheckBoxes: Indica si la apariencia del control es 3D

• Métodos

Hay varios métodos muy interesantes a la hora de trabajar con estos controles.

1. ClearSelected():Anula la selección de la lista.


2. FindString(string str): Busca la primera cadena de la lista que comience con el
string especificado.
3. FindStringExact(string str): Busca la primera cadena que coincida con la cadena
especificada.
4. GetSelected(int n): Devuelve un valor booleano indicando si el item n está
seleccionado.
5. SetSelected(int n, bool b): Selecciona o anula la selección del elemento de índice
n dependiendo del valor booleano pasado, b.
6. GetItemChecked(int n): Devuelve un valor booleano indicando si el item n está
o no seleccionado. (Sólo CheckListBox)
7. GetItemCheckState(int n):Devuelve un valor indicando el estado del item n.
(Sólo CheckListBox).

Eventos
Además del resto de los eventos que heredan de la clase Control, estas clases tienen dos
eventos específicos:
1. ItemCheck: Ocurre cuando cambia el índice del elemento seleccionado.
2. SelectIndexChanged: Ocurre cuando cambia el estado de uno de los elementos
de la lista. Es el evento por defecto.

Ejemplo: trabajando con el control


ListBox.

La aplicación debe realizar las


siguientes tareas:
1. Añadir los nombres de países escritos
en las cajas de texto situados en la parte
inferior de los ListBox al pulsar los
botones Agregar respectivamente.
2. Si se selecciona una ciudad en el
ListBox de la izquierda y se pulsa el
botón “>” o “<” dicho elemento pasará
de una lista a otra.
3. Si se pulsa “>>” o “<<” pasan todos
los elementos a la otra lista.
[Link] doble clic en una lista, pasa
el elemento que se ha pulsado a la otra lista.
[Link] el botón “Salir”, concluye la
aplicación.
• El botón Agregar debe:
Recoger el texto en la propiedad Text de la caja texto y añadirlo a la lista
correspondiente con el método Add de Items.
Borrar el texto de la caja de texto.
Devolver el foco a la caja de texto.
El código correspondiente es:

• El botón “>” debe:

Recoger el elemento seleccionado en el ListBox1 con la propiedad


SelectedItem y se añade al ListBox2 con el método Add de Items. Luego se
borra el elemento seleccionado, con el método Remove de Items()
El código correspondiente es:

• El botón “>>” debe:


Recoger todos los elementos de la ListBox1 y los añade al ListBox2, con la
propiedad Add de Items.
Se borran todos los elementos del ListBox1 con el método Clear de Items.

Evento doble-click en listBox1:


El código será el mismo que el del botón “>”, así que
en lugar de escribirlo de nuevo, se selecciona el
evento doble-click del ListBox1 y se selecciona el
evento de nombre botón “>”.
Para cerrar la aplicación, basta incluir el código siguiente del btnCerrar:
[Link]();

Resta el código de los demás botones que es similar a lo realizado.

Ejemplo trabajando con el control CheckedListBox

La aplicación debe realizar las


siguientes tareas:
1. Añadir los nombres de los
días del fin de semana en
en el Listado de días.
2. Debe insertar un elemento
dado una posición.
3. Limpiar el listado para
que quede sin elementos.
4. Eliminar un elemento
seleccionado.
5. Mostrar los elementos del
listado en cada momento.
6. Pulsando el botón “Salir, concluye la aplicación.
• El botón Agregar debe:

Agrega elementos al listado utilizando la propiedad de Add de Items.

• El botón Insertar debe:


Insertar un elemento en la lista, pero dada una posición, para ello se utiliza la
propiedad Insert de Ítems.

• El botón limpiar debe:

Vaciar la lista completamente utilizando la propiedad Clear de Ítems.

• El botón Eliminar debe:


Eliminar un elemento seleccionado de la lista para ello utilizamos la propiedad
SelectedItem del control CheckedListBox para obtener su posición y así poder
utilizar la propiedad remove de ítems.

• El botón Ver debe:


Mostrar la cantidad de elementos de la lista en cualquier momento. Para ello
usamos la propiedad Count de Items.

Ejemplo Combinando el uso de CheckedListBox y ListBox

Este programa permite activar de un control


CheckedListBox los días de la semana y
pasarlos a un control ListBox.

Colocamos el código dentro del evento click del


botón Pasar, de manera que se realice la tarea
cuando pulamos sobre el.

Primero verificamos que al menos se


selecciones un día de la lista para pasarlo al ListBox. Luego consultamos que elemento
se debe pasar consultando al método GetItemChecked del CheckedListBox que nos
indica si un elemento fue seleccionado, después pasamos el elemento al ListBox
utilizando la propiedad Add de Ítems y por último eliminamos la selección del elemento
en la lista de días utilizando el método SetItemChecked.
Bibliografía

Garay Gaitan [Link] Basic 2008.


Guerreros Montoya Johan. Microsoft Visual Basic 2008 Express Edition.
[Link]
[Link]
Tecnicatura Superior en Análisis de Sistemas

PROGRAMACIÓN VISUAL

Tema 10 - Clases

Como vimos los programas en Visual Basic se generan con objetos como formularios y
controles. Los objetos también pueden representar cosas reales como una persona, un
equipo informático, o incluso algo más abstracto como una cuenta bancaria. En este
punto podemos hablar de clases tal como una representación de un tipo de objeto; está
puede utilizarse para crear múltiples copias del objeto.
Por ejemplo, utilizamos clases cuando arrastramos un control TextBox al formulario ya
que está definido por la clase TextBox especificando su aspecto y sus funciones. Es
decir, se crea una copia exacta, aunque distinta, de la clase que lo define. Puesto que
cada objeto es una "instancia" independiente de una clase, la acción de crear una clase
se denomina creación de instancias.
También se puede crear instancias de un objeto TextBox en su código si utilizamos la
palabra clave New.

Como vimos todos los objetos tienen propiedades que describen sus atributos, métodos
que definen sus acciones y eventos que definen sus respuestas. Igualmente, la clase
que define un objeto tiene sus propias propiedades, métodos y eventos que se pasan a
todas las instancias de esa clase.
Por ejemplo, una clase que representa una cuenta bancaria podría tener propiedades
como númeroCuenta o balaceCuenta, métodos como calculaInteres y eventos como
cambioBalance. Una vez creada la instancia de un objeto de cuenta bancaria, puede
tener acceso a sus propiedades, métodos y eventos de igual manera que si se tratara
de un objeto TextBox.
Algunos métodos de una clase son privados; sólo se tiene acceso a ellos mediante
código dentro de la clase. Por ejemplo, una clase de cuenta bancaria puede tener un
método para calcular un saldo. Lo lógico es permitir que un programa lea ese balance,
pero no que pueda cambiarlo directamente. Podemos ocultar los métodos de una clase
si los declaramos como Private o exponerlos si los declaramos como Public. También
se puede permitir el acceso a una propiedad y a la vez impedir que el programa cambie
su valor declarándolo como ReadOnly. Por ejemplo: El código siguiente muestra cómo
podría ser una clase Cuenta Bancaria.
Una de las mejores razones para utilizar clases es que una vez que ha creado una clase
para cierto tipo de objeto, puede reutilizar esa clase en cualquier proyecto. Por ejemplo,
muchos de los programas que escribimos pueden involucrar personas: un programa de
libreta de direcciones para mantener seguimiento de amigos, un programa de
administrador de contactos para los contactos comerciales o un programa para realizar
un seguimiento de empleados. Aunque los programas pueden ser considerablemente
diferentes, los atributos que se aplican a una persona serían los mismos. Cada persona
tiene nombre, edad, dirección y número de teléfono.

Crear clases
Podemos crear clases de tres maneras:
1. Como parte del código en un módulo de formulario en un proyecto de aplicación
para Windows.
2. Como un módulo de clase separado agregado a un proyecto de aplicación para
Windows.
3. Como un proyecto de bibliotecas de clase independiente.

Un formulario realmente es una clase, marcada por instrucciones Class y End Class y
cualquier código que se haya escrito entre las dos instrucciones es parte de la clase.
Aunque de manera predeterminada un
módulo de formulario contiene sólo
una clase única, puede crear módulos
adicionales agregando código debajo
de la instrucción End Class.

La desventaja de crear clases


de esta manera es que sólo
están disponibles dentro del
proyecto donde se crearon. Si
se desea compartir una clase
con otros proyectos, se debe
ubicar la misma en un módulo
de clase.

Módulos de Clase
Un módulo de clase es un archivo de código separado, que contiene una o más clases.
Como es un archivo independiente, se puede reutilizar en otros proyectos. Los módulos
de clase se pueden crear de dos maneras:
• Como un módulo agregado a un proyecto de aplicación para Windows
• Como un proyecto de bibliotecas de clase independiente.
Se puede agregar un nuevo módulo de clase a un proyecto existente seleccionando
Clase en el cuadro de diálogo Agregar
nuevo elemento, disponible en el menú
Proyecto.
Aparecerá el cuadro de dialogo, donde
podremos seleccionar la clase.

Luego se agregara una nueva


pestaña en nuestro proyecto
indicando el módulo de clase.

También podremos crear un proyecto


de bibliotecas de clase independiente,
para ello al elegir nuevo proyecto
seleccionamos la opción Biblioteca de
clases en el panel de plantillas como se
indica en la siguiente figura.

Se abrirá un nuevo proyecto de


bibliotecas de clase y el Editor de
código mostrará el módulo de
clase [Link]. Cambiamos su
nombre a [Link] en el
explorador de soluciones.

Agregar una Propiedad a una clase


Tenemos una clase Empleado que representa un empleado en una empresa; los
empleados tienen atributos como el Legajo y el nombre, por lo que la clase Empleado
necesita propiedades que representen dichos atributos.
Se pueden agregar propiedades a una clase de dos maneras:
• Como campo o
• Como procedimiento de propiedad.
También puede determinar cómo funciona una propiedad utilizando los modificadores
Public, ReadOnly o WriteOnly.

Campos y procedimientos de propiedad


Los campos son variables públicas dentro de una clase que se pueden establecer o leer
desde fuera de la clase. Resultan de utilidad para propiedades que no se tienen que
validar, por ejemplo, un valor Boolean (True o False). En el caso de la clase Empleado,
se puede tener una propiedad Boolean denominada activo que específica si una
persona está trabaja aún en la empresa. Puesto que hay sólo dos valores posibles, un
campo funciona bien para esta propiedad.
La mayoría de las propiedades, sin embargo, son más complejas; en la mayor parte de
los casos deseará utilizar un procedimiento de propiedad para agregar una propiedad a
una clase. Los procedimientos de propiedad tienen tres partes:
• una declaración de una variable privada para almacenar el valor de la propiedad;
• un procedimiento Get que expone el valor;
• y un procedimiento Set que, como indica su nombre, establece el valor.

Por ejemplo, un procedimiento de propiedad para


una propiedad nombre de la clase Empleado podría
ser como el que sigue:
La primera línea de código declara una variable
String privada, nombreValor que almacenará el valor
de la propiedad. El procedimiento de propiedad en sí
comienza con Public Property y termina con End
Property.
El procedimiento Get contiene el código que se
ejecutará cuando desee leer su valor; por ejemplo, si lee la propiedad
[Link], el código devolverá el valor almacenado en la variable nombreValor.
El procedimiento Set contiene código que se utiliza para asignar un nuevo valor a la
variable nombreEmpleado usando un valor pasado como argumento nom. Por ejemplo,
si escribió el código [Link] = "Juan", el valor String Juan se pasará como
argumento nom; el código del procedimiento Set lo asignará a la variable
nombreEmpleado para su almacenamiento.
Se preguntará por qué complicarse tanto en lugar de utilizar un campo que represente
la propiedad nombre. En el mundo real, hay ciertas reglas para los nombres: por
ejemplo, los nombres normalmente no contienen números. Puede agregar código al
procedimiento Set para comprobar el argumento valor y devolver un error si contiene
números.
En el siguiente procedimiento, se agregará un campo y dos propiedades a la clase
Empleado.
Propiedades de solo lectura
A veces una propiedad se establece una vez y no cambia nunca durante la ejecución
del programa. Por ejemplo, una propiedad que representa un número de legajo de
empleado nunca debe cambiar, de modo que otro programa lo puede leer, pero no se
permitirá que ese programa cambie su valor.
La palabra clave ReadOnly se utiliza para especificar que un valor de propiedad se
puede leer pero no modificar. Si intenta asignar un valor a una propiedad ReadOnly,
aparecerá un error en el Editor de código.
Para crear una propiedad de sólo lectura, deberá crearse un procedimiento de
propiedad con un procedimiento Get, pero sin procedimiento Set, tal como se muestra
a continuación.

De igual forma, la palabra clave WriteOnly permite establecer un valor de propiedad


pero no permite que se lea; por ejemplo, no permite que otros programas puedan leer
una propiedad de contraseña. Se puede utilizar ese valor para realizar acciones dentro
de la clase, pero debe seguir siendo privado.
Para crear una propiedad de sólo escritura, se
creará una propiedad con un procedimiento
Set pero sin procedimiento Get, tal como se
muestra a continuación.
Los procedimientos de propiedad ReadOnly
y WriteOnly también son útiles cuando se
desea tomar un valor de propiedad y convertirlo en un valor diferente. Por ejemplo,
pensemos en la edad de una persona. A diferencia del nombre, la edad cambia con el
tiempo, si ha asignado la edad a una clase y la lee de nuevo un año después, sería
incorrecta.
En la clase Empleado, se puede evitar esto agregando dos propiedades: una propiedad
WriteOnly añoNac que representa el año de nacimiento, que nunca cambia, y una
propiedad ReadOnly edad que devuelve un valor calculando la diferencia entre el año
en curso y el año de nacimiento.

Métodos de una clase


Los métodos de una clase son simplemente procedimientos Sub o Function declarados
dentro de la clase. Por ejemplo, una clase cuenta puede tener un procedimiento Sub
denominado Recalcular, que actualizará el balance o un procedimiento Function
denominado actualizarBalance para devolver el último balance. El código para declarar
esos métodos puede ser similar al siguiente.
Si bien la mayoría de los métodos de clase son públicos, también se pueden agregar
métodos que sólo la clase en sí puede utilizar. Por ejemplo, la clase Empleado puede
tener su propia función para calcular la antiguedad de un empleado en la empresa.
Al declarar la función como Private, no se puede ver o llamar desde fuera de la clase.
El código para una función privada puede ser similar al siguiente:

Luego se puede cambiar el código que calcula el valor calcularEdad y el método seguirá
funcionando bien sin cambiar ningún código que utilice el método. Ocultar el código que
realiza el método se conoce como
encapsulación.
Siguiendo con nuestro ejemplo en la
clase Empleado, vamos a crear un
método público que devuelve un
nombre completo y una función
privada para calcular la antigüedad
del empleado. Al crear la función
privada para calcular la antigüedad,
se debe por lo tanto modificar el
procedimiento de la propiedad
antigüedad para usar está función.

Sobrecarga
A veces hay casos en los que un método único no sirve; por ejemplo, es probable que
deba pasar diferentes tipos de datos al método en distintas situaciones o quizá desee
devolver formatos diferentes como resultado. Se pueden crear varias versiones de un
método mediante una técnica llamada sobrecarga. Cuando una clase tiene más de un
método con el mismo nombre pero con un conjunto de argumentos diferente, el método
se sobrecarga.
Para crear un método sobrecargado, se debe agregar dos o más procedimientos Sub o
Function a la clase, cada uno con el mismo nombre. En las declaraciones de
procedimiento, el conjunto de argumentos para cada procedimiento debe ser distinto o
se producirá un error.
El siguiente ejemplo muestra un método con dos sobrecargas, una que acepta una
String y la otra que acepta un Integer como argumento.
Si se debe llamar a este método desde el código y pasarle una cadena, se ejecutaría la
primera sobrecarga y un cuadro de
mensaje mostraría la cadena; si se le pasó
un número, se ejecutaría la segunda
sobrecarga y el número se convertiría en
una cadena y aparecería en el cuadro de
mensaje.
Puede crear tantas sobrecargas como sea necesario y cada una de ellas puede
contener un número diferente de argumentos. En nuestro ejemplo de la clase Empleado,
se agregará un método con dos sobrecargas para devolver la inicial del apellido de un
empleado; una sólo con la inicial y la otra con la inicial seguida por un punto.
Probar una clase
Vamos a crear una instancia de una clase para probar la clase. Como vimos los
formularios y controles son en realidad clases; cuando arrastra un control Button a un
formulario, está creando realmente una instancia de la clase Button. También puede
crear instancias de cualquier clase en el código utilizando una declaración con la palabra
clave New. Por ejemplo, para crear una nueva instancia de la clase Button,
agregaremos el siguiente código:

Para utilizar y probar la clase Empleado, debemos crear primero un proyecto de prueba
y agregar una referencia al módulo
de clase. Para ello abrimos el
proyecto que contiene la clase
Empleados y en el menú Archivo
elejimos la opción agregar nuevo
proyecto haciendo clic en la plantilla
de aplicación para windows y lo
nombramos con PruebaEmpleado.

En el Explorador de soluciones,
podemos ver los proyectos Empleado y PruebaEmpleado. Seleccionamos el proyecto

PruebaEmpleado y en el menú Proyecto, elegimos “Establecer como proyecto de inicio”.


Luego y con el proyecto PruebaEmpleado
seleccionado tendremos que agregar referencia
desde el menú proyecto. Se abrirá el cuadro de
diálogo Agregar referencia. Hacemos clic en la
ficha Proyectos, seleccionamos Empleado y
Aceptamos.
Ahora podremos declarar una nueva instancia de la clase Empleado para ello
ingresaremos el siguiente código en el editor del formulario.
Escribimos dos veces Empleado debido a
que la primera instancia es el módulo de
clase [Link]; la segunda instancia
es la clase Empleado dentro de ese
módulo.
Acontinuación debemos agregar una interfaz de usuario y un código que utilice la clase
Empleado. Agregará cuadros de texto donde el
usuario especificará los valores para cada una
de las propiedades, una casilla de verificación
para el campo activo y botones para probar
cada uno de los métodos públicos.
Notemos que cuando se escribe el código, se
muestra una lista que contiene todos los
miembros de la clase Empleado. Puesto que
se agregó como una referencia, IntelliSense
muestra la información sobre la clase tal como
lo haría para cualquier otra clase.
Bibliografía
Garay Gaitan [Link] Basic 2008.
Guerreros Montoya Johan. Microsoft Visual Basic 2008 Express Edition.
[Link]
[Link]
Tecnicatura Superior en Análisis de Sistemas

Programación Visual

Tema 11 - Herencia

Visual Basic es compatible con la herencia, la capacidad de definir clases que sirven como
base para las clases derivadas. Las clases derivadas heredan, y pueden extender, las
propiedades, métodos y eventos de la clase base. Las clases derivadas también pueden
reemplazar métodos heredados con nuevas implementaciones. De forma predeterminada,
todas las clases creadas con Visual Basic se pueden heredar.
La herencia permite escribir y depurar una clase una vez, y después volver a utilizar ese
código una y otra vez como base de nuevas clases. También permite utilizar el
polimorfismo basado en la herencia, la posibilidad de definir clases que pueden utilizarse
de forma intercambiable mediante código cliente en tiempo de ejecución, pero con
funcionalidad diferente, incluso con métodos o propiedades denominados de manera
idéntica.
Muchos objetos de la vida real tienen atributos y comportamientos en común,por ejemplo,
todos los automóviles tienen ruedas y motores, y pueden avanzar y detenerse. Sin
embargo, algunos automóviles tienen atributos que no son comunes, por ejemplo, un
descapotable tiene una parte superior que se puede mover y bajar electrónica o
manualmente.
Si se creó un objeto para representar un automóvil, se pueden incluir propiedades y
métodos para todos los atributos y comportamientos comunes, pero no se podrían agregar
atributos como la cubierta de un descapotable, puesto que dicho atributo no es
generalizable a todos los automóviles.
Mediante el uso de la herencia, se puede crear una clase "descapotable" que deriva de la
clase automóvil. Ésta hereda todos los atributos de la clase automóvil y puede agregar los
atributos y comportamientos que son únicos de un auto descapotable.

Heredar a partir de una clase existente

La instrucción Inherits se utiliza para declarar una nueva clase, denominada clase
derivada, basada en una clase existente conocida como clase base. Las clases derivadas
heredan todas las propiedades, los métodos, los eventos, los campos y las constantes
definidos en la clase base. El siguiente código muestra la declaración para una clase
derivada

Class ClaseDerivada
Inherits ClaseBase
End Class

Se pueden crear instancias de la nueva clase ClaseDerivada se puede tener acceso a sus
propiedades y métodos como ClaseBase y se pueden agregar nuevas propiedades y
métodos que son específicos de la nueva clase. Para ver un ejemplo, observemos el
proyecto Empleados que se creó en las Clase anterior.
Supongamos que deseamos una clase que represente los jugadores del equipo de futbol
de nuestra empresa: los jugadores de futbol tienen todos los atributos definidos en la clase
Empleado, pero también tienen atributos únicos, como su número y posición. En lugar de
agregar esas propiedades a la clase Empleado, crearemos una nueva clase derivada que
se hereda de la clase Empleado, a la que se agregan las nuevas propiedades.
Agregamos al proyecto Empleados, generado en la clase anterior un nuevo módulo de
clase llamada Jugadores (los jugadores del
equipo de futbol de la empresa).
En el menú Proyecto, elija Agregar clase al
agregar nuevo elemento lo nombramos como
“Jugadores”

Agregue el siguiente código para definir


la herencia y dos nuevas propiedades.

Probando la nueva clase


Después de crear la clase Jugadores derivada de la clase Empleado. Para poder probar su
funcionamiento deberemos crear un nuevo programa.
Para crear un proyecto de prueba para la clase, en el cuadro de diálogo Agregar nuevo
proyecto, en el panel Plantillas, seleccione Aplicación para Windows. Lo nombraremos
PruebaJugadores.
En el Explorador de soluciones,
seleccionamos el proyecto
PruebaJugadores y en el menú Proyecto,
elegimos Agregar referencia. Se abrirá el
cuadro de diálogo Agregar referencia.
Hacemos clic en la ficha Proyectos,
elegimos Empleado y Aceptamos.

Abrimos el Editor de código y escribimos las siguientes declaraciones.

Esto declara dos


nuevas instancias de la
clase Jugadores.

Agregamos el siguiente código al procedimiento de evento Form1_Load.

En el Cuadro de herramientas, arrastre dos


controles Button al formulario.

Agregamos el código para cada uno de los


controles. Esto nos permitirá saber que jugador
está jugando o no en ese momento.
Modificar una clase a partir de una clase derivada
Además de agregar nuevas propiedades o métodos a una clase derivada, también es
posible que desee cambiar, o reemplazar, el comportamiento de propiedades o métodos
existentes.
Por ejemplo, podría crear una clase Camión que se derive de una clase Auto con un
método encenderMotor. Si el objeto Camión tiene un motor diesel, el proceso de
encendido del motor puede ser distinto al de un objeto Auto; en este caso, se puede desear
reemplazar el método encenderMotor para que se adapte mejor al objeto Camión.

Reemplazar propiedades y métodos


De manera predeterminada, no se pueden reemplazar las propiedades ni los métodos en
una clase. Para permitir que una clase derivada reemplace una propiedad o un método, se
debe marcar como reemplazable declarándolo con la palabra clave Overridable.

Public Overridable Property tipoMotor() As String


Public Overridable Sub encenderMotor (ByVal tipoMotor As String)

Al heredar de una clase base, las propiedades y los métodos que están marcados como
Overridable se pueden utilizar tal como están o se pueden modificar para satisfacer las
necesidades del usuario declarándolos con la palabra clave Overrides.

Public Overrides Property tipoMotor() As String


Public Overrides Sub encenderMotor(ByVal tipoMotor As String)

En la clase Jugadores que se creó anteriormente, puede que se desee reemplazar el método
apellido_nombre para incluir el número del jugador. Para ello abrimos el proyecto
Empleado, modificamos la declaración del método apellido_nombre de la siguiente
manera:
Public Overrides Function apellido_nombre() As String

Ahora en el Explorador de soluciones, seleccionamos el nodo [Link] y, en el menú


Ver, elijamos Código. En el
Editor de código, agregamos el
siguiente código a la clase.

A continuación modificamos
el código de los eventos clic de Cancha y Banco en el proyecto de prueba, para usar el
metodo apellido_nombre de la clase derivada.
Observemos que los resultados son los mismos que antes, aún que ahora se está
utilizando el método apellido_nombre reemplazado.

Colecciones

En términos generales, una colección es un objeto utilizado para agrupar y administrar


objetos relacionados. Por ejemplo, cada formulario Form tiene una colección de
controles. (Puede tener acceso a esta colección a través de la propiedad Controls del
formulario.) Esta colección es un objeto que representa todos los controles de ese
formulario. Le permite recuperar un control de la colección utilizando su índice y recorrer
en iteración los elementos de la colección, utilizando una Instrucción For Each...Next en
Visual Basic.
Sin embargo, hay varios tipos de colecciones y se diferencian entre sí de varias maneras.
Visual Basic Express tiene un tipo de objeto especial denominado colección, el cual se
puede utilizar para almacenar y recuperar grupos de objetos similares.
Al igual que una matriz, cada elemento de un objeto “Collection” tiene un índice que se
puede utilizar para identificar dicho elemento. Además, cada elemento de un objeto
Collection tiene una clave, un valor String que se puede utilizar para identificar el
elemento. La ventaja de utilizar una clave es que no necesita recordar el índice de un
elemento; en su lugar, podemos referirnos a él a través de un nombre significativo.

Valores de índice y de clave

Las instancias de la clase Collection de Visual Basic permiten tener acceso a un elemento
utilizando un índice numérico o una clave String. Puede agregar elementos a los
objetos Collection de Visual Basic especificando una clave o sin especificarla. Si agrega
un elemento sin una clave, debe utilizar su índice numérico para tener acceso a él.
Por contraste, las colecciones como [Link] sólo permiten un
índice numérico. No se pueden asociar claves con los elementos de estas colecciones, a
menos que construya las suyas propias basadas en asignaciones, por ejemplo, en una
matriz de String que contiene las claves.

Agregar y quitar elementos

Las colecciones se diferencian en si pueden o no agregar elementos y, en caso afirmativo,


en cómo se pueden agregar. Puesto que el objetoCollection de Visual Basic es una
herramienta de programación de uso general, es más flexible que algunas otras
colecciones. Tiene un método Add para colocar elementos en la colección y un método
Remove para quitar elementos de ella.
Por otra parte, ciertas colecciones especializadas no permiten agregar o quitar elementos
mediante código.
Por ejemplo, la propiedad [Link] devuelve una colección de
referencias a elementos por índice, pero su código no puede agregar elementos a la
colección ni quitarlos de ella. Sólo el usuario puede hacer esta operación, activando o
desactivando la casilla de verificación correspondiente en la interfaz de usuario. Por tanto,
no hay ningún método Add ni Remove para esta colección.

Crear una colección

Las colecciones son útiles cuando el programa utiliza varias instancias de la misma clase.
Por ejemplo, la clase jugadores que creamos anteriormente, ya que es probable que
necesitemos varios objetos jugadores para representar el equipo de futbol de nuestra
empresa.
El primer paso para crear una colección es crear una instancia de un objeto Collection, tal
como se muestra en la siguiente declaración:

Dim equipoFutbol As New Collection

Cuando se crea el objeto Collection, como mencionamos anteriormente se puede utilizar


el método Add para agregarle elementos y el método Remove para eliminarlos. Cuando
agreguemos elementos, primero especificamos el elemento que se va a agregar y luego el
valor String que se va a utilizar como clave.

[Link](objetoJugador, "Nombre del judador")

Al quitar un elemento, utilizamos la clave para especificar el elemento que se va a quitar.

[Link]("Nombre del jugador")

En el siguiente procedimiento, se agregarán dos nuevos objetos Jugador y, a continuación,


se creará una colección equipoFutbol y se le agregarán varios objetos jugadores, mediante
la propiedad Posición como una clave.
En el Explorador de soluciones, en el proyecto PruebaJugadores, seleccione el nodo
[Link] y en el menú Ver,
Dim jugador3 As New [Link]
seleccione Código. En el Editor de Dim jugador4 As New [Link]
código, agregue lo siguiente a la Dim equipoFutbol As New Collection
sección de declaraciones:
Además Agregamos With jugador3
el siguiente código al .nombre = "Sergio"
procedimiento de .apellido = "Goycochea"
evento Form1_Load. .Numero = 1
.Posicion = "Arquero"
End With
With jugador4
.nombre = "Oscar"
.apellido = "Ruggeri"
.Numero = 6
.Posicion = "Defensor"
End With
[Link](jugador1, [Link])
Luego en el Cuadro [Link](jugador2, [Link])
de herramientas, [Link](jugador3, [Link])
[Link](jugador4, [Link])
arrastremos un
control ComboBox
hasta el formulario del proyecto pruebaJugadores y
cargamos en su propiedad ítems los siguientes datos, que
representan las distintas posiciones en una cancha de
futbol.

Haga doble clic en el control ComboBox para abrir


el Editor de código y escriba el siguiente código en
el controlador de eventos
ComboBox1_SelectedIndexChanged.

Dim seleccionarJugador As [Link]


seleccionarJugador = equipoFutbol([Link])
MsgBox("Jugando como " & [Link] & " está " &_
seleccionarJugador.apellido_nombre & "!")

Al ejecutar el proyecto seleccionamos una


posición de la lista desplegable y aparecerá
en un cuadro de mensaje el jugador para esa
posición.

Recorrer una colección

Los objetos de la colección de Visual Basic Express admiten un tipo especial de bucle, el
bucle For Each...Next, que se utiliza para ejecutar un bloque de código para cada elemento
de la colección, en lugar de ejecutar el bloque un número fijo de veces. El bucle For
Each…Next repite un grupo de sentencias por cada elemento en la colección.
En el ejemplo siguiente se utiliza la instrucción For Each...Next para buscar todos los
elementos en una colección
de la cadena "Hola". El Dim encontrar As Boolean = False
ejemplo supone que ya se ha Dim MiColeccion As New Collection
creado la For Each thisObject As String In MiColeccion
colección Micolección y If thisObject = "Hola" Then
que sus elementos son de encontrar = True
tipo String. Exit For
End If
Next thisObject

Entones probaremos de recorrer la colección definida en nuestro proyecto


PruebaJugadores, agregamos manualmente al control ComboBox los valores de la
propiedad Posición de los objetos “jugadores” en la colección de equiposFutbol.
Aunque este sistema funciona para el ejemplo, no es el procedimiento recomendado, pues
cada vez que agregue un nuevo jugador, también se tendrá que actualizar la colección
Items del control ComboBox.
Una manera mucho más adecuada consiste en agregar los valores Posición a la colección
Items recorriendo la colección equipoFutbol con un bucle For Each...Next. En un bucle
For...Next, primero se debe declarar una variable de contador; con un bucle For
Each...Next primero debe declarar una variable de objeto. El Código siguiente muestra
un bucle For Each...Next.
En este caso, no importa cuántos jugadores tenga, el método [Link] se
ejecutará una vez para cada objeto jugadores de la colección equipoFutbol y el valor
Posición se agregará a la lista.
Siguiendo con nuestro ejemplo, en el Explorador de soluciones, seleccione el nodo
[Link] en el proyecto PruebaJugadores y, en el menú Ver, elija Diseñador. Seleccionar
el control ComboBox. A continuación, en la ventana Propiedades, seleccionamos la
propiedad Items. En el Editor de la colección de cadenas, eliminamos las cuatro entradas
existentes y aceptamos.
Hacemos doble clic en el
formulario para abrir el Editor de Dim jugador As [Link]
código. En el Editor de código, For Each jugador In equipoFutbol
[Link]([Link])
agregamos lo siguiente en la Next
sección de declaraciones
Al ejecutar el programa. Seleccionamos una posición de la lista desplegable. El jugador
de esa posición se mostrará en un cuadro de mensaje.
Bibliografía
Garay Gaitan [Link] Basic 2008.
Guerreros Montoya Johan. Microsoft Visual Basic 2008 Express Edition.
[Link]
[Link]
Tecnicatura Superior en Análisis de Sistemas

Programación Visual

Tema 12 - Controles de usuario

Las clases que hemos creado hasta el momento se pueden reutilizar en otros programas,
de modo que no debemos escribir una y otra vez el mismo código. Los controles
también son clases que se pueden reutilizar en varios proyectos. Probablemente
diseñaremos la misma interfaz una y otra vez, por ejemplo, agregando controles
TextBox para especificar el nombre, apellidos y, a continuación, agregando código para
combinarlos en un nombre completo. Sería más práctico evitar todo ese trabajo extra, de
ahí proceden los controles de usuario. Imaginemos que un control de usuario es como
una clase para crear objetos visibles (controles personalizados que podremos reutilizar
igual que los controles que se incluyen en Visual Basic). La mayoría de los controles de
usuario son controles compuestos, es decir, controles que se componen de uno o varios
controles estándar de Visual Basic.

Diseñador de controles de usuario


Un control de usuario simplemente es una clase que se puede ver exactamente igual que
los controles estándar que vienen con Visual Basic, los controles de usuario se puede
colocar en formularios durante el diseño y aparecen al ejecutarse el programa.
Cuando se diseña un programa, se organiza los controles y decide su apariencia en el
diseñador de formularios. Hay también un diseñador para los controles de usuario, el
diseñador de controles de usuario, que permite al desarrollador, decidir la apariencia del
control.
Un control de usuario es similar a cualquier otra clase, pero con la posibilidad agregada
de poder colocarlo en el Cuadro de herramientas y mostrarlo en un formulario. Donde
un módulo de clase tiene sólo código, un módulo de control de usuario tiene código y
un diseñador. El Diseñador de controles de usuario es similar a un diseñador de
formularios: tiene las propiedades para controlar el aspecto y comportamiento del
control de usuario.
Las maneras de crear controles de usuario son ligeramente distintas, en función de la
versión de Visual Basic que se use: Visual Basic Express tiene un tipo de proyecto de
biblioteca de controles de Windows; debe crear primero un proyecto de bibliotecas de
clase y luego agregarlo a una plantilla de controles de usuario. Crearemos un control de
usuario mediante Visual Basic
Express de la siguiente manera:
En el menú Archivo, haga clic
en Nuevo proyecto. En el panel
Plantillas, del cuadro de diálogo
Nuevo proyecto, haga clic en
Biblioteca de clases y luego en
Aceptar.
En el menú Proyecto, haga clic en Agregar control
de usuario. En el cuadro de diálogo Agregar
nuevo elemento, seleccione Control de usuario.
Se agregará una nueva plantilla Control de
usuario al proyecto y se abrirá el diseñador de
controles de usuario.

En el Explorador de soluciones, eliminar [Link]


a continuación, haga clic en Aceptar.

Al ejecutarlo el proyecto se abrirá el


UserControlTestContainer y se mostrará
el control de usuario.
Agregar controles al control de usuario
Como se vimos anteriormente, el tipo de control de usuario más común es un control
compuesto, aquél que está formado por uno o más controles de formularios Windows
Forms estándar. Se pueden agregar controles a plantillas
Control de usuario arrastrándolos desde el Cuadro de herramientas hasta el diseñador de
controles de usuario, del mismo modo que lo hacemos cuando diseñamos formularios.
Una vez que ha agregado un control, puede cambiar su tamaño y moverlo en el
diseñador, asimismo, puede establecer sus propiedades en la ventana Propiedades.
En este ejemplo, agregaremos un control Label para mostrar un nombre completo, y tres
controles TextBox para especificar el primer nombre, el segundo nombre y el apellido.
En el Explorador de soluciones, seleccionamos [Link] y en el menú Ver
seleccionamos Diseñador. En el Cuadro de herramientas, arrastre un control Label al
diseñador la nombramos como “Apellido_Nombres”. Luego arrastre tres controles
Textbox al diseñador, los nombramos como primerNombre, segundoNombre y apellido.

Como los controles


estándar, los controles
de usuario tienen
propiedades, métodos
y eventos.
Escribiremos código
para controlar los
eventos del control y
decidiremos qué
propiedades se
expondrán al usuario
del control.

Controlar eventos en un control de usuario


Para que el control de usuario sea de utilidad, se debe escribir algún código que controle
los eventos del control. Un procedimiento de control de eventos de un control de
usuario no es distinto del que se escribe para un formulario o un control. En este
ejemplo, escribiremos un procedimiento de evento que actualizará la etiqueta
Apellido_Nombres con el contenido de los cuadros primerNombre, segundoNombre y
apellido según se escriba, con el controlador de eventos TextChanged.
Se debe agregar el siguiente código para el controlador de eventos:
primerNombre_TextChanged.

Private Sub primerNombre_TextChanged(ByVal sender As [Link], ByVal


e As [Link]) Handles [Link],
[Link], [Link]
' Muestra el contenido de las cajas de textos en la etiqueta.
Apellido_Nombres.Text = [Link] & " " & [Link] & "
" & [Link]
End Sub
Observación:
La cláusula Handles de la declaración controla el evento TextChanged de los tres
controles TextBox. De manera tal que No importa qué cuadro de texto se escriba
primero, siempre se actualizará la etiqueta Apellido_Nombres según se escriba.

Exponer las propiedades de un control de usuario


Las propiedades de los controles estándar permiten establecer y recuperar valores de un
control en tiempo de diseño y en tiempo de ejecución. También podemos querer que
determinadas propiedades del control de usuario estén disponibles para que se puedan
establecer en la ventana Propiedades durante el diseño y hacer referencia a ellas en el
código.
Exponer propiedades en un control de usuario es muy similar a exponer propiedades en
una clase, la diferencia principal es que puede exponer también las propiedades de los
controles contenidos en el control de usuario. Como con las clases, se puede declarar
una propiedad y agregar código a los procedimientos Get y Set.
Si se expone una propiedad de un control contenido, no se tendrá que declarar una
variable privada para almacenar el valor, la propiedad del control lo almacena
automáticamente.
Tal y como está ahora, no hay modo de recuperar el texto que se especifica en los
controles primerNombre, segundoNombre y apellido de la etiqueta Apellido_Nombres.
Se debe exponer los valores como propiedades para que el control resulte útil. Dado que
no se desea que el valor de la etiqueta se modifique fuera de su propio código, se debe
exponer como una propiedad de sólo lectura.
Para agregar propiedades, en el Editor de código se debe agregar el código siguiente
para exponer los valores.
Property primerNombreText() As String
Get
Return [Link]
End Get
Set(ByVal value As String)
[Link] = value
End Set
End Property
Property segundoNombreText() As String
Get
Return [Link]
End Get
Set(ByVal value As String)
[Link] = value
End Set
End Property
Property apellidoText() As String
Get
Return [Link]
End Get
Set(ByVal value As String)
[Link] = value
End Set
End Property

Agregamos el código siguiente para exponer el valor de la etiqueta Apellido_Nombres


como una propiedad de sólo lectura.

ReadOnly Property Apellido_NombresText() As String


Get
Return Apellido_Nombres.Text
End Get
End Property

En el TestContainer del Control de usuario, en la parte inferior de la cuadrícula


Propiedades seleccionar la
propiedad primerNombreText.
Escribir un nombre y, a
continuación, seleccionar la
propiedad
Apellido_NombresText; el cuadro
de texto primerNombre debería
mostrar el nombre y la propiedad
Apellido_NombresText debería
[Link] puede cambiar
algunas de las demás propiedades
en la cuadrícula Propiedades y el
propio control para ver cómo se
relacionan. Esto es lo que un
usuario del control experimentará
en tiempo de diseño.
Valores con nombre
Las propiedades que ha agregado hasta ahora a su control de usuario toman valores de
cadena, pero las propiedades pueden ser de muchos tipos diferentes. En ocasiones, se
puede querer proporcionar una lista de valores predefinidos entre los que elegir, como la
propiedads sizemode del control PictureBox.
Supongamos, por ejemplo, que se desea crear una propiedad para el control
UsuarioNombre que le permita elegir cómo la etiqueta Apellido_Nombres muestra el
nombre. Se necesitará una lista de valores entre los que elegir por ejemplo: nombre en
primer lugar, apellido en primer lugar, sólo nombre y apellido, etc.
Se puede crear una enumeración o Lista numerada que contiene los valores que desea.
Visual Express almacena los números, de forma que puede hacer referencia a los
valores por el nombre.
Una enumeración se Public Enum Mostrar
declara utilizando la palabra primerNombresegundoNombreapellido
clave Enum, como en el primeraNombreapellido
ejemplo siguiente. apellidoprimerNombresegundoNombre
apellidoprimerNombre
End Enum
Cuando se ha creado una
enumeración, se puede utilizar como cualquier otro tipo. Para agregar una propiedad
que muestre una lista de valores, en primer lugar declara una variable del mismo tipo
que Enum y, a continuación, declarar una propiedad del mismo tipo. En tiempo de
diseño, una lista de valores incluida en la enumeración aparecerá en la ventana
Propiedades.
Agregamos una propiedad que muestre una lista de valores, para ello abrimos el
proyecto ControlUsuario. En el Explorador de soluciones, seleccione
[Link] y en el menú Ver haga clic en Código. En el Editor de código,
agregamos el código anterior para crear una enumeración.
Además agregamos el Private ListaMostrarEstilo As Mostrar
siguiente código para Property MostrarEstilo() As Mostrar
agregar una nueva Get
propiedad. Return ListaMostrarEstilo
End Get
Set(ByVal valor As Mostrar)
ListaMostrarEstilo = valor
End Set
Reemplazamos el código End Property
existente en el
controlador de eventos primerNombre_TextChanged por el código siguiente.
Select Case ListaMostrarEstilo
Case [Link]
Apellido_Nombres.Text = [Link] & " " &
[Link]
Case [Link]
Apellido_Nombres.Text = [Link] & " " &
[Link] & " " & [Link]
Case [Link]
Apellido_Nombres.Text = [Link] & ", " &
[Link]
Case [Link]
Apellido_Nombres.Text = [Link] & ", " &
[Link] & " " & [Link]
End Select
Ejecutamos el proyecto y probamos los cambios realizado, escribimos el nombre, el
apellido y la inicial en los tres cuadros de texto. En el TestContainer del control de
usuario, nos desplazamos a la parte inferior de la cuadrícula Propiedades y
seleccionamos la propiedad DisplayStyle. Seleccionamos un valor diferente y, a
continuación, cambiamos el texto de uno de los cuadros de texto para ver cómo afecta a
la etiqueta.

Probar un control de usuario


Ahora que ya creamos nuestro control de usuario nos toca observar su comportamiento
en tiempo de ejecución. Visual Basic Express facilita la prueba del control de usuario
agregando un proyecto de aplicación para Windows.
El control de usuario aparece automáticamente en el Cuadro de herramientas y puede
agregarse a un formulario y establecer sus propiedades igual que si se tratara de
cualquier otro control.
Para esto abrimos el proyecto ControlUsuarioNombre, en el menú Archivo, elegimos
Agregar y hacemos clic en Nuevo proyecto. Seleccionamos Aplicación para Windows y
lo nombramos PruebaControlUsuario, se agregará un nuevo proyecto en el Explorador
de soluciones y se mostrará un nuevo formulario. Debemos establecer a este como
proyecto de inicio.

En el Cuadro de herramientas, seleccionamos el


control UsuarioNombre y lo arrastramos hasta el
formulario.
En la ventana Propiedades, establezca las propiedades [Link],
[Link] y [Link] que correspondan a su nombre.

Personalizar el control de usuario

Agregar etiquetas
Hay maneras para mejorar el control tal que sea más útil a nuestro proposito. Por
ejemplo, en nuestro ejemplo ControlUsuario no resulta obvio qué nombre debe
escribirse en qué cuadro de texto y no hay modo de saber con certeza si los usuarios han
especificado tres nombres.
Para que el control de usuario resulte de mayor utilidad, se pueden agregar etiquetas
que identifiquen todos los cuadros de texto. Se podría establecer el texto para que las
etiquetas indicaran "Primer Nombre", "Segundo nombre" y "Apellido", pero, ¿qué
sucede si después decide que prefiere una "Inicial de segundo nombre"? Es preferible
crear propiedades para el texto de etiqueta de modo que pueda cambiar el texto en
tiempo de diseño y dar un valor predeterminado a cada propiedad.
Abrimos el Proyecto ControlUsuario y en el
Explorador de soluciones, seleccionamos
[Link] y en el menú Ver
seleccionamos Diseñador. En el Cuadro de
herramientas, arrastramos tres controles Label
al diseñador y colocamos uno sobre cada
TextBox. En el Explorador de soluciones,
seleccionamos [Link] y en el
menú Ver elegimos Código. En el Editor de
código, agregamos el código siguiente para
crear las propiedades para el texto de la
etiqueta. El código declara tres variables
Private para el texto de etiqueta y las
declaraciones incluyen el valor predeterminado
que se va a mostrar.

En el Editor de código, seleccionamos


(UsuarioNombreEvents) del cuadro de lista
desplegable izquierdo y, a continuación,
seleccionamos el evento Load del cuadro de
lista desplegable derecho. Agregamos el
código siguiente al controlador de eventos
UsuarioNombre_Load.

Comprobar que las etiquetas tienen el texto predeterminado. Intentar cambiar la


propiedad Label1Text en la ventana Propiedades y comprobar que también cambia en el
control.
Agregar validación
Otra personalización de utilidad sería agregar código para validar lo que se escribe con
el fin de asegurarse de que es correcto. En lugar de validar cada uno de los controles
TextBox, se puede escribir código de validación para el control de usuario completo.
La mayoría de los controles tienen un evento Validating que se produce cuando se
desplaza el foco fuera del control; aquí es donde se especificará el código de validación.
En este caso, escribiremos código para asegurar que cada cuadro de texto contiene un
nombre.
Si están vacíos uno o varios cuadros de texto, se debe mostrar un cuadro de mensaje
para recordar al usuario que especifique su nombre. Se puede exponer una propiedad
que contenga un mensaje predeterminado; de ese modo, el usuario del control puede
cambiar contenido del mensaje.
También es posible que el usuario del control no requiera un segundo nombre, de modo
que también tenemos que agregar una propiedad Boolean para desactivar la validación
para el cuadro de texto SegundoNombre
En el Editor de código, agregamos el código para dos propiedades relacionadas con la
validación, una para especificar si el segundo nombre es necesario y otra para
especificar el mensaje que se mostrará si no se supera la validación.

En el Editor de código, seleccione (UsuarioNombre Events) del cuadro de lista


desplegable izquierdo y, a continuación, seleccione el evento Validating del cuadro de
lista desplegable derecho. Agregamos el código siguiente al controlador de eventos
UsuarioNombre_Validating.
En el menú Generar, elegimos
Generar solución. En el
Explorador de soluciones,
seleccionamos [Link] y en el
menú Ver elegimos Diseñador.
Seleccionamos el control de
usuario en el formulario y
comprobamos que aparecen las
dos nuevas propiedades en la
ventana Propiedades.

En el Cuadro de herramientas,
arrastramos un control Button al
formulario. Presione F5 para ejecutar
el programa.
Escribimos el nombre y apellido,
pero no escribimos un segundo
nombre. Hacemos clic en el botón y
se mostrará un cuadro de mensaje
que contiene el error producido, en
este caso la ausencia del segundo
nombre.

Conclusión
En Visual Basic 2008, se utilizan los proyectos de la Biblioteca de controles de
Windows para crear controles que se puedan hospedar en aplicaciones de formularios
Windows Forms. Se puede agregar un objeto UserControl a un formulario sin cerrar el
Diseñador de controles de usuario; sin embargo, el control de usuario debe generarse
antes de poder agregarlo a un formulario. Con sólo cerrar el Diseñador de controles de
usuario no se genera automáticamente el control. Los cambios realizados
posteriormente en el control de usuario no se reflejarán en el diseñador de formularios
hasta que no se vuelva a generar el objeto UserControl; los objetos UserControl se
regeneran automáticamente cada vez que se depura la aplicación de prueba.
Bibliografía
Garay Gaitan [Link] Basic 2008.
Guerreros Montoya Johan. Microsoft Visual Basic 2008 Express Edition.
[Link]
[Link]
Tecnicatura Superior en Análisis de Sistemas

Programación Visual

Tema 13 - Arreglos

Los arrays, arreglos o vectores (o matrices) que son conocidas por algunos como vectores
multidimensionales para almacenar grupos de valores.
Como vimos en las lecciones anteriores, las variables se utilizan para almacenar
diferentes tipos de datos que el programa utiliza. Hay otro tipo de variable denominado
matriz que proporciona una manera conveniente de almacenar diversos valores del mismo
tipo.
La declaración de un arreglo, o vector la hacemos de la misma forma que en el siguiente
ejemplo declaramos un arreglo de tipo String llamado nombres:

Dim nombres As String

Podemos indicar el número de elementos que contendrá el arreglo:

Al realizar esta declaración lo que conseguimos es


Dim nombres(10) As String
definir un arreglo de 11
elementos: desde cero hasta 10.
Otra posibilidad es indicar el rango de índices que podemos asignar, esto lo lográbamos
usando la cláusula To al definir un arreglo, por ejemplo:

Dim nombres(0 To 10) As String Al menos de esta forma el código resultará


más legible:

Declarar e inicializar un arreglo


Podemos declarar un arreglo y al mismo tiempo asignarle valores, esto lo hacemos
indicando los valores a asignar justo después de la declaración y encerrándolos entre
llaves:

Dim nombres() As String = {"Pepe", "Juan", "Luisa"}

Con el código anterior estamos creando un array de tipo String con tres valores cuyos
índices van de cero a dos. Si el array es bidimensional (o con más dimensiones), también
podemos inicializarlos al declararlo, pero en este caso debemos usar doble juego de
llaves:
Dim nombres(,) As String = {{"Juan", "Pepe"}, {"Ana", "Eva"}}

En este código tendríamos un arreglo bidimensional nombres(0, 0) = "Juan"


con los siguientes valores: nombres(0, 1) = "Pepe"
nombres(1, 0) = "Ana"
nombres(1, 1) = "Eva"

Programación Visual
Lic. Carina Quiroga
Tecnicatura Superior en Análisis de Sistemas

Programación Visual

Tamaño de un arreglo
Para cambiar el tamaño de un arreglo, se debe usar la instrucción ReDim, pero a no
podemos usarla para definir uno, siempre hay que declarar previamente los arreglos antes
de cambiarles el tamaño.
Lo que también se puede hacer es cambiar el tamaño de un arreglo y mantener los valores
que tuviera anteriormente, para lograrlo debemos usar ReDim Preserve.
Si bien tanto ReDim como ReDim Preserve se pueden usar en arreglos de cualquier
número de dimensiones, en los arreglos de más de una dimensión solamente podemos
cambiar el tamaño de la última dimensión.

Contenido de un arreglo
Una vez que se ha declarado un arreglo y le hemos asignado valores, es posible que nos
interese eliminar esos valores de la memoria, para lograrlo, podemos hacerlo de tres
formas:
1. Redimensionando el arreglo indicando que tiene cero elementos, aunque en el
mejor de los casos, si no estamos trabajando con arreglo de más de una dimensión,
tendríamos un arreglo de un elemento.
2. Usar la instrucción Erase. Está elimina totalmente el arreglo de la memoria.
3. Asignar un valor Nothing al arreglo. debido a que estos son tipos por referencia.
Es decir lo que contienen son una referencia a los datos reales no los datos
propiamente dichos.
Veámoslo con un ejemplo:
Dim nombres() As String = {"Juan", "Pepe", "Ana", "Eva"}
Dim otros() As String
otros = nombres
nombres(0) = "Antonio"

En este ejemplo definimos el arreglo nombres y le asignamos cuatro valores. A


continuación, definimos otro arreglo llamado otros y le asignamos lo que tiene nombres.
Por último, asignamos un nuevo valor al elemento cero del arreglo nombres.
Si mostramos el contenido de ambos arreglos veremos que realmente solo existe una
copia de los datos en la memoria, y tanto nombres(0) como otros(0) contienen el nombre
"Antonio".
Debido a que los arreglos son tipos por referencia, solamente existe una copia de los datos
y tanto la variable nombres como la variable otros lo que contienen es una referencia (o
puntero) a los datos.
Si realmente queremos tener copias independientes, debemos hacer una copia del arreglo
nombres en el arreglo otros, esto es fácil de hacer si usamos el método CopyTo. Este
método existe en todos los arreglos y nos permite copiar un arreglo en otro empezando
por el índice que indiquemos.
El único requisito es que el arreglo destino debe estar inicializado y tener espacio
suficiente para contener los elementos que queremos copiar.
En el siguiente código de ejemplo veremos una copia del contenido del arreglo nombres
en el arreglo otros, de esta forma, el cambio realizado en el elemento cero de nombres no
afecta al del arreglo otros.

Programación Visual
Lic. Carina Quiroga
Tecnicatura Superior en Análisis de Sistemas

Programación Visual

Dim nombres() As String = {"Juan", "Pepe", "Ana", "Eva"}


Dim otros() As String
ReDim otros([Link])
[Link](otros, 0)
nombres(0) = "Antonio"

Además del método CopyTo, los arreglos tienen otros miembros que nos pueden ser de
utilidad, como por ejemplo la propiedad Length usada en el ejemplo para saber cuántos
elementos tiene el arreglo nombres.
Para averiguar el número de elementos de un arreglo, también podemos usar la función
UBound.

Matrices
La idea es que Visual Basic infiera por nosotros el tipo de dato de forma directa.
Por ejemplo, pensemos en el siguiente ejemplo de Visual Basic 2008:
Dim ejemploMatriz() = {2009, 2010, 2011, 2012}

En este ejemplo, habremos creado una matriz de 4 elementos. Sin embargo, podríamos
cambiar uno de sus elementos a otro valor de diferente tipo, como por ejemplo:

ejemploMatriz(1) = "s"

De esta manera, tendremos un resultado: 2009, "s", 2011, 2012. Esto es así, porque la
matriz ejemploMatriz es de tipo Object.
Sin embargo, esto ha cambiado. Ahora, podemos declarar literales de matrices, haciendo
que estas matrices se declaren de acuerdo al tipo de dato declarado, es decir, infiriendo el
tipo de dato en la declaración.
Un ejemplo de este uso es el siguiente:
Dim ejemploInteger = {2009, 2010, 2011, 2012}

En este ejemplo, si tratamos de hacer lo que antes intentábamos mediante la siguiente


instrucción:

ejemploInteger(1) = "s"

La aplicación nos devolverá un error en tiempo de ejecución, ya que la matriz estará


inferida por defecto como tipo Integer, y estaremos intentado asignar un valor String a
una matriz de tipo Integer.

Asignar valores a las matrices


Al igual que con otros tipos de valores, debe asignar valores a las matrices. Para ello, se
hace referencia al número del elemento como parte de la
asignación, como se muestra a continuación.
En el código anterior, el valor “s” se asigna al
ejemploInteger(1) = "s" segundo elemento de la matriz
(elemento 1). Los elementos de la matriz no se
tienen que asignar en orden y cualquier elemento sin asignar tendrá un valor
predeterminado; en este caso, una cadena vacía.
Programación Visual
Lic. Carina Quiroga
Tecnicatura Superior en Análisis de Sistemas

Programación Visual

Al igual que con otros tipos de valores, puede declarar y asignar los valores a
una matriz en una línea única de la siguiente manera.

Dim ejemploInteger = {2009, 2010, 2011, 2012}


En este caso, las
llaves indican una lista de valores. Los valores se asignan a los elementos en el orden
mostrado. Observe que no se especifica el tamaño de la matriz, lo determina el número
de elementos que se muestran.

Recuperar valores de las matrices


Así como se utilizan números para especificar la posición de un elemento en una matriz,
el número de elementos se utiliza para especificar qué valor desea recuperar.
El código anterior recupera el segundo elemento de
Numero= ejemploInteger(1) la matriz y lo asigna a la
variable Numero.
Ejemplo:

Escribir un número comprendido entre 0 y 6 en el cuadro


de texto y hacemos clic en el botón. Se muestra el nombre
que corresponde a ese elemento en un
cuadro de mensaje.

El código anterior utiliza la función CInt para convertir el valor String ([Link])
en un Integer (i).

Programación Visual
Lic. Carina Quiroga
Tecnicatura Superior en Análisis de Sistemas

Programación Visual

Bibliografía
Garay Gaitan [Link] Basic 2008.
Guerreros Montoya Johan. Microsoft Visual Basic 2008 Express Edition.
[Link]
Matrices

Programación Visual
Lic. Carina Quiroga

También podría gustarte