Sie sind auf Seite 1von 100

UNIVERSIDAD NACIONAL DEL CENTRO DEL PERU

INSTITUTO DE INVESTIGACIN
FACULTAD DE INGENIERA DE SISTEMAS

INFORME FINAL
LIBRO: PROGRAMACIN CON VISUAL BASIC .NET
PROGRAMA
SUB PROGRAMA
LNEA

:
:
:

Transformacin de Recursos
Tecnologas
Informtica Aplicada

FECHA DE INICIO
FECHA DE CULMINACIN
TRIMESTRE

:
:
:

15 MARZO DEL 2005


15 DICIEMBRE DEL 2005
III

EJECUTORES

APELLIDOS Y NOMBRES
Abraham Esteban Gamarra Moreno
Job Daniel Gamarra Moreno
Juan Gamarra Moreno
Jos Yarasca Bejarano

CONDICION
Nombrado

CATEGORIA
Asociado

DEDICACION
T.C.

Auxiliar

T.P.

FIRMA

Colaborador
Colaborador

Contratado

___________________________
Ing Fidel O. Arauco Canturin
DIRECTOR DEL INSTITUTO DE
INVESTIGACION DE LA FIS

____________________________
M.Sc. Hugo Miguel Miguel
DIRECTOR DEL CENTRO DE
INVESTIGACION DE LA UNCP

Huancayo, 15 de diciembre de 2005.

UNIVERSIDAD NACIONAL DEL CENTRO DEL PER

Programacin con Visual Basic .NET

Abraham Esteban Gamarra Moreno


Job Daniel Gamarra Moreno
Juan Gamarra Moreno
Jos Yarasca Bejarano
2005

CONTENIDO
INTRODUCCION ...........................................................................................................................................1
CAPITULO UNO.............................................................................................................................................3
FUNDAMENTOS DEL VISUAL BASIC .NET............................................................................................3
1.1.
1.2.
1.3.
1.4.

INTRODUCCIN A VISUAL STUDIO.NET ...............................................................................3


OBJETIVO DEL .NET ...................................................................................................................3
EL ENTORNO DE TRABAJO .NET FRAMEWORK...................................................................3
UN PRIMER EJEMPLO.................................................................................................................6

CAPITULO DOS ...........................................................................................................................................11


TIPOS DE DATOS VARIABLES Y OPERADORES................................................................................11
2.1.
RESUMEN DE TIPOS DE DATOS .............................................................................................11
2.1.1. CONSUMO DE MEMORIA .....................................................................................................12
2.2.
CLASIFICACIN DE TIPOS ......................................................................................................13
2.2.1. Tipos de valor...........................................................................................................................13
2.2.2. Tipos de referencia...................................................................................................................13
2.3.
VARIABLES ................................................................................................................................14
2.3.1. DECLARACIN DE VARIABLES ...........................................................................................14
2.3.2. NIVELES DE DECLARACIN ................................................................................................14
2.3.3. Declarar el tipo de datos..........................................................................................................15
2.3.4. Declarar el perodo de duracin..............................................................................................16
2.3.5. Declarar el mbito ...................................................................................................................16
2.3.6. Declarar la accesibilidad.........................................................................................................17
2.3.7. EJEMPLOS DE DECLARACIONES DE VARIABLES ............................................................17
2.4.
OPERADORES ARITMTICOS.................................................................................................18
2.4.1. Operaciones aritmticas ..........................................................................................................19
2.5.
OPERADORES DE COMPARACIN ........................................................................................20
2.5.1. COMPARAR VALORES NUMRICOS ...................................................................................20
2.5.2. Comparar cadenas ...................................................................................................................21
2.5.3. Comparar objetos.....................................................................................................................22
2.6.
OPERADORES DE CONCATENACIN ...................................................................................24
2.7.
OPERADORES LGICOS ..........................................................................................................25
CAPITULO TRES .........................................................................................................................................29
ESTRUCTURAS DE CONTROL (LGICA CONDICIONAL) ..............................................................29
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.

IF...THEN...ELSE (INSTRUCCIONES)................................................................................................29
SELECT...CASE ...............................................................................................................................35
INSTRUCCIONES WHILE...END WHILE ...........................................................................................38
DO...LOOP .....................................................................................................................................39
FOR...NEXT ....................................................................................................................................40
EJEMPLOS DEL USO DE ESTRUCTURAS DE CONTROL.....................................................42

CAPITULO CUATRO ..................................................................................................................................47


MATRICES ....................................................................................................................................................47
4.1.
INFORMACIN GENERAL SOBRE LAS MATRICES .............................................................................47
4.1.1. Dimensiones de matriz .............................................................................................................47
4.1.2. Tamao de matriz.....................................................................................................................48
4.2.
DECLARAR VARIABLES DE MATRIZ ................................................................................................48
4.2.1. Inicializar matrices ..................................................................................................................49
ii

PROGRAMACION CON VISUAL BASIC.NET

4.2.2. Lmites de tamao de matriz.................................................................................................... 51


4.2.3. Cambiar el tamao de matrices............................................................................................... 51
4.3.
USAR LAS MATRICES ..................................................................................................................... 52
4.3.1. Matrices multidimensionales ................................................................................................... 53
4.4.
CARACTERSTICAS AVANZADAS DE LAS MATRICES ....................................................................... 54
4.4.1. Asignacin de matrices............................................................................................................ 54
4.4.2. Devolver una matriz desde una funcin .................................................................................. 55
4.5.
EJEMPLO DEL USO DE ARREGLOS Y LISTBOX .................................................................. 56
CAPITULO CINCO...................................................................................................................................... 59
PROCEDIMIENTOS.................................................................................................................................... 59
5.1.
PROCEDIMIENTOS SUB........................................................................................................... 59
5.1.1. Declaracin de argumentos..................................................................................................... 60
5.1.2. Sintaxis de llamada.................................................................................................................. 60
5.2.
RETURN (INSTRUCCIN) ............................................................................................................... 61
5.3.
PROCEDIMIENTOS FUNCTION ........................................................................................................ 62
5.3.1. Valores devueltos..................................................................................................................... 62
5.3.2. Sintaxis de llamada.................................................................................................................. 64
5.4.
FUNCIONES MATEMTICAS ........................................................................................................... 65
5.5.
EJEMPLO DEL USO DE SUB Y FUNCTION ......................................................................................... 70
CAPITULO SEIS .......................................................................................................................................... 75
GRFICOS GDI+ ......................................................................................................................................... 75
6.1.
CREAR IMGENES GRFICAS CON GDI+ ....................................................................................... 76
6.1.1. Crear un objeto Graphics........................................................................................................ 76
6.1.2. PaintEventArgs en el controlador de eventos Paint ................................................................ 77
6.1.3. CreateGraphics (Mtodo)........................................................................................................ 77
6.1.4. Crear un objeto Graphics a partir de un objeto Image ........................................................... 78
6.2.
DIBUJAR Y MANIPULAR FORMAS E IMGENES ............................................................................... 78
6.2.1. Dibujar lneas y formas con GDI+.......................................................................................... 79
6.3.
EJEMPLO 1 DEL USO DE GRAFICOS GDI+......................................................................................... 80
6.4.
GRAPHICS (MTODOS DE) ............................................................................................................. 82
BIBLIOGRAFIA ........................................................................................................................................... 91
INDICE ALFABETICO ............................................................................................................................... 93

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

iii

iv

PROGRAMACION CON VISUAL BASIC.NET

INTRODUCCION

Desde que Microsoft ha lanzado Visual Studio .NET, una plataforma con cuatro lenguajes de programacin, surge la necesidad de conocer como elaborar aplicaciones para Windows y/o
aplicaciones para la Web.
Uno de los lenguajes ms utilizados desde visual Studio 6.0,
ha sido el Visual Basic y el lenguaje que evoluciona a este
es el Visual Basic .NET por lo que para el presente libro se
sientan las bases para el dominio de este ltimo.
El primer captulo trata de los fundamentos del Visual Basic
.NET, en el segundo captulo se describe los tipos de datos,
variables y operadores del Visual Basic .NET; el tercer captulo describe las estructuras de control, el cuarto captulo
muestra el uso de las matrices, el quinto captulo trata sobre el uso de los procedimientos y el sexto captulo trata
sobre los grficos GDI+.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

CAPITULO UNO
FUNDAMENTOS DEL VISUAL BASIC .NET
1.1. INTRODUCCIN A VISUAL STUDIO.NET
Visual Studio .NET es un conjunto completo de herramientas de desarrollo para la construccin de aplicaciones Web ASP, servicios Web XML, aplicaciones para
escritorio y aplicaciones mviles. Visual Basic .NET,
Visual C++ .NET, Visual C# .NET y Visual J# .NET utilizan el mismo entorno de desarrollo integrado (IDE),
que les permite compartir herramientas y facilita la
creacin de soluciones en varios lenguajes. Asimismo,
dichos lenguajes aprovechan las funciones de .NET Framework, que ofrece acceso a tecnologas clave para
simplificar el desarrollo de aplicaciones Web ASP y
servicios Web XML.

1.2. OBJETIVO DEL .NET


El objetivo final de la iniciativa .NET es transportar
la informacin al usuario de una forma ms limpia, ms
rpida y ms accesible. La figura 1.1 muestra esta
perspectiva.

1.3. EL ENTORNO DE TRABAJO .NET FRAMEWORK


El entorno .NET Framework es el corazn de la plataforma .NET. Este entorno de trabajo proporciona los
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

servicios necesarios para desarrollar e implantar las


aplicaciones dentro del deslavazado entorno de Internet. La Figura 1.2 ilustra los componentes clave de
esta estructura.

Figura 1.1 Objetivo final de la iniciativa .NET

.NET Framework es una nueva plataforma informtica que


simplifica el desarrollo de aplicaciones en un entorno
altamente distribuido como es Internet. El diseo de
.NET Framework est enfocado a cumplir los objetivos
siguientes:

Proporcionar un entorno coherente de programacin


orientada a objetos, en el que el cdigo de los
objetos se pueda almacenar y ejecutar de forma
local, ejecutar de forma local pero distribuida
en Internet o ejecutar de forma remota.

PROGRAMACION CON VISUAL BASIC.NET

Proporcionar un entorno de ejecucin de cdigo


que reduzca lo mximo posible la implementacin
de software y los conflictos de versiones.

Figura 1.2 Estructura del entorno de trabajo Framework .NET

Ofrecer un entorno de ejecucin de cdigo que garantice la ejecucin segura del mismo, incluso
del creado por terceras personas desconocidas o
que no son de plena confianza.

Proporcionar un entorno de ejecucin de cdigo


que elimine los problemas de rendimiento de los
entornos en los que se utilizan secuencias de comandos o intrpretes de comandos.

Ofrecer al programador una experiencia coherente


entre tipos de aplicaciones muy diferentes, como
las basadas en Windows o en el Web.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

Basar toda la comunicacin en estndares del sector para asegurar que el cdigo de .NET Framework
se puede integrar con otros tipos de cdigo.

.NET Framework contiene dos componentes principales:


Common Language Runtime (Fundamentos comunes entre
lenguajes) y la biblioteca de clases de .NET Framework.
Common Language Runtime es el fundamento de la tecnologa. El motor de tiempo de ejecucin se puede considerar como un agente que administra el cdigo en tiempo de ejecucin y proporciona servicios centrales, como la administracin de memoria, la administracin de
subprocesos y la interaccin remota, al tiempo que
aplica una seguridad estricta a los tipos y otras formas de especificacin del cdigo que garantizan su seguridad y solidez. De hecho, el concepto de administracin de cdigo es un principio bsico del motor de
tiempo de ejecucin. El cdigo destinado al motor de
tiempo de ejecucin se denomina cdigo administrado, a
diferencia del resto de cdigo, que se conoce como cdigo no administrado.
La biblioteca de clases, el otro componente principal
de .NET Framework, es una completa coleccin orientada
a objetos de tipos reutilizables que se pueden emplear
para desarrollar aplicaciones que abarcan desde las
tradicionales herramientas de interfaz grfica de
usuario (GUI) o de lnea de comandos hasta las aplicaciones basadas en las innovaciones ms recientes proporcionadas por ASP.NET, como los formularios Web
Forms y los servicios Web XML.

1.4. UN PRIMER EJEMPLO


En este tem mostramos la creacin de nuestra primera
aplicacin. Ingrese al Visual Studio .NET 2003 (figura
1.3).

PROGRAMACION CON VISUAL BASIC.NET

Figura 1.3 Ingreso al Visual Studio .NET 2003

Elija Archivo, Nuevo, Proyecto; para iniciar la creacin de un nuevo proyecto (figura 1.4).

Figura 1.4
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

Elija Aplicacin para windows, escriba un nombre para


el proyecto y elija un directorio de trabajo (figura
1.5).

Figura 1.5

Ahora tenemos un formulario tal como se muestra en la


figura 1.6.
En el cuadro de herramientas, ficha windows forms,
elija Label, desplcese al formulario y abra una caja
de texto. Para cambiar el contenido del texto, en la
ventana propiedades elija text y escriba Mi primer
ejemplo, luego cambie el tamao del fuente en Font.
La figura 1.7. muestra el efecto final.
Para ejecutar el programa presione la tecla F5 o elija
el icono Iniciar. El resultado de la ejecucin del
programa se muestra en la figura 1.8.

PROGRAMACION CON VISUAL BASIC.NET

Figura 1.6

Figura 1.7
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

Figura 1.8

10

PROGRAMACION CON VISUAL BASIC.NET

CAPITULO DOS
TIPOS DE DATOS VARIABLES Y OPERADORES
2.1. RESUMEN DE TIPOS DE DATOS
La tabla siguiente muestra los tipos de datos de Visual Basic .NET, los tipos correspondientes de Common
Language Runtime, su asignacin de almacenamiento nominal y sus intervalos de valores.

Tipo de
Visual
Basic
Boolean

Estructura de tipo Asignacin


Intervalo de valores
Common Language
de almacenaRuntime
miento nominal
System.Boolean
True o False
2 bytes

Byte
Char
Date

System.Byte
System.Char
System.DateTime

1 byte
2 bytes
8 bytes

Decimal

System.Decimal

16 bytes

0 a 255 (sin signo)


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

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

11

Double
(punto
flotante
con precisin doble)
Integer
Long
(entero
largo)
Object

System.Double

8 bytes

System.Int32
System.Int64

4 bytes
8 bytes

System.Object
(clase)
System.Int16
System.Single

4 bytes

Short
Single
(punto
flotante
con precisin simple)
System.String
String
(cadena de (clase)
longitud
variable)
(hereda de SysTipo de
datos de- tem.ValueType)
finido por
el usuario
(estructura)

2 bytes
4 bytes

En funcin
de la plataforma de
implementacin
En funcin
de la plataforma de
implementacin

-1,79769313486231570E+308 a
-4,94065645841246544E-324 para valores
negativos;
4,94065645841246544E-324 a
1,79769313486231570E+308 para valores
positivos.
-2.147.483.648 a 2.147.483.647
-9.223.372.036.854.775.808 a
9.223.372.036.854.775.807.
Cualquier tipo puede almacenarse en
una variable de tipo Object.
-32.768 a 32.767.
-3,4028235E+38 a 1,401298E-45 para
valores negativos; 1,401298E-45 a
3,4028235E+38 para valores positivos.

De 0 a 2.000 millones de caracteres


Unicode aprox.

Cada miembro de la estructura tiene un


intervalo de valores determinado por
su tipo de datos e independiente de
los intervalos de valores correspondientes a los dems miembros.

Nota
En el caso de cadenas que contienen texto, utilice la funcin StrConv para convertir de un formato
de texto a otro.

2.1.1. CONSUMO DE MEMORIA


Al declarar un tipo de datos bsico, no debe
suponerse que su consumo de memoria es igual
a su asignacin de almacenamiento nominal.
Common Language Runtime asigna el almacenamiento en funcin de las caractersticas de
la plataforma en la que se ejecuta la aplicacin. En algunas situaciones, empaqueta los
elementos declarados en el menor espacio posible; en otros casos alinea las direcciones
de memoria con los lmites naturales del
hardware. Adems, la asignacin de almacenamiento es diferente en las plataformas de 64
bits y 32 bits.
Las mismas consideraciones se aplican a cada
miembro de un tipo de datos compuesto como
una estructura o una matriz. Adems, algunos
12

PROGRAMACION CON VISUAL BASIC.NET

tipos compuestos tienen requisitos adicionales de memoria. Por ejemplo, una matriz utiliza memoria adicional para la matriz en s y
para cada dimensin. En una plataforma de 32
bits, esta sobrecarga corresponde a 12 bytes
y 8 bytes por cada dimensin. En una plataforma de 64 bits, los requisitos se duplican.
No se puede sumar simplemente todas las asignaciones de almacenamiento nominales de los
componentes.
Una variable Object que haga referencia a un
tipo de datos bsico o compuesto, utiliza 4
bytes adems de los datos contenidos en el
tipo de datos.

2.2. CLASIFICACIN DE TIPOS


El sistema de tipos comn es compatible con dos categoras generales de tipos, que a su vez se dividen en
subcategoras:

2.2.1. TIPOS DE VALOR


Los tipos de valor contienen directamente sus
datos y las instancias de los tipos de valor
se asignan en la pila o se asignan en lnea
en una estructura. Los tipos de valor pueden
ser integrados (implementados por el motor de
tiempo de ejecucin), definidos por el usuario o enumeraciones. Las variables que son
tipos de valor tienen, cada una, su propia
copia de los datos y, por lo tanto, las operaciones en una variable no afectan a las dems.

2.2.2. TIPOS DE REFERENCIA


Los tipos de referencia guardan una referencia a la direccin en memoria del valor y se
asignan en el montn. Los tipos de referencia
pueden ser tipos autodescriptivos, de puntero
o de interfaz. El tipo de un tipo de referencia se puede determinar a partir de los valores de los tipos autodescriptivos. Los tipos
autodescriptivos se dividen en matrices y tipos de clase. Los tipos de clase son clases
definidas por el usuario, tipos de valor a
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

13

los que se ha aplicado la conversin boxing y


delegados. Las variables que son tipos de referencia pueden hacer referencia al mismo objeto y, por lo tanto, las operaciones en una
variable pueden afectar al mismo objeto al
que hace referencia otra variable.

2.3.

VARIABLES
Identificadores son conjuntos de letras y/o nmeros
que se utilizan para simbolizar todos los elementos
que en un programa son definibles por el usuario (programador o ingeniero de software) del mismo como son
las variables donde se almacenan datos, funciones( pequeos mdulos con cdigo), etiquetas, clases, objetos, etc.
Una variable se define como un identificador que se
utiliza para almacenar todos los datos generados durante la ejecucin de un programa.
Existen ciertas reglas en cuanto a variables:

Claras y con referencia directa al problema.

No espacios en blanco, ni smbolos extraos en


ellas.

Se pueden usar abreviaturas, pero solo de carcter general.

No deben ser palabras reservadas del lenguaje.

Algunos ejemplos de variables son: Nombre, Edad, SdoDiario, IngMensual, Permetro, Calif1, etc.

2.3.1. DECLARACIN DE VARIABLES


Una variable se declara para especificar su
nombre y sus caractersticas. La instruccin
de declaracin para variables es Dim. Su ubicacin y contenido determinan las caractersticas de la variable.

2.3.2. NIVELES DE DECLARACIN


Una variable local es aquella que se declara
dentro de un procedimiento. Una variable de
14

PROGRAMACION CON VISUAL BASIC.NET

mdulo se declara en el interior del mdulo,


pero no dentro de un procedimiento interno
del mdulo.
La categora de una variable que no sea local, en una clase o estructura, depende de
que la variable est o no compartida. Si una
variable se declara con la palabra clave Shared, es una variable compartida, y existe en
una nica copia compartida por todas las instancias de la clase o estructura. De lo contrario, es una variable de instancia, y se
crea una copia independiente de ella para cada instancia de la clase o estructura. Una
copia determinada de una variable de instancia slo est disponible en la instancia para
la cual se cre.

2.3.3. DECLARAR EL TIPO DE DATOS


La clusula As de la instruccin de declaracin permite definir el tipo de datos o de
objetos de la variable que se est declarando. Se puede especificar cualquiera de los
siguientes tipos para una variable:

Un
tipo
de
datos
elemental,
Boolean, Long o Decimal.

Un tipo de datos compuesto, como una matriz o una estructura.

Un tipo de objeto, o de clase, de Visual


Basic u otra aplicacin, como Label o
TextBox.

como

Se pueden declarar distintas variables en la


misma instruccin sin necesidad de repetir el
tipo de datos. En las instrucciones que se
muestran a continuacin, las variables I, J y
K se declaran como de tipo Integer, L y M como Long y X e Y como Single:
Dim I, J, K As Integer

' All three are Integer variables.

Dim L, M As Long, X, Y As Single


are Single.

' L and M are Long, X and Y

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

15

2.3.4. DECLARAR EL PERODO DE DURACIN


El perodo de duracin de una variable representa el tiempo durante el cual la variable
est disponible para que pueda ser utilizada.
Una variable local declarada con una instruccin Dim slo existe durante la ejecucin del
procedimiento. Cuando finaliza el procedimiento, todas sus variables locales desaparecen y sus valores se pierden. No obstante, si
se declara una variable local con la palabra
clave Static, sta seguir existiendo y conservar su valor aunque finalice el procedimiento.
Las variables de mdulo, compartidas y de
instancia conservan sus valores mientras
contine la ejecucin de la aplicacin.

2.3.5. DECLARAR EL MBITO


El mbito de una variable est formado por
todo cdigo que puede hacer referencia a la
variable sin tener que especificar su nombre.
El mbito de una variable est determinado
por la ubicacin en la que se haya declarado
la variable. El cdigo de una regin determinada puede utilizar las variables definidas
en dicha regin sin necesidad de especificar
los nombres de las variables. Cuando se declara un mbito, se aplican las siguientes
reglas:

16

El mbito de una variable de mdulo es


el espacio de nombres completo en el que
est definido el mdulo.

El mbito de una variable de instancia o


compartida es la estructura o clase en
la que se ha declarado.

El mbito de una variable local es el


procedimiento en el que se ha declarado.

No obstante, si se declara una variable


local dentro de un bloque, su mbito ser nicamente el propio bloque. Un bloque es un conjunto de instrucciones que
PROGRAMACION CON VISUAL BASIC.NET

terminan por una instruccin End, Else,


Loop o Next; por ejemplo, una construccin For...Next o If...Then...Else...End
If.

2.3.6. DECLARAR LA ACCESIBILIDAD


La accesibilidad de una variable viene determinada por la palabra o palabras clave, Dim,
Public, Protected, Friend, Protected Friend o
Private, que se utilizan en la instruccin de
declaracin. Con cualquiera de estas palabras
clave se puede declarar una variable de mdulo, estructura, clase o instancia. Dentro de
un procedimiento, solamente est permitida la
palabra clave Dim, y la accesibilidad siempre
es privada.

2.3.7. EJEMPLOS DE DECLARACIONES DE VARIABLES


Para asignar a una variable un valor se procede de la siguiente manera

se declara la variable y

luego se asigna con el operador =. Se


presentan 2 opciones:
a. Dim

va As Integer

va=5
b. Dim va As Integer=5
Y las constantes se declaran como
Const n as Integer=10
En esta lnea no usamos Dim porque es constante precisamente.
Tambin se pueden declarar varias variables
en una misma lnea por ejemplo:
Dim a,b,c As Short
En la lnea anterior a, b y c sern de tipo
Short
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

17

Lo anterior se pudo haber escrito como:


Dim a As Short
Dim b As Short
Dim c As Short
O bien
Dim a As Short,b As Short,c As Short
No es recomendable dejar una variable sin indicar el tipo por ejemplo:
Dim i
Esto generara un error despus de declarar
la Option Strict en On, porque indicara que
no se debe dejar sin declarar el tipo.
Algo que no se puede hacer es lo siguiente:
Dim i,b As short=5
Porque generara un error indicando que no se
puede inicializar varias variables al tiempo.
Lo cual se hara de la siguiente manera:
Dim a As Short,b As short=5
Aunque solo b tendr un valor de 5
Igualmente
Dim a As Short,b,c As integer,d As Short=3
Slo d tendr un valor de 3
Todas las variables numricas al no inicializarlas tendrn como valor inicial 0, las variables de tipo char tendrn un null o vaca.

2.4. OPERADORES ARITMTICOS


Los operadores aritmticos se utilizan para realizar
muchas de las operaciones aritmticas habituales que
implican el clculo de valores numricos representados
18

PROGRAMACION CON VISUAL BASIC.NET

por literales, variables, otras expresiones, llamadas


a funciones y propiedades, y constantes.

2.4.1. OPERACIONES ARITMTICAS


Puede sumar dos valores en una expresin con
el operador + o restar un valor de otro con
el operador -, como se muestra en los siguientes ejemplos:
Dim x As Integer
x = 67 + 34
x = 32 - 12

La negacin tambin utiliza el operador -,


pero con una sintaxis algo diferente, como se
muestra a continuacin:
Dim x As Integer = 65
Dim y As Integer
y = -x
La multiplicacin y la divisin utilizan los
operadores * y /, respectivamente, como en
estos ejemplos:
Dim y As Double
y = 45 * 55.23
y = 32 / 23
La exponenciacin utiliza el operador ^, como
se muestra a continuacin:
Dim z As Double
z = 23 ^ 3

' z equals the cube of 23.

La divisin de enteros se lleva a cabo con el


operador \. La divisin de enteros devuelve
el nmero de veces que un entero puede dividirse exactamente en otro. Con este operador,
slo se pueden utilizar tipos enteros (Byte,
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

19

Short, Integer y Long). Todos los dems tipos


deben convertirse antes a tipo integral. A
continuacin se muestra un ejemplo de una
divisin de enteros:
Dim k As Integer
k = 23 \ 5

' k = 4

El mdulo aritmtico se calcula con el operador Mod. Este operador devuelve el resto una
vez que se divide el divisor por el dividendo
un nmero integral de veces. Si tanto el divisor como el dividendo son tipos integrales,
el valor devuelto es integral. Si el divisor
y el dividendo son tipos de punto flotante,
el valor devuelto es una variable de punto
flotante. Dos ejemplos ilustran este comportamiento:
Dim x As integer = 100
Dim y As Integer = 6
Dim z As Integer
z = x Mod y

' z equals 4.

Dim a As Double = 100.3


Dim b As Double = 4.13
Dim c As Double
c = a Mod b

' c equals 1.18.

2.5. OPERADORES DE COMPARACIN


Los operadores de comparacin comparan dos expresiones
y devuelven un valor Boolean que representa el resultado de la comparacin. Existen operadores para comparar valores numricos, operadores para comparar cadenas y operadores para comparar objetos. Los tres tipos
de operadores se describen a continuacin.

2.5.1. COMPARAR VALORES NUMRICOS


Para comparar valores numricos se utilizan
seis operadores de comparacin numrica. En
la siguiente tabla se muestran los operadores
20

PROGRAMACION CON VISUAL BASIC.NET

y un ejemplo de la condicin que prueba cada


uno.
Operador
= (Igualdad)

<> (Desigualdad)

< (Menor que)

> (Mayor que)

<= (Menor o igual


que)

>= (Mayor o igual


que)

Condicin que prueba


Es el valor que representa la primera
expresin igual que
el valor que representa la segunda?
Es el valor que representa la primera
expresin no igual
que el valor que representa la segunda?
Es el valor que representa la primera
expresin menor que
el valor que representa la segunda?
Es el valor que representa la primera
expresin mayor que
el valor que representa la segunda?
Es el valor que representa la primera
expresin menor o
igual que el valor
que representa la
segunda?
Es el valor que representa la primera
expresin mayor o
igual que el valor
que representa la
segunda?

Ejemplos
23 = 33 ' False
23 = 23 ' True
23 = 12 ' False

23 <> 33 ' True


23 <> 23 ' False
23 <> 12 ' True

23 < 33 ' True


23 < 23 ' False
23 < 12 ' False

23 > 33 ' False


23 > 23 ' False
23 > 12 ' True

23 <= 33 ' True


23 <= 23 ' True
23 <= 12 ' False

23 >= 33 ' False


23 >= 23 ' True
23 >= 12 ' True

2.5.2. COMPARAR CADENAS


Para comparar cadenas se utiliza el operador
Like, as como los operadores de comparacin
numrica. El operador Like permite especificar un modelo; despus se compara la cadena
con el modelo y, si coincide, el resultado es
True. De lo contrario, el resultado es False.
Los operadores numricos permiten comparar
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

21

valores String basndose en el tipo de ordenacin:


"73" < "9"

' This result is True.

El resultado es True porque el primer carcter de la primera cadena se ordena antes que
el primer carcter de la segunda cadena. Si
los primeros caracteres fueran iguales, la
comparacin continuara con el siguiente carcter de las dos cadenas, y as sucesivamente. La igualdad de cadenas tambin se puede
probar mediante el operador de igualdad, como
en este ejemplo:
"734" = "734"

' The result is True.

En este ejemplo, las dos cadenas se comparan


directamente y, puesto que son iguales, se
devuelve True.
Si una
"aa" y
despus
guiente

cadena es un prefijo de otra, como


"aaa", la cadena ms larga se ordena
de la ms corta. Por tanto, la siexpresin es verdadera (True):

"aaa" > "aa"

El criterio de ordenacin se basar en una


comparacin binaria o una comparacin textual
en funcin del valor de Option Compare.

2.5.3. COMPARAR OBJETOS


Puede utilizar el operador Is para determinar
si dos variables de objeto hacen referencia a
la misma instancia de un objeto. Por ejemplo:
Dim x As MyClass
Dim y As New MyClass()
x = y
If x Is y Then
' Insert code to continue program execution.

22

PROGRAMACION CON VISUAL BASIC.NET

En este ejemplo, la evaluacin de x Is y devuelve True, porque las dos variables hacen
referencia a la misma instancia. Compare este
resultado con el del ejemplo siguiente:
Dim x As New MyClass()
Dim y As New MyClass()
If x Is y then
' Insert code to continue program execution.
En este ejemplo, la evaluacin de x Is y devuelve False, puesto que aunque las variables
son del mismo tipo, hacen referencia a instancias diferentes de ese tipo.
Para probar si un objeto es de un tipo concreto se utiliza el operador TypeOf...Is. .
La sintaxis es la siguiente:
TypeOf <object expression> Is <TypeName>
Cuando TypeName especifica un tipo de interfaz, el operador TypeOf ... Is devuelve True
si el objeto implementa el tipo de interfaz.
Cuando TypeName es un tipo de clase, el operador devuelve True (verdadero) si el objeto
es una instancia de la clase especificada o
una instancia que se deriva de la especificada. Por ejemplo:
Dim x As Button
x = New Button()
If TypeOf x Is Control Then
' Insert code to continue program execution.
Puesto que el tipo de x es Button, y Button
hereda de Control, la expresin TypeOf x Is Control se evala como True.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

23

2.6. OPERADORES DE CONCATENACIN


Los operadores de concatenacin combinan varias cadenas en una sola. Hay dos operadores de concatenacin,
+ y &; ambos llevan a cabo la operacin de concatenacin bsica, como se muestra a continuacin:
Dim x As String
x = "Con" & "caten" & "ation"
' x equals "Concatenation".
x = "Con" + "caten" + "ation"
' x equals "Concatenation".
Estos operadores tambin concatenan variables String,
como en el ejemplo siguiente:
Dim x As String = "abc"
Dim y As String = "def"
Dim z As String
z = x & y

' z equals "abcdef".

z = x + y

' z equals "abcdef".

Si el valor de Option Strict es On, el operador + requiere explcitamente cadenas para las operaciones de
concatenacin. Tambin realiza operaciones aritmticas
con operandos numricos cuando el valor de Option
Strict es On. No obstante, si el valor de Option
Strict es Off, el operador + admite una amplia variedad de conversiones implcitas para operaciones de
concatenacin, tal como se muestra en los siguientes
ejemplos:
Option Strict On
' Initialize mixed variables.
var1 = "34"
var2 = 6
myNumber = var1 + var2
error.
24

' Generates a compile-time


PROGRAMACION CON VISUAL BASIC.NET

Option Strict Off


Var1 = "34"
Var2 = 6
myNumber = var1 + var2
' Returns 40 (addition) after the string in var1 is
' converted to a numeric value. Use of Option Strict
Off
' for these operations is not recommended.
El operador & slo se define para operandos de tipo
String y siempre ampla sus operandos a String, independientemente de la configuracin de Option Strict.
El operador & est recomendado para la concatenacin
de cadenas, porque est definido exclusivamente para
cadenas y reduce las posibilidades de generar una conversin no deseada.

2.7. OPERADORES LGICOS


Los operadores lgicos comparan expresiones Boolean y
devuelven un resultado Boolean. Los operadores And,
Or, AndAlso, OrElse y Xor aceptan dos operandos, mientras que el operador Not slo acepta un operando.
El operador Not realiza la negacin lgica de una expresin Boolean. En trminos simples, proporciona lo
contrario de la expresin que evala. Si la evaluacin
de la expresin devuelve True, Not proporciona False;
si devuelve False, Not proporciona True. A continuacin se muestra un ejemplo:
Dim x As Boolean
x = Not 23 > 12

' x equals False.

x = Not 23 > 67

' x equals True.

El operador And realiza la conjuncin lgica de dos


expresiones Boolean. Es decir, si la evaluacin de ambas expresiones es True, el operador And devuelve
True. Si al evaluar una o las dos expresiones se obtiene False, And devuelve False.
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

25

El operador Or realiza la disyuncin lgica de dos expresiones Boolean. Si la evaluacin de alguna expresin devuelve True, Or devuelve True. Si la evaluacin
de alguna expresin devuelve True, Or devuelve False.
Xor realiza la exclusin lgica en dos expresiones. Si
la evaluacin de una de las expresiones devuelve True
(pero no las dos), Xor devuelve True. Si la evaluacin
devuelve True o False para las dos expresiones, Xor
devuelve False.
A continuacin se muestran ejemplos de uso de los operadores And, Or y Xor:
Dim x As Boolean
x = 23 > 12 And 12 >4

' x = True

x = 12 > 23 And 12 > 4

' x = False

x = 23 > 12 Or 4 > 12`

' x = True

x = 23 > 45 Or 4 > 12

' x = False

x = 23 > 45 Xor 12 > 4

' x = True

x = 23 > 12 Xor 12 > 4

' x = False

x = 12 > 23 Xor 4 > 12

' x = False

Nota: Adems de ser operadores lgicos, Not, Or, And y


Xor tambin realizan operaciones aritmticas bit a bit
cuando se utilizan en valores numricos.
El operador AndAlso es muy similar al operador And, ya
que tambin realiza la conjuncin lgica de dos expresiones Boolean. La diferencia clave entre AndAlso y
And es que AndAlso muestra comportamiento de cortocircuito. Si el valor de la primera expresin evaluada
de una expresin AndAlso es False, no se evaluar la
segunda expresin y se devolver False para la expresin AndAlso.
De manera similar, el operador OrElse realiza la disyuncin lgica de evaluacin "cortocircuitada" de dos
expresiones Boolean. Si la evaluacin de la primera
expresin de una expresin OrElse devuelve True, no se
evaluar la segunda expresin y se devolver True para
la expresin OrElse. A continuacin se muestran algu26

PROGRAMACION CON VISUAL BASIC.NET

nos ejemplos que ilustran la diferencia entre And, Or


y sus equivalentes:
12 > 45 And MyFunction(4) ' MyFunction() is called.
12 > 45 AndAlso MyFunction(4)
called.
45 > 12 Or MyFunction(4)

' MyFunction() is not

' MyFunction is called.

45 > 12 OrElse MyFunction(4)


called

' MyFunction is not

En el primer ejemplo, se llama a MyFunction() aunque 12


> 45 devuelve False, debido a que no se "cortocircuita" la evaluacin de And. En el segundo ejemplo, no se
llama a MyFunction porque 12 > 45 devuelve False, con lo
cual AndAlso "cortocircuita" la evaluacin de la segunda expresin. En el tercer ejemplo, se llama a MyFunction aunque 45 > 12 devuelve True, debido a que no
se "cortocircuita" la evaluacin de Or. En el cuarto
ejemplo, no se llama a MyFunction porque 45 > 12 devuelve
True, con lo cual OrElse "cortocircuita" la evaluacin
de la segunda expresin.
Nota: Aunque And y Or admiten operaciones bit a bit
con valores numricos, AndAlso y OrElse no lo hacen.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

27

CAPITULO TRES
ESTRUCTURAS DE CONTROL (LGICA
CONDICIONAL)
Estas estructuras permiten al programa tomar decisiones, en
funcin de los resultados de una condicin.

3.1. IF...THEN...ELSE (INSTRUCCIONES)


Ejecuta de forma condicional un grupo de instrucciones, dependiendo del valor de una expresin.
If condition [ Then ]
[ statements ]
[ ElseIf elseifcondition [ Then ]
[ elseifstatements ] ]
[ Else
[ elsestatements ] ]
End If

O bien
If condition Then [ statements ] [ Else elsestatements ]

Donde:
Condition: Requerido. La expresin que proporcione en
condition debe evaluarse como True o False, o como un
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

29

tipo de datos que sea implcitamente convertible a


Boolean.
Statements: Opcional en formato de mltiples lneas;
se requiere en formato de una sola lnea que no tenga
una clusula Else. Se ejecutan una o ms instrucciones
que siguen a If...Then si condition es True.
Elseifcondition: Requerido si est presente ElseIf.
Igual que condition.
Elseifstatements: Opcional. Se ejecutan una o ms instrucciones que siguen a ElseIf...Then si la elseifcondition asociada es True.
Elsestatements: Opcional en formato de mltiples lneas; se requiere en formato de una sola lnea que
tenga una clusula Else. Una o ms instrucciones que
se ejecuten si ninguna de las expresiones anteriores
condition o elseifcondition es True.
End If: Termina un bloque If...Then.
Nota:
Puede utilizar la forma de una sola lnea para pruebas
cortas y sencillas. Sin embargo, el formato de mltiples lneas proporciona ms estructura y flexibilidad
que el formato de una sola lnea y, generalmente, es
ms fcil de leer, mantener y depurar.
Con el formato de una sola lnea, es posible ejecutar
varias instrucciones como resultado de una decisin
If...Then. Todas las instrucciones deben estar en la
misma lnea y separadas por dos puntos, como en el
ejemplo siguiente:
If A > 10 Then A = A + 1 : B = B + A : C = C + B
En el formato de mltiples lneas, la instruccin If
debe ser la nica instruccin en la primera lnea. Las
instrucciones Else, ElseIf y End If pueden ir precedidas solamente por una etiqueta de lnea. La instruccin If...Then...Else de varias lneas debe finalizar
con una instruccin End If.
Para determinar si una instruccin If introduce un
formato de mltiples lneas, examine lo que sigue a la
palabra clave Then. Si aparece cualquier otra cosa que
no sea un comentario despus de Then en la misma ins30

PROGRAMACION CON VISUAL BASIC.NET

truccin, sta se trata como una instruccin If de una


sola lnea. Si Then no est definida, debe ser el comienzo de una instruccin If...Then...Else de mltiples lneas.
Las clusulas ElseIf y Else son opcionales. Puede tener tantas clusulas ElseIf como desee en una instruccin If...Then...Else de mltiples lneas, pero no
puede aparecer ninguna despus de una clusula Else.
Los formatos de mltiples lneas pueden anidarse unos
dentro de otros.
Cuando se encuentra una If...Then...Else de mltiples
lneas, se prueba condition. Si condition es True, se
ejecutan las instrucciones que estn a continuacin de
Then. Si condition es False, se evala cada instruccin ElseIf en orden. Cuando se encuentra una elseifcondition True, se ejecutan las instrucciones que siguen inmediatamente a la instruccin Then asociada. Si
ninguna elseifcondition se evala como True, o no
existen instrucciones ElseIf, se ejecutan las instrucciones que siguen a Else. Despus de la ejecucin de
las instrucciones que siguen a Then, ElseIf o Else, la
ejecucin contina con la instruccin que sigue a End
If.
Sugerencia
Select...Case puede ser ms til cuando
se evala una nica expresin que tiene varios valores
posibles.
Ejemplo (1): Realice un programa que lea un nmero y
calcule el valor absoluto. La entrada de datos y la
salida debe utilizar el siguiente formulario:

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

31

Solucin: Pegue dos controles Label,


TextBox y tres controles Button.

dos

controles

Modifique la propiedad Text de cada control para modificar sus textos.


Realice doble clic en el control para aadir cdigo al
programa. El cdigo encerrado es el que debemos aadir
para este ejemplo. El cdigo que no est encerrado ha
sido generado por el Visual Basic .NET.

Public Class Form1


Inherits System.Windows.Forms.Form
#Region " Cdigo generado por el Diseador de Windows Forms "
Public Sub New()
MyBase.New()
'El Diseador de Windows Forms requiere esta llamada.
InitializeComponent()
'Agregar cualquier inicializacin despus de la llamada a InitializeComponent()
End Sub
'Form reemplaza a Dispose para limpiar la lista de componentes.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requerido por el Diseador de Windows Forms
Private components As System.ComponentModel.IContainer
'NOTA: el Diseador de Windows Forms requiere el siguiente procedimiento
'Puede modificarse utilizando el Diseador de Windows Forms.
'No lo modifique con el editor de cdigo.
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents Button3 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Label1 = New System.Windows.Forms.Label
32

PROGRAMACION CON VISUAL BASIC.NET

Me.TextBox1 = New System.Windows.Forms.TextBox


Me.Button1 = New System.Windows.Forms.Button
Me.Label2 = New System.Windows.Forms.Label
Me.TextBox2 = New System.Windows.Forms.TextBox
Me.Button2 = New System.Windows.Forms.Button
Me.Button3 = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(16, 16)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(104, 24)
Me.Label1.TabIndex = 0
Me.Label1.Text = "Ingrese un nmero"
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(136, 16)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(96, 20)
Me.TextBox1.TabIndex = 1
Me.TextBox1.Text = ""
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(32, 72)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(136, 24)
Me.Button1.TabIndex = 2
Me.Button1.Text = "Halllar el valor absoluto"
'
'Label2
'
Me.Label2.Location = New System.Drawing.Point(16, 128)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(96, 24)
Me.Label2.TabIndex = 3
Me.Label2.Text = "Valor absoluto"
'
'TextBox2
'
Me.TextBox2.Location = New System.Drawing.Point(136, 120)
Me.TextBox2.Name = "TextBox2"
Me.TextBox2.Size = New System.Drawing.Size(96, 20)
Me.TextBox2.TabIndex = 4
Me.TextBox2.Text = ""
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(24, 176)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(96, 24)
Me.Button2.TabIndex = 5
Me.Button2.Text = "&Limpiar"
'
'Button3
'
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

33

Me.Button3.Location = New System.Drawing.Point(152, 176)


Me.Button3.Name = "Button3"
Me.Button3.Size = New System.Drawing.Size(104, 24)
Me.Button3.TabIndex = 6
Me.Button3.Text = "&Salir"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Controls.Add(Me.Button3)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.TextBox2)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.TextBox1)
Me.Controls.Add(Me.Label1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles TextBox2.TextChanged
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
If TextBox1.Text < 0 Then
TextBox2.Text = -1 * TextBox1.Text
Else
TextBox2.Text = TextBox1.Text
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
TextBox1.Text = ""
TextBox2.Text = ""
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
End
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles TextBox1.TextChanged
34

PROGRAMACION CON VISUAL BASIC.NET

End Sub
Private Sub TextBox1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter
End Sub
End Class

La ejecucin del programa se muestra a continuacin:

3.2. SELECT...CASE
Ejecuta uno de varios grupos de instrucciones, segn
el valor de una expresin.
Select [ Case ] testexpression
[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Donde:
Testexpression: Requerido. Expresin. Debe evaluarse
en uno de los tipos de datos elementales (Boolean,
Byte, Char, Date, Double, Decimal, Integer, Long,
Object, Short, Single o String).
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

35

Expressionlist: Requerido en una instruccin Case.


Lista de clusulas de expresiones que representan
valores
que
coinciden
para
testexpression.
Las
clusulas de varias expresiones se separan mediante
comas. Cada clusula puede tomar una de las siguientes
formas:

expression1 To expression2

[ Is ] comparisonoperator expression

expression

Utilice la palabra clave To para especificar los


lmites de un intervalo de valores que coinciden para
testexpression. El valor de expression1 debe ser menor
o igual que el valor de expression2.
Utilice la palabra clave Is con un operador de
comparacin (=, <>, <, <=, > o >=) para especificar
una restriccin en los valores coincidentes para
testexpression. Si no se escribe, la palabra clave Is
se
insertar
automticamente
antes
de
comparisonoperator.
La forma que slo especifica expression se trata como
un
caso
especial
de
la
forma
Is
donde
comparisonoperator es el signo igual (=). Esta forma
se evala como testexpression = expression.
Las expresiones en expressionlist pueden ser de
cualquier
tipo
de
datos,
siempre
que
sean
implcitamente convertibles al tipo de testexpression
y el correspondiente comparisonoperator sea vlido
para los dos tipos con los que se utilice.
Statements: Opcional. Una o ms instrucciones despus
de Case que se ejecutan si testexpression coincide con
cualquier clusula en expressionlist.
Elsestatements: Opcional. Una o ms instrucciones a
continuacin de Case Else que se ejecutan si
testexpression coincide con cualquier clusula de
expressionlist.
End Select: Termina un bloque Select...Case.

36

PROGRAMACION CON VISUAL BASIC.NET

Observaciones:
Si testexpression coincide con cualquier clusula Case
expressionlist, se ejecutan las instrucciones que siguen a la instruccin Case hasta la siguiente instruccin Case o End Select. El control pasa despus a la
instruccin que sigue a End Select. Si testexpression
coincide con una clusula de testexpression en ms de
una clusula Case, slo se ejecutan las instrucciones
que siguen a la primera coincidencia.
La instruccin Case Else se utiliza para introducir
las elsestatements que se ejecutarn si no se encuentra ninguna coincidencia entre testexpression y una
clusula de expressionlist en cualquiera de las dems
instrucciones Case. Aunque no es necesario, es recomendable tener una instruccin Case Else en el bloque
Select Case para controlar los valores de testexpression imprevistos. Si ninguna clusula Case expressionlist coincide con testexpression y no existe ninguna
instruccin Case Else, la ejecucin contina en la
instruccin que sigue a End Select.
Se pueden utilizar varias expresiones o intervalos en
cada clusula Case. Por ejemplo, la lnea siguiente es
vlida:
Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber
Nota
La palabra clave Is que se utiliza en las instrucciones Case y Case Else no es igual que el operador de comparacin Is.
Tambin puede especificar intervalos y varias expresiones para cadenas de caracteres. En el siguiente
ejemplo, Case coincide con cadenas que sean exactamente iguales a "apples", cadenas con valores entre
"nuts" y "soup" en orden alfabtico y con el valor actual de TestItem:
Case "apples", "nuts" To "soup", TestItem
La configuracin Option Compare puede afectar a las
comparaciones de cadenas. En Option Compare Text, las
cadenas "Apples" y "apples" se consideran iguales en
la comparacin, pero no as en Option Compare Binary.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

37

Las instrucciones Select Case pueden anidarse. Cada


instruccin Select Case anidada debe tener una instruccin End Select coincidente.
Si no necesita ejecutar ms instrucciones de un bloque
Case o Case Else, puede salir del bloque mediante una
instruccin Exit Select. Esto transfiere inmediatamente el control a la instruccin que sigue a End Select.

3.3. INSTRUCCIONES WHILE...END WHILE


Ejecuta una serie de instrucciones siempre que una
condicin dada sea True.
While condition
[ statements ]
End While
Donde:
Condition: Requerido. Expresin. Debe evaluarse como
True o False. Si condition es Nothing, condition se
trata como False.
Statements: Opcional. Se ejecutan una o ms instrucciones que siguen a While si condition es True.
End While: Termina la ejecucin del bloque While.

Observaciones:
Si condition es True, se ejecutan todas las instrucciones hasta que se encuentre la instruccin End While. Despus, el control vuelve a la instruccin While
y se comprueba de nuevo condition. Si condition an es
True, se repite el proceso. Si es False, la ejecucin
se reanuda con la instruccin que sigue a la instruccin End While.
Se pueden anidar bucles While si se coloca un bucle
dentro de otro.

38

PROGRAMACION CON VISUAL BASIC.NET

3.4. DO...LOOP
Repite un bloque de instrucciones mientras una condicin Boolean sea True o hasta que la condicin se convierta en True.
Do { While | Until } condition
[ statements ]
[ Exit Do ]
[ statements ]
Loop
O bien
Do
[ statements ]
[ Exit Do ]
[ statements ]
Loop { While | Until } condition
Donde:
While: Requerido, a menos que se utilice Until. Palabra clave. Repite el bucle hasta que condition sea
False.
Until: Requerido, a menos que se utilice While. Palabra clave. Repite el bucle hasta que condition sea
True.
Condition: Opcional. Boolean. Expresin que se evala
como True o False.
Statements: Opcional. Una o ms instrucciones que se
repiten mientras o hasta que condition sea True.
Observaciones:
La instruccin Exit Do transfiere el control inmediatamente a la instruccin que sigue a la instruccin
Loop. Se puede incluir cualquier nmero de instrucciones Exit Do en cualquier lugar del bucle Do. Exit Do
suele utilizarse despus de evaluar alguna condicin,
por ejemplo con If...Then...Else.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

39

3.5. FOR...NEXT
Repite un grupo de instrucciones un nmero de veces
especificado.
For counter [ As datatype ] = start To end [ Step step ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]

Donde:
Counter: Requerido. Variable. El tipo de datos de
counter suele ser Integer, pero puede ser cualquier
tipo numrico elemental que admita los operadores mayor o igual que (>=), menor o igual que (<=) y suma
(+).
Datatype: Requerido, a menos que counter ya se haya
declarado. Tipo de datos de counter. Si counter se declara fuera de este bucle, no se podr utilizar la
clusula As para volver a declararlo.
Start: Requerido. Expresin. Valor inicial de counter.
La expresin start suele evaluarse como tipo Integer,
pero puede evaluarse como cualquier tipo de datos que
se ample al tipo de counter.
End: Requerido. Expresin. Valor final de counter. La
expresin end suele evaluarse como tipo Integer, pero
puede evaluarse como cualquier tipo de datos que se
ample al tipo de counter.
Step: Opcional. Expresin. Cantidad en la que se incrementa counter cada vez que se ejecuta el bucle. La
expresin step suele evaluarse como tipo Integer, pero
puede evaluarse como cualquier tipo de datos que se
ample al tipo de counter. Si no se especifica, el valor predeterminado de step es 1.
Statements: Opcional. Una o ms instrucciones entre
For y Next que se ejecutan un nmero especificado de
veces.
Observaciones:
Si counter no se ha declarado fuera de este bucle, se
puede declarar dentro de la instruccin For. En tal
40

PROGRAMACION CON VISUAL BASIC.NET

caso, el mbito de counter es el cuerpo del bucle. Sin


embargo, counter no se puede declarar fuera y dentro
del bucle.
El argumento step puede ser positivo o negativo. El
valor del argumento step determina la manera en que se
procesa el bucle, como se muestra a continuacin:

Valor de step
Positivo o cero
Negativo

El bucle se ejecuta si
counter <= end
counter >= end

Las expresiones start, end y step slo se evalan una


vez, cuando se encuentra por primera vez la instruccin For. No se volvern a evaluar, aunque cambien las
partes que componen las instrucciones del bucle.
La variable counter se compara con end antes de cada
vez que se entra en el bucle. Esto incluye la primera
vez que se ejecuta la instruccin For. Por consiguiente, si el valor de start supera el valor de end al entrar en el bucle, ste no se ejecuta, y la ejecucin
pasa inmediatamente a la instruccin que sigue a Next.
Una vez que se han ejecutado las instrucciones del bucle, el valor de step se agrega a counter. En este momento, la instruccin For compara de nuevo counter con
end. Como resultado de esta comparacin, bien se ejecutan otra vez las instrucciones del bucle o se termina el bucle y la ejecucin contina con la instruccin
que sigue a Next.
Nota:
Cambiar el valor de counter mientras se est
dentro de un bucle puede dificultar la lectura y la
depuracin del cdigo.
La instruccin Exit For transfiere el control inmediatamente a la instruccin que sigue a la instruccin
Next. Se puede incluir cualquier nmero de instrucciones Exit For en cualquier lugar del bucle For...Next.
Exit For suele utilizarse despus de evaluar alguna
condicin,
por
ejemplo
con
una
instruccin
If...Then...Else.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

41

Se pueden anidar bucles For...Next, colocando un bucle


dentro de otro. Cada bucle debe tener una variable
counter nica. La siguiente construccin es correcta:
For I As Integer = 1 To 10
For J As Integer = 1 To 10
For K As Integer = 1 To 10
' Statements to operate with current values of I, J,
and K.
Next K
Next J
Next I

Nota:
Si se encuentra una instruccin Next antes que
su instruccin For correspondiente, o si una instruccin Next de un nivel de anidamiento externo se encuentra antes que la instruccin Next de un nivel interno, se produce un error.

3.6. EJEMPLOS
CONTROL

DEL

USO

DE

ESTRUCTURAS

DE

Ejemplo ( 2): Escribir un programa que permita leer un


nmero e imprima si es capica o no. Usar while.
Solucin:
Se utiliza el siguiente formulario:

Modificar el cdigo de acuerdo a lo siguiente:


42

PROGRAMACION CON VISUAL BASIC.NET

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim
Dim
Dim
Dim
Dim
Dim

n As Integer ' nmero


n1 As Integer 'variable auxiliar
qi, ri As Integer ' qi=cociente, ri=residuo
r As Integer ' r=residuo
nc As Integer = 0 'nc=numero de cifras del nmero
capicua As Boolean = True 'el numero es capicua

n = TextBox1.Text
'contar el nmero de cifras del nmero
n1 = n
While (n1 <> 0)
nc = nc + 1
n1 = n1 \ 10
End While
'verificar si es capicua
nc = nc - 1 'exponente para obtener el cociente entero
ri = n
While (n <> 0)
r = n Mod 10 'cifra de la derecha
qi = ri \ (10 ^ nc) 'cifra de la izquierda
If (r <> qi) Then
capicua = False
Exit While
End If
ri = ri Mod 10 ^ nc
n = n \ 10
nc = nc - 1
End While
If (capicua = True) Then
TextBox2.Text = "numero capicua"
Else
TextBox2.Text = "numero no capicua"
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
TextBox1.Text = ""
TextBox2.Text = ""
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
End
End Sub

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

43

Ejemplo (3): Escribir un programa que permita calcular


el MCD (Mximo comn divisor) de dos nmeros utilizando el algoritmo de Euclides.
Dividir n1 entre n2 hasta que el residuo sea cero, entonces el MCD es el ultimo valor de n2. Luego de cada
divisin si el residuo es diferente de cero asigne
n1=n2 y n2=r, antes de realizar la siguiente divisin.
MCD (60,36)=12
Nmero mayor (n1)

60

36

24

Nmero menor (n2)

36

24

12

Residuo (r)

24

12

Cociente (q)

Dado que r=0, se tiene que el MCD=12=n2.

MCD (70,12)=2
Nmero mayor (n1)

70

12

10

Nmero menor (n2)

12

10

Residuo (r)

10

Cociente (q)

Dado que r=0, se tiene que el MCD=2=n2.


Solucin:

44

PROGRAMACION CON VISUAL BASIC.NET

Modifique el cdigo de acuerdo a lo siguiente:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n1, n2 As Integer 'numero mayor y menor
Dim r, q As Integer 'residuo y cociente
Dim mcd As Integer 'mximo comn divisor
n1 = num1.Text
n2 = num2.Text
While (True)
r = n1 Mod n2
If (r = 0) Then 'sale del while
mcd = n2
Exit While 'n2 es mcd
End If
n1 = n2
n2 = r
End While
respmcd.Text = mcd
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
num1.Text = ""
num2.Text = ""
respmcd.Text = ""
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
End
End Sub

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

45

CAPITULO CUATRO
MATRICES
Al utilizar matrices, puede utilizar el mismo nombre para
hacer referencia a distintas variables gracias a la utilizacin de un nmero denominado ndice o subndice que permite
distinguirlas. Las matrices pueden reducir y simplificar el
cdigo, permitiendo crear bucles que gestionan de forma eficiente cualquier nmero de elementos.

4.1. INFORMACIN GENERAL SOBRE LAS MATRICES


Las matrices permiten hacer referencia a una serie de
variables mediante un mismo nombre y utilizar un nmero, denominado ndice o subndice, para distinguirlas.
De esta forma, se puede crear un cdigo ms simple y
reducido en muchos casos, ya que es posible utilizar
bucles que usen el ndice para procesar eficientemente
cualquier nmero de elementos de la matriz.

4.1.1. DIMENSIONES DE MATRIZ


Las matrices pueden tener una o varias dimensiones. La dimensin (el rango) de la matriz
corresponde al nmero de subndices que se
utilizan para identificar un elemento individual. Se pueden especificar hasta 32 dimensiones, aunque no es habitual tener ms de
tres.
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

47

4.1.2. TAMAO DE MATRIZ


Cada dimensin de una matriz tiene una longitud distinta de cero. Los elementos de la matriz son contiguos en cada dimensin, desde 0
hasta el mayor valor del subndice de esa dimensin. Puesto que Visual Basic asigna espacio para todos los elementos de una matriz,
se debe evitar declarar una matriz mayor de
lo necesario.
Una matriz de longitud cero es una matriz sin
elementos. A veces resulta necesario especificar matrices de este tipo, por ejemplo al
utilizar formularios Windows Forms. Para
hacerlo, declare una de las dimensiones de la
matriz como 1. La matriz estar vaca, pero
existir. En consecuencia, una variable que
apunte a la matriz no ser igual a Nothing.
Las matrices de Visual Basic no tienen un tamao fijo. Despus de haber creado una matriz, se puede cambiar su tamao. La instruccin ReDim asigna un objeto matriz completamente nuevo a la variable matriz especificada. Por consiguiente, ReDim puede cambiar la
longitud de cada dimensin.

4.2. DECLARAR VARIABLES DE MATRIZ


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

PROGRAMACION CON VISUAL BASIC.NET

los parntesis para separar las dimensiones, tal y como muestra el siguiente ejemplo:
Dim My4DArray(,,,) As Short
' Four-dimensional array.
Para declarar una variable de matriz escalonada
En la declaracin, agregue tantos pares de parntesis
detrs del nombre de la variable como niveles de matrices anidadas haya, tal y como se ve en el siguiente
ejemplo:
Dim MyJaggedArray()()() As Byte 'Array of arrays of Byte arrays.

4.2.1. INICIALIZAR MATRICES


Se puede inicializar una variable de matriz
como parte de su propia declaracin. Se puede
realizar una de las siguientes acciones en la
instruccin de declaracin:

Especificar la longitud inicial de una o


ms de las dimensiones entre parntesis
detrs del nombre de la variable, sin
asignar un objeto de matriz a la variable.

Asignar un objeto de matriz a la variable, mediante la clusula New. Al utilizar una clusula New, sta debe ir seguida de llaves ({}), incluso si estn
vacas.

Asignar un objeto matriz a la variable y


suministrar las longitudes iniciales mediante la clusula New.

Asignar un objeto matriz a la variable y


suministrar los valores de elementos
iniciales mediante la clusula New. Puede suministrar ambas longitudes y valores en la misma clusula New.

Si especifica longitudes de dimensin en los


parntesis detrs del nombre de la variable,
debe utilizar una instruccin de asignacin
posterior para asignar un objeto de matriz a
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

49

la variable. En las siguientes declaraciones


de ejemplo se muestra la sintaxis correcta e
incorrecta para una variable de matriz unidimensional:
Dim
Dim
Dim
Dim
Dim
Dim
Dim

BA(2) As Byte
' Currently contains Nothing (no object).
BA(2) As Byte = New Byte()
' INVALID (New after length specified).
BA() As Byte = New Byte() {}
' Empty Byte array object.
BA() As Byte = New Byte()
' INVALID (missing braces).
BA() As Byte = New Byte(2)
' INVALID (missing braces).
BA() As Byte = New Byte() {0,1,2}
' (0) through (2).
BA() As Byte = New Byte(2) {0,1,2}
' (0) through (2).

Una variable de matriz multidimensional se


puede inicializar de forma similar. En las
siguientes declaraciones de ejemplo se muestra una variable de matriz bidimensional declarada como una matriz de tipo Short con 2
filas y 2 columnas.
Dim
Dim
Dim
Dim
Dim
Dim
Dim

S2X2(1,
S2X2(1,
S2X2(,)
S2X2(,)
S2X2(,)
S2X2(,)
S2X2(,)

1)
1)
As
As
As
As
As

As Short
' (0) through (1), (0) through (1).
As Short = New Short(,)
' INVALID (New after lengths).
Short = New Short(,)
' INVALID (missing braces).
Short = New Short(1, 1)
' INVALID (missing braces).
Short = New Short(,) {}
' Empty array object.
Short = New Short(1, 1) {} ' Elements have default value.
Short = New Short(,) {{5, 6}, {7, 8}}
' Four elements.

El primer argumento representa las filas; el


segundo, las columnas. En las matrices de las
declaraciones anteriores, los valores del ndice varan entre 0 y 1 tanto para las filas
como para las columnas.
Al inicializar una variable de matriz escalonada, slo puede especificar las longitudes
de dimensin para la matriz del nivel superior. En las siguientes declaraciones de
ejemplo se muestra la sintaxis correcta e incorrecta para una matriz de matrices con elementos de tipo Byte:
Dim
Dim
Dim
Dim
Dim
Dim

50

JB(1)() As Byte
' Array of two arrays of Byte elements.
JB(1)(1) As Byte
' INVALID (can only specify top-level size).
JB(1)() As Byte = New Byte()()
' INVALID (New after lengths).
JB()() As Byte = {New Byte() {}, New Byte() {}}
' Empty arrays.
JB()() As Byte = {New Byte(1) {}, New Byte(1) {}}
' Default values.
JB()() As Byte = {New Byte() {5, 6}, New Byte() {7, 8}}

PROGRAMACION CON VISUAL BASIC.NET

En la ltima de las declaraciones anteriores,


JB se inicializa en dos elementos, JB(0) y
JB(1), cada uno de los cuales se inicializa en
una matriz de tipo Byte de dos elementos, la
primera con los valores de los elementos 5 y
6 y la segunda con los elementos 7 y 8.

4.2.2. LMITES DE TAMAO DE MATRIZ


La longitud de cada dimensin de una matriz
se limita al valor mximo del tipo de datos
Long, el cual es (2 ^ 64) - 1. El lmite de
tamao total de una matriz vara, segn el
sistema operativo y la cantidad de memoria
disponible. El uso de una matriz que supere
la cantidad de RAM disponible en el sistema
ser ms lento, ya que las operaciones de
lectura y escritura debern realizarse en el
disco.
Nota: Puesto que en Visual Basic .NET las matrices son objetos, es importante distinguir
entre un objeto de matriz y una variable de
matriz. Un objeto matriz, una vez creado, no
cambia de tamao o rango. Sin embargo, una
variable de matriz puede recibir la asignacin de diferentes matrices de distintos tamaos y rangos durante su existencia.

4.2.3. CAMBIAR EL TAMAO DE MATRICES


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

51

instruccin asigna una nueva matriz, inicializa sus elementos a partir de los elementos
correspondientes de MyArray y asigna la nueva
matriz a MyArray.
ReDim Preserve MyArray(10, 20)

En una matriz de varias dimensiones, cuando


se utiliza Preserve, slo se puede cambiar la
ltima dimensin. Si se intenta cambiar cualquiera de las otras dimensiones, se produce
un error en tiempo de ejecucin. Si no se conoce el tamao real de una dimensin, se puede utilizar el mtodo GetUpperBound, que devuelve el valor de subndice ms alto de la
dimensin especificada.
En el siguiente ejemplo, la primera lnea es
vlida, pero no la segunda, ya que intenta
cambiar la primera dimensin de las dos existentes.
ReDim Preserve Matrix(Matrix.GetUpperBound(0), Matrix.GetUpperBound(1) +
10)
ReDim Preserve Matrix(Matrix.GetUpperBound(0) + 10, Matrix.GetUpperBound(1))

4.3. USAR LAS MATRICES


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

PROGRAMACION CON VISUAL BASIC.NET

Dim CurExpense(365) As Decimal


Dim I As Integer
For I = 0 to 365
CurExpense(I) = 20.00
Next I

' Allocates (0) through (365).

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

4.3.1. MATRICES MULTIDIMENSIONALES


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

' (0) through (4), (0) through (9).

El nmero total de elementos es el producto


de los tamaos de todas las dimensiones; en
este caso, 50.
El rango de una matriz se guarda en su propiedad Rank y la longitud de cada dimensin
se obtiene con el mtodo GetLength. El valor
ms bajo de subndice para una dimensin es
siempre 0 y el ms alto lo devuelve el mtodo
GetUpperBound. Tenga en cuenta que, el argumento que se pasa a GetLength y GetUpperBound
(la dimensin para la que se desea obtener la
longitud o el subndice mayor) tambin se empieza a contar desde 0.
Nota
Cuando se agregan dimensiones a una
matriz, el espacio total necesario para la
matriz aumenta considerablemente; por ello,
debe utilizar las matrices multidimensionales
y escalonadas con prudencia.
Se puede utilizar bucles For anidados para
procesar matrices multidimensionales de forma
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

53

eficaz. Por ejemplo, las siguientes instrucciones inicializan todos los elementos de MatrixA con valores comprendidos entre 0 y 99,
segn sus posiciones en la matriz.
Dim I, J As Integer
Dim MaxDim0, MaxDim1 As Integer
' Highest subscripts, not lengths.
Dim MatrixA(9, 9) As Double
MaxDim0 = MatrixA.GetUpperBound(0)
' Maximum for first dimension.
MaxDim1 = MatrixA.GetUpperBound(1)
' Maximum for second dimension.
For I = 0 To MaxDim0
For J = 0 To MaxDim1
MatrixA(I, J) = (I * 10) + J
Next J
Next I

Puede obtener el tamao total de una matriz


de cualquier rango a partir de su propiedad
Length. Esto representa el nmero total de
elementos que contiene actualmente la matriz,
no el nmero de bytes que consumen en el almacenamiento. En el ejemplo anterior, MatrixA.Length devolvera 100.

4.4. CARACTERSTICAS
MATRICES

AVANZADAS

DE

LAS

Es posible asignar el contenido de una matriz a otra,


crear funciones que acepten y devuelvan matrices y
crear propiedades que acepten y devuelvan matrices. En
muchos casos, estas tcnicas pueden mejorar el rendimiento de la aplicacin.

4.4.1. ASIGNACIN DE MATRICES


Puesto que las matrices son objetos, pueden
utilizarse en instrucciones de asignacin como cualquier otro tipo de objeto. En la asignacin de una matriz a otra, se aplican las
siguientes reglas:

54

El rango (nmero de dimensiones) de la


matriz de destino debe coincidir con el
de la matriz de origen.

Siempre que los rangos de las dos matrices sean iguales, no es necesario que
las dimensiones sean iguales. El nmero
PROGRAMACION CON VISUAL BASIC.NET

de elementos de una dimensin dada puede


cambiar durante la asignacin.

Ambas matrices deben tener elementos de


tipo referencia o bien ambas matrices
deben tener elementos de tipo valor.

Si ambas matrices tienen elementos de


tipo valor, los tipos de datos deben coincidir exactamente.

En cambio, si ambas matrices tienen elementos de tipo referencia, debe existir


una conversin de ampliacin del tipo de
elemento de origen al tipo de elemento
de destino.

El compilador notifica un error si las reglas


anteriores no se cumplen, por ejemplo, si un
tipo de datos no se puede convertir o si los
rangos no son iguales. Se puede incluir control de errores en el cdigo para comprobar
si las matrices son compatibles antes de intentar realizar la asignacin.

4.4.2. DEVOLVER UNA MATRIZ DESDE UNA FUNCIN


Una funcin puede devolver una matriz de valores. Por ejemplo, quiz se desee devolver
una matriz de elementos de tipo Byte sin tener que realizar conversiones entre este tipo
y el tipo string. En el siguiente ejemplo, el
procedimiento Function ArrayFunction devuelve
una matriz de bytes.
Dim B As Byte = CByte(54)
' Seed value for ArrayFunction argument.
Dim I As Integer
' Loop counter for displaying returned values.
Dim ReturnArray() As Byte
' To be set from ArrayFunction return.
ReturnArray = ArrayFunction(B)
For I = 0 To ReturnArray.GetUpperBound(0)
' Highest subscript.
Debug.WriteLine("Byte " & I & ": " & ReturnArray(I))
Next I
' ...
Public Function ArrayFunction(ByVal B As Byte) As Byte()
Dim X(2) As Byte
' Allocates three elements.
X(0) = B
X(1) = B + B
X(2) = B + CByte(200)
Return X
End Function
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

55

Despus de ejecutar el ejemplo anterior, ReturnArray apunta a una matriz de tres elementos que contiene los valores de elemento
asignados a la matriz X en ArrayFunction. En
este ejemplo, ReturnArray debe tener el mismo
tipo de elementos que la matriz devuelta por
la funcin, ya que se trata de un tipo de valor (en este caso Byte). Si los tipos de elementos de ReturnArray y ArrayFunction hubieran
sido tipos de referencia, hubiera sido aceptable una conversin de ampliacin.

4.5. EJEMPLO DEL USO DE ARREGLOS Y LISTBOX


Programa que elige la categora de un participante a
un evento y que muestra el costo de inscripcin que le
corresponde
Solucin:
Utilizaremos el siguiente formulario:

Modifique el cdigo siguiente:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e


As System.EventArgs) Handles MyBase.Load
Dim elements() As String = {"PONENTE", "PROFESIONAL",
"ESTUDIANTE", "COLABORADOR"}
Dim i As Integer
For i = 0 To UBound(elements)
Me.ListBox1.Items.Add(elements(i))
Next
56

PROGRAMACION CON VISUAL BASIC.NET

End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles Button1.Click
Select Case ListBox1.SelectedItem
Case "PONENTE"
TextBox1.Text = 0
Case "PROFESIONAL"
TextBox1.Text = 150
Case "ESTUDIANTE"
TextBox1.Text = 50
Case "COLABORADOR"
TextBox1.Text = 10
End Select
End Sub
Private Sub Button2_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button2.Click
TextBox1.Text = ""
End Sub
Private Sub Button3_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button3.Click
End
End Sub

La ejecucin es:

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

57

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

La accesibilidad puede ser Public, Protected, Friend,


Protected Friend o Private.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

59

Los procedimientos Sub pueden definirse en mdulos,


clases y estructuras. Son Public de forma predeterminada, lo que significa que se les puede llamar desde
cualquier parte de una aplicacin.

5.1.1. DECLARACIN DE ARGUMENTOS


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

Si el argumento es opcional, la declaracin


de ste debe contener tambin un valor predeterminado, como se muestra a continuacin:
Optional [ByVal|ByRef] argumentname As datatype = defaultvalue

5.1.2. SINTAXIS DE LLAMADA


Los procedimientos Sub se invocan de forma
explcita, con una instruccin de llamada independiente. No se les puede llamar utilizando su nombre en una expresin. La instruccin
de llamada debe suministrar el valor de todos
los argumentos que no sean opcionales, y debe
incluir la lista de argumentos entre parntesis. Si no se proporcionan argumentos, se
puede omitir el parntesis. El uso de la palabra clave Call tambin es opcional.
La sintaxis para llamar a un procedimiento
Sub es la siguiente:
[Call] subname[(argumentlist)]

60

PROGRAMACION CON VISUAL BASIC.NET

5.2. RETURN (INSTRUCCIN)


Devuelve el control al cdigo que llam a un procedimiento Sub, Function o Property.
Return
O bien
Return expr
Donde:
expr
Se requiere en un procedimiento Function o en un procedimiento Property que recupera el valor de la propiedad. Es una expresin que representa el valor que
se devolver al cdigo de llamada.
Comentarios
Para un procedimiento Sub o un procedimiento Property
que establece el valor de la propiedad, la instruccin
Return equivale a una instruccin Exit Sub y no se debe especificar exp.
Para un procedimiento Function o un procedimiento Property que recupera el valor de la propiedad, debe incluirse expr y debe evaluarse como un tipo de datos
que sea convertible al tipo de la funcin. De esta
forma, Return equivale a asignar la expresin al nombre de la funcin como valor devuelto y despus ejecutar una instruccin Exit Function.
Ejemplo
En este ejemplo se utiliza varias veces la instruccin
Return para regresar al cdigo de llamada cuando el
procedimiento ya no tiene que hacer nada ms.
Public Function GetAgePhrase(Age As Integer) As String
If Age > 60 Then Return "Senior"
If Age > 40 Then Return "Middle-aged"
If Age > 20 Then Return "Adult"
If Age > 12 Then Return "Teen-aged"
If Age > 4 Then Return "School-aged"
If Age > 1 Then Return "Toddler"
Return "Infant"
End Function
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

61

5.3. PROCEDIMIENTOS FUNCTION


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

As

La accesibilidad puede ser Public, Protected, Friend,


Protected Friend o Private.
Los procedimientos Function pueden definirse en mdulos, clases y estructuras. Son Public de forma predeterminada, lo que significa que se les puede llamar
desde cualquier parte de una aplicacin.
Los argumentos se declaran del mismo modo que en un
procedimiento Sub.

5.3.1. VALORES DEVUELTOS


El valor que un procedimiento Function devuelve al programa que realiza la llamada se
denomina valor devuelto. La funcin puede devolver dicho valor de dos maneras:

62

La funcin asigna un valor a su propio


nombre de funcin en una o ms instrucciones del procedimiento. No se devuelve
el control al programa que realiza la
PROGRAMACION CON VISUAL BASIC.NET

llamada hasta que se ejecuta una instruccin Exit Function o End Function,
como en el siguiente ejemplo:
Function functionname[(argumentlist)] As datatype
' ...
functionname = expression
'Control remains
function.
' ...
End Function

within

the

La funcin utiliza la instruccin Return


para especificar el valor devuelto, e
inmediatamente devuelve el control al
programa de llamada, como en el siguiente ejemplo:

Function functionname[(argumentlist)] As datatype


' ...
Return expression
'Control is returned immediately.
' ...
End Function

La ventaja de asignar el valor devuelto al


nombre de la funcin es que el control permanece en la funcin hasta que el programa encuentra una instruccin Exit Function o End
Funcin, lo que permite asignar un valor previo y, si es necesario, se puede ajustar despus.
Si la funcin devuelve datos de tipo matricial, el acceso a los elementos individuales
de la matriz no es posible dentro de la funcin. Si se intentara hacerlo, el compilador
lo interpretar como una llamada a la funcin. En el siguiente ejemplo se generan
errores de compilacin:
Function AllOnes(ByVal N As Integer) As Integer()
Dim I As Integer
' Singleton Integer, not Integer array.
For I = 1 To N - 1
' Assume N has a valid value.
AllOnes(I) = 1
' Compiler error: call with wrong data
type.
Next I
Return AllOnes()
' Compiler error: call with no argument.
End Function

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

63

Todos los procedimientos Function tienen un


tipo de datos, al igual que las variables. La
clusula As de la instruccin Function especifica el tipo de datos, y determina el tipo
del valor devuelto. En las siguientes declaraciones de ejemplo se ilustra esto ltimo:
Function Yesterday As Date
' ...
End Function
Function FindSqrt(ByVal Number As Single) As Single
' ...
End Function

5.3.2. SINTAXIS DE LLAMADA


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

El siguiente procedimiento Function calcula


la hipotenusa de un tringulo rectngulo a
partir de los valores de los catetos:
Function Hypotenuse (ByVal Side1 As Single,
Single) As Single
Return Math.Sqrt((Side1 ^ 2) + (Side2 ^ 2))
End Function

ByVal

Side2

As

Son llamadas habituales a Hypotenuse las siguientes:


Dim TestLength, TestHypotenuse, X, Y, Area As Single
TestHypotenuse = Hypotenuse(TestLength, 10.7)
' Assume TriangleArea is a defined Function procedure the
' returned value from Hypotenuse is used as an argument to TriangleArea.
Area = TriangleArea(X, Y, Hypotenuse(X, Y))

Common Language Runtime proporciona multitud


de funciones, que se encuentran en el espacio
de nombres Microsoft.VisualBasic. Entre las
64

PROGRAMACION CON VISUAL BASIC.NET

funciones ms comunes se encuentran, por


ejemplo, Beep, MsgBox y StrComp. Puede llamar
a estas funciones de la misma manera que llama a los procedimientos Function que ha creado usted mismo.
Cuando se llama a un procedimiento Function,
no es necesario utilizar su valor devuelto,
en cuyo caso se ejecutan todas las acciones
de la funcin, pero el valor devuelto se omite. Las llamadas a MsgBox suelen hacerse de
esta manera.

5.4. FUNCIONES MATEMTICAS


Requisitos
Class: Math (Clase)
Requisitos
Espacio de nombres: System.Math
Ensamblado: mscorlib (en mscorlib.dll)
Las funciones matemticas de Visual Basic 6 han sido
reemplazadas por mtodos equivalentes en la clase System.Math de .NET Framework.
Comentarios
Los mtodos matemticos de .NET Framework funcionan
del mismo modo que sus equivalentes de Visual Basic 6,
si bien algunos de sus nombres han sufrido ligeras diferencias. As, por ejemplo, Atan es el equivalente en
.NET Framework de la funcin Atn de Visual Basic 6. En
la siguiente tabla se detallan los nombres de las funciones matemticas de Visual Basic 6 y sus mtodos
equivalentes en .NET Framework:

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

65

Funcin de Visual
Basic 6
Abs
Atn

Cos

Exp

Log

Round

66

Mtodo de Visual
Basic .NET
Math.Abs (Mtodo)

Descripcin

Devuelve el valor
absoluto de un nmero especificado.
Math.Atan (Mtodo) Devuelve un valor
Double que contiene
el ngulo cuya tangente es el nmero
especificado.
Math.Cos (Mtodo)
Devuelve un valor
Double que contiene
el coseno del ngulo
especificado.
Math.Exp (Mtodo)
Devuelve un valor
Double que contiene
"e" (base de los logaritmos naturales)
elevado a la potencia especificada.
Math.Log (Mtodo)
Devuelve un valor
Double que contiene
el logaritmo del nmero especificado.
Este mtodo est sobrecargado y puede
devolver o bien el
logaritmo natural
(de base e) del nmero especificado o
bien el logaritmo
del nmero especificado en una base especificada.
Math.Round (Mtodo) Devuelve un valor de
tipo Double que contiene el nmero ms
prximo al valor especificado. Existen
funciones de redondeo adicionales disponibles en forma de
mtodos de tipos intrnsecos como Decimal.Round (Mtodo).
PROGRAMACION CON VISUAL BASIC.NET

Sgn

Math.Sign (Mtodo)

Sin

Math.Sin (Mtodo)

Sqr

Math.Sqrt (Mtodo)

Tan

Math.Tan (Mtodo)

Devuelve un valor
Integer que indica
el signo de un nmero.
Devuelve un valor
Double que especifica el seno de un ngulo.
Devuelve un valor
Double que especifica la raz cuadrada
de un nmero.
Devuelve un valor
Double que contiene
la tangente de un
ngulo.

Adems, la clase matemtica de .NET Framework ofrece


constantes y otros mtodos estticos para funciones
trigonomtricas, logartmicas y otras funciones matemticas habituales. Todo ello puede utilizarse en un
programa de Visual Basic.
Para utilizar estas funciones sin calificacin, importe el espacio de nombres System.Math a su proyecto
agregando el siguiente cdigo en la parte superior del
cdigo fuente:
Imports System.Math
Requisitos
Class: Math (Clase)
Ejemplo de Abs
En este ejemplo se utiliza el mtodo Abs de la clase
Math para calcular el valor absoluto de un nmero:
Imports System.Math
' Code will not compile unless placed within a Sub or Function
Dim MyNumber As Double
MyNumber = Abs(50.3)
' Returns 50.3.
MyNumber = Abs(-50.3)
' Returns 50.3.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

67

Ejemplo de Atan
En este ejemplo se utiliza el mtodo Atan de la clase
Math para calcular el valor de pi:
Imports System.Math
' Code will not compile unless placed within a Sub or Function
Dim pi As Double
pi = 4 * Atan(1)
' Calculate the value of pi.

Ejemplo de Cos
En este ejemplo se utiliza el mtodo Cos de la clase
Math para devolver el coseno de un ngulo:
Imports System.Math
' Code will not compile unless placed within a Sub or Function
Dim MyAngle, MySecant As Double
MyAngle = 1.3
' Define angle in radians.
MySecant = 1 / Cos(MyAngle)
' Calculate secant.

Ejemplo de Exp
En este ejemplo se utiliza el mtodo Exp de la clase
Math para devolver e elevado a una potencia:
Imports System.Math
' Code will not compile unless placed within a Sub or Function
Dim MyAngle, MyHSin As Double
' Define angle in radians.
MyAngle = 1.3
' Calculate hyperbolic sine.
MyHSin = (Exp(MyAngle) - Exp(-1 * MyAngle)) / 2

Ejemplo de Log
En este ejemplo se utiliza el mtodo Log de la clase
Math para devolver el logaritmo natural de un nmero:
Imports System.Math
' Code will not compile unless placed within a Sub or Function
Dim MyAngle, MyLog As Double
' Define angle in radians.
MyAngle = 1.3
' Calculate inverse hyperbolic sine.
MyLog = Log(MyAngle + Sqrt(MyAngle * MyAngle + 1))

68

PROGRAMACION CON VISUAL BASIC.NET

Ejemplo de Round
En este ejemplo se utiliza el mtodo Round de la clase
Math para redondear un nmero al entero ms prximo:
Imports System.Math
' Code will not compile unless placed within a Sub or Function
Dim MyVar1 As Double = 2.8
Dim MyVar2 As Double
MyVar2 =Round(MyVar1)
' Returns 3.

Ejemplo de Sign
En este ejemplo se utiliza el mtodo Sign de la clase
Math para determinar el signo de un nmero:
Imports System.Math
' Code will not compile unless placed within a Sub or Function
Dim MyVar1, MyVar2, MyVar3 As Double
Dim MySign As Integer
MyVar1 = 12
MyVar2 = -2.4
MyVar3 = 0
MySign = Sign(MyVar1)
' Returns 1.
MySign = Sign(MyVar2)
' Returns -1.
MySign = Sign(MyVar3)
' Returns 0.

Ejemplo de Sin
En este ejemplo se utiliza el mtodo Sin de la clase
Math para devolver el seno de un ngulo:
Imports System.Math
' Code will not compile unless placed within a Sub or Function
Dim MyAngle, MyCosecant As Double
MyAngle = 1.3
' Define angle in radians.
MyCosecant = 1 / Sin(MyAngle)
' Calculate cosecant.

Ejemplo de Sqrt
En este ejemplo se utiliza el mtodo Sqrt de la clase
Math para calcular la raz cuadrada de un nmero:
Imports System.Math
' Code will not compile unless placed within a Sub or Function
Dim MySqr As Double
MySqr = Sqrt(4)
' Returns 2.
MySqr = Sqrt(23)
' Returns 4.79583152331272.
MySqr = Sqrt(0)
' Returns 0.
MySqr = Sqrt(-4)
' Returns NaN (not a number).
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

69

Ejemplo de Tan
En este ejemplo se utiliza el mtodo Tan de la clase
Math para devolver la tangente de un ngulo:
Imports System.Math
' Code will not compile unless placed within a Sub or Function
Dim MyAngle, MyCotangent As Double
MyAngle = 1.3
' Define angle in radians.
MyCotangent = 1 / Tan(MyAngle)
' Calculate cotangent.

5.5. EJEMPLO DEL USO DE SUB Y FUNCTION


Ejemplo1:
Implementar un programa que permita elegir el clculo
del rea de un rectngulo o de un crculo. Para calcular el rea del rectngulo utilice function y para
calcular el rea del crculo utilice sub. El programa
debe solicitar slo los datos que requiera el rea a
calcular.
Se pueden utilizar las siguientes entradas de datos:

70

PROGRAMACION CON VISUAL BASIC.NET

Solucin: Modifique el cdigo de acuerdo a lo siguiente:

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
GroupBox2.Visible = True
GroupBox3.Visible = False
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
RadioButton1.Checked = True
End Sub
Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
GroupBox3.Visible = True
GroupBox2.Visible = False
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
End Sub

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

71

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button3.Click
End
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim ra, area As Double
If RadioButton1.Checked Then
TextBox4.Text = rectangulo(TextBox1.Text, TextBox2.Text)
End If
If RadioButton2.Checked Then
ra = TextBox3.Text
circulo(ra, area)
TextBox4.Text = area
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
End Sub
Public Function rectangulo(ByVal b As Double, ByVal h As Double) As
Double
Return (b * h)
End Function
Public Sub circulo(ByVal r As Double, ByRef a As Double)
a = Math.Pow(r, 2) * Math.PI
End Sub

La ejecucin del programa es:

72

PROGRAMACION CON VISUAL BASIC.NET

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

73

CAPITULO SEIS
GRFICOS GDI+
Common Language Runtime usa una implementacin avanzada de la
interfaz de diseo de grficos (GDI) de Windows, denominada
GDI+, que permite crear grficos, dibujar texto y manipular
imgenes grficas como si fueran objetos. La interfaz GDI+
est diseada para ofrecer rendimiento a la vez que facilidad
de uso. La interfaz GDI+ se puede utilizar para representar
imgenes grficas en formularios Windows Forms y en controles. GDI+ ha reemplazado completamente a GDI, y ahora es el
nico modo de representar grficos mediante programa en aplicaciones de formularios Windows Forms. Asimismo, se puede
usar el Editor de imgenes para crear imgenes en tiempo de
diseo para su posterior utilizacin por parte de las aplicaciones. A pesar de que no es posible usar la interfaz GDI+
directamente en los formularios Web Forms, se pueden mostrar
imgenes grficas mediante el control Image de servidor Web.
Los temas de esta seccin presentan las nociones bsicas de
la programacin con la interfaz GDI+. Aunque no pretende ser
una referencia completa, esta seccin incluye informacin sobre los objetos Graphics, Pen, Brush y Color, y explica cmo
realizar tareas tales como dibujar formas, dibujar texto o
mostrar imgenes. Para obtener ms informacin, vea el SDK de
GDI+.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

75

6.1. CREAR IMGENES GRFICAS CON GDI+


Antes de dibujar lneas y formas, representar texto o
mostrar y manipular imgenes con GDI+, es preciso
crear un objeto Graphics. El objeto Graphics representa una superficie de dibujo de GDI+, y es el objeto
que se usa para crear imgenes grficas.
Para trabajar con grficos existen los dos pasos siguientes:
Crear un objeto Graphics.
Usar el objeto Graphics para dibujar lneas y formas, representar texto o mostrar y manipular imgenes.

6.1.1. CREAR UN OBJETO GRAPHICS


El objeto Graphics se puede crear de diversas
formas:

76

Mediante la recepcin de una referencia


a un objeto Graphics como parte de los
argumentos PaintEventArgs del evento
Paint de un formulario o control. Este
es el modo en que normalmente se obtiene
una referencia a un objeto Graphics
cuando se crea cdigo de dibujo para un
control.

Llamando al mtodo CreateGraphics de un


control o formulario para obtener una
referencia a un objeto Graphics que represente la superficie de dibujo de dicho control o formulario. Este es el mtodo que se usa si se desea dibujar en
un formulario o control que ya exista
con anterioridad.

Mediante la creacin de un objeto Graphics a partir de cualquier objeto que


herede de la clase Image. Este mtodo
resulta til cuando se desea alterar una
imagen que ya existe.

PROGRAMACION CON VISUAL BASIC.NET

6.1.2. PAINTEVENTARGS
EVENTOS PAINT

EN

EL

CONTROLADOR

DE

Cuando se programa el controlador de eventos


Paint para controles, se proporciona un objeto Graphics como uno de los argumentos PaintEventArgs.
Para obtener una referencia a un objeto Graphics a partir de PaintEventArgs en el evento
Paint

Declare el objeto Graphics.

Asigne la variable que har referencia


al objeto Graphics y que se pasar como
parte de PaintEventArgs.

Inserte cdigo para dibujar en el formulario o control.

El ejemplo siguiente muestra cmo hacer referencia a un objeto Graphics a partir de PaintEventArgs en el evento Paint.
' Visual Basic
Private Sub Form1_Paint(sender As Object, pe As PaintEventArgs) Handles _
MyBase.Paint
' Declares the Graphics object and sets it to the Graphics object
' supplied in the PaintEventArgs.
Dim g As Graphics = pe.Graphics
' Insert code to paint the form here.
End Sub

6.1.3. CREATEGRAPHICS (MTODO)


Asimismo, se puede utilizar el mtodo CreateGraphics de un control o formulario para obtener una referencia a un objeto Graphics que
represente la superficie de dibujo de dicho
control o formulario.
Para crear un objeto Graphics con el mtodo
CreateGraphics

Invoque al mtodo CreateGraphics del


formulario o control en el que desee representar grficos.

' Visual Basic


A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

77

Dim g as Graphics
' Sets g to a Graphics object representing the drawing surface of the
' control or form g is a member of.
g = Me.CreateGraphics

6.1.4. CREAR UN OBJETO GRAPHICS A PARTIR DE


UN OBJETO IMAGE
Adems, se puede crear un objeto Graphics a
partir de cualquier objeto que se derive de
la clase Image.
Para crear un objeto Graphics a partir de un
objeto Image

Invoque al mtodo Graphics.FromImage,


suministrando el nombre de la variable
Image a partir de la cual desea crear un
objeto Graphics.

El ejemplo siguiente muestra cmo usar un objeto Bitmap:


' Visual Basic
Dim myBitmap as New Bitmap("C:\Documents and Settings\Joe\Pics\myPic.bmp")
Dim g as Graphics = Graphics.FromImage(myBitmap)

Nota
Puede crear objetos Graphics a partir de archivos .bmp no indizados, como archivos .bmp de 16 bits,
24 bits y 32 bits. Cada pxel de archivos .bmp no indizados alberga un color, a diferencia de los pxeles
de archivos .bmp indizados, que albergan un ndice que
hace referencia a una tabla de colores.

6.2. DIBUJAR Y MANIPULAR FORMAS E IMGENES


Una vez creado el objeto Graphics, ste se puede usar
para dibujar lneas y formas, representar texto o mostrar y manipular imgenes. Los objetos principales que
se usan con el objeto Graphics son:

78

Pen (Clase): se utiliza para dibujar lneas y contornos de formas, o para representar otros elementos
geomtricos.

Brush (Clase): se utiliza para rellenar reas de los


grficos, tales como formas rellenas, imgenes o
texto.
PROGRAMACION CON VISUAL BASIC.NET

Font (Clase): proporciona una descripcin de las


formas que se deben usar cuando se representa texto.

Color (Estructura): representa los distintos colores


que se mostrarn.

6.2.1. DIBUJAR LNEAS Y FORMAS CON GDI+


El objeto Graphics proporciona mtodos para
dibujar diversos tipos de lneas y formas.
Las formas simples y complejas pueden representarse en colores slidos o transparentes,
o mediante texturas compuestas por gradientes
definidos por el usuario o por imgenes. Las
lneas, curvas abiertas y el contorno de las
formas se crean con un objeto Pen. Para rellenar una rea, como un rectngulo o una
curva cerrada, se requiere un objeto Brush.
Para dibujar una lnea o el contorno de una
forma

Obtenga una referencia al objeto Graphics que usar para dibujar. Para obtener ms informacin

' Visual Basic


' Obtains a reference to the graphics object for Button1.
Dim g as Graphics = Me.CreateGraphics

Cree una instancia de la clase Pen que


desee usar para dibujar la lnea y establezca las propiedades necesarias.

' Visual Basic


Dim myPen as new Pen(Color.Red)
myPen.Width = 5

Invoque al mtodo apropiado para la forma que desee dibujar, suministrando


cualquier parmetro necesario. La tabla
siguiente muestra unos cuantos de los
mtodos ms comunes. Para obtener una
lista completa, vea Graphics (Mtodos).

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

79

Mtodo
Mtodo Graphics.DrawLine

Forma
Lnea; requiere coordenadas para
indicar los puntos de inicio y final.

' Visual Basic


g.DrawLine(myPen, 1, 1, 45, 65)

Para dibujar una forma rellena

Obtenga una referencia al objeto Graphics que usar para dibujar.

Dim g as Graphics = Me.CreateGraphics

Cree una instancia de la clase Brush que


desee usar para pintar la forma.

Dim myBrush as New SolidBrush(Color.Red)

Invoque al mtodo apropiado para la forma que desee pintar, suministrando cualquier parmetro necesario. Para algunos
mtodos, como FillPolygon, tendr que
suministrar una matriz de puntos que
describan el contorno de la forma que
desee pintar. Otros mtodos, como FillRectangle o FillPath, requieren un objeto que describa el rea que se va a rellenar.

g.FillRectangle(myBrush, 50, 50, 100, 100)

6.3. EJEMPLO 1 DEL USO DE GRAFICOS GDI+


Realice un programa para mostrar la siguiente salida:

80

PROGRAMACION CON VISUAL BASIC.NET

Solucin:
Crear el formulario siguiente

Modificar el cdigo donde sea necesario.


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

81

Dim g As Graphics = Me.CreateGraphics


Dim myPen As New Pen(Color.Blue)
myPen.Width = 5
g.DrawLine(myPen, 1, 1, 145, 165)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
' Visual Basic
Dim g As Graphics = Me.CreateGraphics
Dim myBrush As New SolidBrush(Color.Red)
g.FillRectangle(myBrush, 30, 40, 120, 130)
End Sub

La salida despus de la pulsacin de los botones es:

6.4. GRAPHICS (MTODOS DE)


A continuacin se enumeran los mtodos de la clase
Graphics.
82

PROGRAMACION CON VISUAL BASIC.NET

Mtodos pblicos
AddMetafileComment
BeginContainer

Clear
Compatible con .NET Compact Framework.

Agrega un comentario al objeto


Metafile actual.
Sobrecargado. Guarda un contenedor de grficos con el estado actual de este objeto
Graphics y abre y utiliza un
nuevo contenedor de grficos.
Borra toda la superficie de
dibujo y la rellena con el color de fondo especificado.

Crea un objeto que contiene


CreateObjRef (se hereda de toda la informacin relevante
necesaria para generar un
MarshalByRefObject)
proxy utilizado para comunicarse con un objeto remoto.
Libera todos los recursos utilizados por este objeto
Dispose
Graphics.
Compatible con .NET Compact Framework.
Sobrecargado. Dibuja un archivo que representa una parte de
una elipse especificada por un
par de coordenadas, un valor
de ancho y un valor de alto.
Sobrecargado. Dibuja una curva
spline de Bzier definida por
DrawBezier
cuatro estructuras Point.
Sobrecargado. Dibuja una serie
de curvas spline de Bzier a
DrawBeziers
partir de una matriz de estructuras Point.
Sobrecargado. Dibuja una curva
spline cardinal cerrada, defiDrawClosedCurve
nida por una matriz de estructuras Point.
Sobrecargado. Dibuja una curva
spline cardinal a travs de
DrawCurve
una matriz especificada de estructuras Point.
Sobrecargado. Dibuja una elipse definida por un rectngulo
DrawEllipse
delimitador especificado por
Compatible con .NET Compact Framework.
un par de coordenadas, un valor de alto y un valor de ancho.
DrawArc

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

83

Sobrecargado. Dibuja la imagen


representada por el objeto
Icon especificado en las coorCompatible con .NET Compact Framework.
denadas sealadas.
Dibuja la imagen representada
por el objeto Icon especificaDrawIconUnstretched
do sin transformar a escala la
imagen.
Sobrecargado. Dibuja el objeto
Image especificado en la ubiDrawImage
cacin especificada y con el
Compatible con .NET Compact Framework.
tamao original.
Sobrecargado. Dibuja la imagen
especificada con su tamao fDrawImageUnscaled
sico original y en la ubicacin especificada por un par
de coordenadas.
Sobrecargado. Dibuja una lnea
que conecta los dos puntos esDrawLine
pecificados por los pares de
Compatible con .NET Compact Framework.
coordenadas.
Sobrecargado. Dibuja una serie
de segmentos de lnea que coDrawLines
nectan una matriz de estructuras Point.
Dibuja un objeto GraphicsPath.
DrawPath
Sobrecargado. Dibuja una forma
circular definida por una
DrawPie
elipse y determinada por un
par de coordenadas, unos valores de ancho y alto y dos lneas radiales.
Sobrecargado. Dibuja un polgono definido por una matriz
DrawPolygon
de estructuras Point.
Compatible con .NET Compact Framework.
DrawIcon

Sobrecargado. Dibuja un rectngulo especificado por un


DrawRectangle
par de coordenadas, un valor
Compatible con .NET Compact Framework.
de ancho y un valor de alto.
Sobrecargado. Dibuja una serie
de rectngulos especificados
DrawRectangles
por las estructuras Rectangle.
Sobrecargado. Dibuja la cadena
de texto especificada en la
DrawString
84

PROGRAMACION CON VISUAL BASIC.NET

Compatible con .NET Compact Framework. ubicacin especificada y con


los objetos Brush y Font especificados.
Cierra el contenedor de grficos actual y restaura el estaEndContainer
do que tena este objeto
Graphics al estado guardado
mediante una llamada al mtodo
BeginContainer.
Sobrecargado. Enva los registros del objeto Metafile espeEnumerateMetafile
cificado, de uno en uno, a un
mtodo de devolucin de llamada para su presentacin en un
punto determinado.
Sobrecargado. Determina si dos
instancias de Object son iguaEquals (se hereda de Obles.
ject)
Compatible con .NET Compact Framework.
Sobrecargado. Actualiza la regin de recorte de este objeto
ExcludeClip
Graphics con el fin de excluir
el rea especificada por una
estructura Rectangle.
Sobrecargado. Rellena el interior de una curva spline
FillClosedCurve
cardinal cerrada, definida por
una matriz de estructuras
Point.
Sobrecargado. Rellena el interior de una elipse definida
FillEllipse
por un rectngulo de delimitaCompatible con .NET Compact Framework.
cin especificado por un par
de coordenadas, un valor de
alto y un valor de ancho.
Rellena el interior de un objeto GraphicsPath.
FillPath
Sobrecargado. Rellena el interior de una seccin de grFillPie
fico circular definida por una
elipse, determinada por un par
de coordenadas, unos valores
de ancho y alto y dos lneas
radiales.
Sobrecargado. Rellena el interior de un polgono definido
FillPolygon
A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

85

Compatible con .NET Compact Framework. por una matriz de puntos, especificados por estructuras
Point.
Sobrecargado. Rellena el interior de un rectngulo espeFillRectangle
cificado por un par de coordeCompatible con .NET Compact Framework.
nadas, un valor de ancho y un
valor de alto.
Sobrecargado. Rellena el interior de una serie de rectnFillRectangles
gulos especificados por estructuras Rectangle.
Rellena el interior de un objeto Region.
FillRegion
Compatible con .NET Compact Framework.
Flush

FromHdc

Sobrecargado. Fuerza la ejecucin de todas las operaciones


de grficos pendientes y devuelve inmediatamente el control sin esperar a que finalicen las operaciones.
Sobrecargado. Crea un nuevo
objeto Graphics a partir del
identificador especificado en
un contexto de dispositivo.
Mtodo interno. No utilizar.

FromHdcInternal
FromHwnd

Crea un nuevo objeto Graphics


a partir del identificador especificado de una ventana.
Mtodo interno. No utilizar.

FromHwndInternal
FromImage
Compatible con .NET Compact Framework.

Crea un nuevo objeto Graphics


a partir del objeto Image especificado.

Obtiene un identificador de la
paleta actual de medios tonos
GetHalftonePalette
de Windows.
Sirve como funcin hash para
GetHashCode (se hereda de un tipo concreto, apropiado
para su utilizacin en algoObject)
ritmos de hash y estructuras
Compatible con .NET Compact Framework.
de datos como las tablas hash.
86

PROGRAMACION CON VISUAL BASIC.NET

GetHdc
GetLifetimeService (se
hereda de MarshalByRefObject)
GetNearestColor
GetType (se hereda de Object)

Obtiene el identificador del


contexto de dispositivo asociado a este objeto Graphics.
Recupera el objeto de servicio
de duracin actual que controla la directiva de duracin de
esta instancia.
Obtiene el color ms prximo a
la estructura Color especificada.
Obtiene el objeto Type de la
instancia actual.

Compatible con .NET Compact Framework.


InitializeLifetimeService
(se hereda de MarshalByRefObject)
IntersectClip

IsVisible

MeasureCharacterRanges

MeasureString
Compatible con .NET Compact Framework.
MultiplyTransform

ReleaseHdc

Obtiene un objeto de servicio


de duracin para controlar la
directiva de duracin de esta
instancia.
Sobrecargado. Actualiza la regin de recorte del objeto
Graphics como la interseccin
de la regin de recorte actual
y la estructura Rectangle especificada.
Sobrecargado. Indica si el
punto especificado por un par
de coordenadas se halla contenido en la regin de recorte
visible de este objeto
Graphics.
Obtiene una matriz de objetos
Region, cada uno de los cuales
delimita un intervalo de posiciones de caracteres dentro de
la cadena especificada.
Sobrecargado. Mide la cadena
especificada al dibujarla con
el objeto Font especificado.
Sobrecargado. Multiplica la
transformacin universal del
objeto Graphics y especificada
en el objeto Matrix.
Libera un identificador de
contexto de dispositivo obtenido mediante una llamada an-

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

87

terior al mtodo GetHdc de este objeto Graphics.


Mtodo interno. No utilizar.
ReleaseHdcInternal
ResetClip
Compatible con .NET Compact Framework.

Restablece la regin de recorte de este objeto Graphics en


una regin infinita.

Restablece la matriz de transformacin universal de este


ResetTransform
objeto Graphics en la matriz
de identidades.
Restaura como estado de este
objeto Graphics el estado reRestore
presentado por un objeto
GraphicsState.
Sobrecargado. Aplica la rotacin especificada a la matriz
RotateTransform
de transformacin de este objeto Graphics.
Guarda el estado actual de este objeto Graphics e identifiSave
ca el estado guardado con un
objeto GraphicsState.
Sobrecargado. Aplica la operacin de cambio de escala espeScaleTransform
cificada a la matriz de transformacin de este objeto
Graphics, anteponindola a esta ltima.
Sobrecargado. Establece la regin de recorte de este objeto
SetClip
Graphics en la propiedad Clip
del objeto Graphics especificado.
Devuelve un objeto String que
ToString (se hereda de Ob- representa al objeto Object
actual.
ject)
Compatible con .NET Compact Framework.
TransformPoints

88

Sobrecargado. Transforma una


matriz de puntos de un espacio
de coordenadas a otro utilizando las transformaciones
universal y de pgina actuales
de este objeto Graphics.
PROGRAMACION CON VISUAL BASIC.NET

TranslateClip

TranslateTransform

Sobrecargado. Convierte la regin de recorte de este objeto


Graphics usando las cantidades
especificadas en las direcciones horizontal y vertical.
Sobrecargado. Antepone la conversin especificada a la matriz de transformacin de este
objeto Graphics.

Mtodos protegidos
Finalize

Reemplazado. Vea
Object.Finalize.

Compatible con .NET Compact Framework. En C# y C++, los finalizadores se expresan


mediante la sintaxis del destructor.
Crea una copia superficial del
MemberwiseClone (se hereda objeto Object actual.
de Object)
Compatible con .NET Compact Framework.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

89

BIBLIOGRAFIA
1. Bembey, Pooja y Kaur Kuljit (2002). Proyectos profesionales Visual Basic .NET. Editorial Anaya Multimedia. Espaa.
2. Dobson, Rick (2002). Programacin de Microsoft Sql Server 2000 con Microsoft Visual
Basic .NET. Editorial McGrawHill. Espaa.
3. Evjen, Bill y Beres, Jason (2002). El libro de Microsoft Visual Basic .NET. Editorial
Anaya Multimedia. Espaa.
4. Francia Huambachano, Dario (2003). Desarrollo de aplicaciones ASP.NET. Editorial
Macro. Lima, Per.
5. Heredia Mayer, Juan Carlos (2004). Aplicaciones y Servicios Web con ASP.Net y SQL
Server 2000. Editorial GrapPeru SAC. Lima, Per.
6. Microsoft: MSDN training (2002). 2310B: Developing Microsoft ASP .NET, Web Applications Using Visual Studio .NET. Microsoft Corporation. Colombia.
7. Microsoft: MSDN training (2002). 2565A: Developing Microsoft .NET, Applications for
windows (Visual Basic .NET). Microsoft Corporation. Colombia.
8. Serrano Perez, Jorge (2002). Programacin con ASP .NET. Editorial Anaya Multimedia. Espaa.

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

91

INDICE ALFABETICO
.
.NET Framework, 3

C
Common Language Runtime, 6
comparar cadenas, 22
comparar valores, 21

D
Do...Loop, 39

O
operaciones aritmticas, 19
operadores aritmticos, 19
operadores de comparacin, 20
operadores de concatenacin, 24
operadores lgicos, 25

P
Preserve, 52
Procedimientos Function, 62
PROCEDIMIENTOS SUB, 59

E
ESTRUCTURAS DE CONTROL, 29

ReDim, 51
Return, 61

F
For...Next, 40
Funciones matemticas, 65

S
Select...Case, 35

G
GDI, 75
Crear imgenes, 76
Dibujar lneas y formas, 79

I
Identificadores, 14
If...Then...Else, 29
interfaz de diseo de grficos, 75

M
Matrices, 47
Cambiar el tamao, 51
dimensiones, 47
inicializar, 49
Matrices multidimensionales, 53

tipos de datos de Visual Basic .NET, 11

V
variable, 14
accesibilidad, 17
mbito, 16
declaracin, 14
local, 15
perodo de duracin, 16
variables de matriz, 48
Visual Studio .NET, 3

W
While...End While, 38

A.Gamarra M.- D.Gamarra M. - J.Gamarra M. J. Yarasca B.

93

94

PROGRAMACION CON VISUAL BASIC.NET

Das könnte Ihnen auch gefallen