Sei sulla pagina 1di 101

Parte 1: Introduccin al Desarrollo de

Aplicaciones con Visual Basic



Qu es Visual Basic?
Visual Basic es un ambiente grco de desarrollo de aplicaciones para el
sistema operati!o "icroso#t $indo%s& 'as aplicaciones creadas con Visual
Basic estn basadas en ob(etos ) son mane(adas por e!entos& Visual Basic
se deri!a del lengua(e Basic* el cual es un lengua(e de programacin
estructurado& +in embargo* Visual Basic emplea un modelo de
programacin mane(ada por e!entos&

'as Aplicaciones Procedurales
,n las aplicaciones tradicionales o procedurales* es la aplicacin -uien controla -ue
porciones de cdigo se e(ecuta* ) la secuencia en -ue este se e(ecuta& 'a e(ecucin de la
aplicacin se inicia con la primera l.nea de cdigo* ) sigue una ruta predenida a tra!s de
la aplicacin* llamando procedimientos seg/n sea necesario&

'as Aplicaciones "ane(adas por ,!entos
,n las aplicaciones mane(adas por e!entos* la e(ecucin no sigue una ruta predenida& ,n
!e0 de esto* se e(ecutan di#erentes secciones de cdigo en respuesta a e!entos& 'os
e!entos se desencadenan por acciones del usuario* por mensa(es del sistema o de otras
aplicaciones& 'a secuencia de e!entos determina la secuencia en -ue el cdigo se e(ecuta&
,s por esto -ue la ruta -ue sigue el cdigo de la aplicacin es di#erente cada !e0 -ue se
e(ecuta el programa&
1na parte esencial de la programacin mane(ada por e!entos es el escribir cdigo -ue
responda a los posibles e!entos -ue pueden ocurrir en una aplicacin& Visual Basic #acilita
la implementacin del modelo de programacin mane(ada por e!entos&

Qu es un ob(eto?
2ada #ormulario 3!entana4* men/ o control -ue se crea con Visual Basic es
un mdulo autocontenido llamado objeto. 'os blo-ues bsicos de
construccin de una aplicacin con Visual Basic son los ob(etos& 2ada ob(eto
tiene un con(unto de caracter.sticas ) un comportamiento denido
3propiedades, mtodos y eventos) -ue lo di#erencian de otros tipos de
ob(eto& ,n otras palabras* un ob(eto #ormulario 5a sido dise6ado para
cumplir determinada #uncin en una aplicacin* ) no es lo mismo -ue un
ob(eto men/&

Propiedades
,l con(unto de datos -ue describen las caracter.sticas de un ob(eto se le
conoce como sus propiedades. Para un #ormulario tenemos por e(emplo*
las propiedades BackColor 3color de #ondo4* Height 3altura4&
Algunas propiedades no solo determinan el aspecto -ue tiene el ob(eto* sino
-ue adems pueden determinar su comportamiento7 por e(emplo* la
propiedad MaButton establece si el #ormulario tendr o no el botn
Maximizar. 'a presencia o ausencia de este botn determinar si el
#ormulario se puede o no ma8imi0ar&


"todos
'os mtodos son un con(unto de procedimientos -ue permiten -ue un
ob(eto e(ecute una accin o tarea sobre s. mismo& Por e(emplo* para un
#ormulario tenemos el mtodo Hide -ue 5ar -ue el #ormulario se oculte7 o
el mtodo !ho" -ue 5ar -ue el #ormulario se !uel!a a mostrar&

,!entos
1n evento es una accin -ue es reconocida por el ob(eto& 1n e!ento ocurre
3se dispara4 como resultado de la interaccin del usuario con el ob(eto&
9ambin puede dispararse debido a la e(ecucin de cdigo 3sentencias4 o
como resultado de la interaccin de otro ob(eto con el ob(eto de poseedor
del e!ento& Para un #ormulario tenemos por e(emplo7 el e!ento #oad -ue se
dispara cuando se carga el #ormulario7 o el e!ento Click para un botn de
comando* se dispara cuando se 5ace clic sobre l&

Qu papel cumplen las propiedades* mtodos ) e!entos?
9oda aplicacin necesita una inter#a0 de usuario* la parte !isual a tra!s de
la cual el usuario interact/a con la aplicacin& 'os blo-ues bsicos de
construccin de una inter#a0 de usuario son los #ormularios ) los controles&
Visual Basic utili0a tcnicas de programaci$n visual para dise6ar las
aplicaciones&



Para dise6ar esta !entana 3:ormulario4* del con(unto de ob(etos de Visual
Basic seleccionamos un ob(eto tipo %ormulario 3:orm4& 'uego a la
propiedad &ombre 3;ame4 le asignamos el !alor 'rm(ntrada) a la
propiedad *+tulo le asignamos el !alor Bienvenidos a ,esti$n y
!istemas.

Dentro del #ormulario se colocan los controles& Para -ue el usuario pueda
ingresar un dato 3por e(emplo* la contrase6a4 colocamos en la !entana un
control tipo Cuadro de *eto 39e8tBo847 a continuacin establecemos su
propiedad &ombre en ttContrase-a, ) su propiedad .ass"ordChar es
un < 3asterisco4 para -ue el dato ingresado sea reempla0ado por asteriscos
slo en la pantalla* para -ue no se pueda !isuali0ar&
Para obtener el botn Ingresar seleccionamos un control tipo Bot$n de
Comando 32ommandButton4* ) lo colocamos en la !entana& 'uego
cambiamos sus propiedades7 a la propiedad &ombre le asignamos
cmd/ngresar, ) a la propiedad *+tulo le asignamos /ngresar.
+e desea -ue cuando el usuario 5aga clic en el botn #impiar, se borre
cual-uier dato -ue el usuario 5a)a ingresado en los Cuadros de *eto, )
-ue el punto de insercin e ubi-ue en el cuadro tt0suario. Para -ue esto
ocurra debemos programar el e!ento Hacer1Click del botn de comando
cmd#impiar.
,l e!ento debe e(ecutar dos sentenciar para cambiar la propiedad *eto de
cada uno de los cuadros de te8to* ) luego in!ocar al mtodo
(stablecer(n'o2ue3) del cuadro de te8to tt0suario.


,l ,ntorno Integrado de Desarrollo 3ID,4
2uando se inicia Visual Basic* se crea un pro)ecto nue!o con un #ormulario&
,l ID, de Visual Basic consta
Barra de Mens
Presenta los comandos -ue se usan para traba(ar con Visual Basic& Adems
de los men/s estndar 4rchivo, (dici$n, Ver, Ventana y 4yuda,
contiene otros men/s para tener acceso a #unciones espec.cas de
programacin* como .royecto, %ormato o 5epuraci$n.

Barra de Herramientas
Permite un acceso directo 3solo un clic4 a muc5as de las operaciones ms
#recuentes utili0adas durante el desarrollo de aplicaciones&
Cuadro de Herramientas
2ontiene todos los ob(etos ) controles -ue se pueden a6adir a los
#ormularios para crear aplicaciones&

Diseador de Formularios
:unciona como una !entana en la -ue se puede personali0ar el dise6o de la
inter#a0 de usuario 3!entana4 de una aplicacin&

Explorador de Proyectos
'ista de los arc5i!os 3#ormularios* mdulos* etc&4 del pro)ecto actual& 1n
.royecto es una coleccin de arc5i!os -ue utili0a para construir una
aplicacin&

Ventana de Propiedades
'ista los !alores de las propiedades del #ormulario o control seleccionado
-ue pueden ser modicados durante el dise6o del #ormulario o control&

Ventana de Cdigo
:unciona como un editor para escribir el cdigo 3sentencias4 de la
aplicacin&



=btencin de A)uda del +istema
Visual Basic proporciona una !ariedad de recursos para a)udarle a encontrar la in#ormacin
-ue necesite cuando se encuentre traba(ando dentro del entorno de desarrollo&

!yuda en l"nea
Visual Basic proporciona una amplia a)uda en l.nea& ,l arc5i!o de A)uda contiene muc5o
cdigo de e(emplo -ue se puede copiar directamente a una aplicacin&
'a a)uda de Visual Basic es sensible al conte8to& Para emplear la a)uda sensible al
conte8to en la !entana de cdigo* escriba la palabra para la cual desea in#ormacin* )
luego presione %6& Por e(emplo* si desea in#ormacin acerca de la sentencia 7pen* escriba
7pen ) presione :1&

#i$ros en Pantalla
Adems de la a)uda sensible al conte8to* el 2D>?=" de Visual Basic inclu)e una !ersin
en l.nea de la documentacin impresa para Visual Basic& Para acceder a los 'ibros en
Pantalla* 5aga clic en #ibros en .antalla dentro del men/ 4yuda de Visual Basic&

#a Ventana de Cdigo
'a !entana o editor de cdigo de Visual Basic proporciona de manera automtica
in#ormacin rele!ante a medida -ue se ingresa cdigo& Por e(emplo* si se escribe el nombre
de un control* seguido de un punto* las propiedades ) mtodos para ese control sern
mostrados automticamente en un cuadro de lista& 'uego se puede escoger la propiedad o
mtodo deseado para completar la sentencia&
2uando se ingresa el nombre de una #uncin en la !entana de cdigo* Visual Basic
automticamente proporciona el #ormato o sinta8is de la #uncin&



2mo se a6aden controles al #ormulario?
Para a6adir controles a un #ormulario tenemos dos mtodos:

M%todo &
9eniendo el cuadro de @erramientas o un :ormulario !isible, 5aga doble clic
en el control -ue desea a6adir en el Cuadro de Herramientas' los controles
se ubican en el centro del #ormulario* uno encima de otro* luego 5a) -ue
mo!erlos a la posicin deseada dentro del #ormulario&

M%todo (
1& 1& @aga clic sobre el control en el 2uadro de @erramientas&
A& A& 1bi-ue el puntero del "ouse 3una cru04 sobre el #ormulario en la
es-uina superior i0-uierda donde desea colocar el control&
B& B& ?ealice un clic sostenido mientras arrastra el puntero a la es-uina
superior derec5a donde colocar el control&
C& C& +uelte el botn del "ouse&

,stos cuatro pasos se repiten con cada control -ue desea a6adir al
#ormulario&



9erminolog.a de Visual Basic
2on#orme traba(e con Visual Basic* necesitar estar #amiliari0ado con los siguientes
trminos:

*rmino 5e8nici$n

9iempo de dise6o ,s el momento en el -ue se constru)e la
aplicacin&

9iempo de e(ecucin ,s el momento en el cual e(ecutamos e
interactuamos con la aplicacin como lo 5ar.a el
usuario&

:ormulario 1n #ormulario sir!e como una !entana -ue
puede personali0ar como la inter#a0 de su aplicacin
o como un cuadro de dilogo -ue usa para obtener
in#ormacin del usuario& 1n #ormulario puede
e8istir indi!idualmente o puede ser!ir como un
documento dentro de una inter#a0 de documento
m/ltiple 3"DI4

*rmino 5e8nici$n

2ontroles ?epresentacin grca de ob(etos tales como
botones* cuadros de lista* cuadros de edicin* etc&*
con los -ue el usuario interact/a para proporcionar
in#ormacin a la aplicacin&

=b(etos 1n trmino general usado para describir todos
los #ormularios ) controles -ue #orman parte de la
aplicacin&

Propiedades 'os !alores de un ob(eto* tales como tama6o*
t.tulo* color* etc&

"todos 'as acciones -ue un ob(eto puede reali0ar sobre s.
mismo&

,!entos +on acciones reconocidas por un #ormulario o
control& 'os e!entos ocurren a medida -ue el usuario
interact/a con los ob(etos de la aplicacin&

Programacin controlada
por e!entos 2uando un programa es controlado por
e)entos' usted escribe cdigo -ue se e(ecuta en
respuesta a e!entos in!ocados por el usuario& Diere
de la programacin procedural' en la cual el
programa comien0a en la primera l.nea de cdigo )
sigue un Du(o denido llamando procedimientos
cuando es necesario& 'a programacin controlada
por e!entos es la esencia de las inter#aces grcas
de usuario7 el usuario acciona ) el cdigo responde&



Qu es un pro)ecto?
2uando desarrolla una aplicacin* Visual Basic crea un arc5i!o especial
llamado 4rchivo de .royecto para administrar todos los dems arc5i!os
de la aplicacin&
,l 4rchivo de .royecto es simplemente una lista de todos los arc5i!os )
ob(etos asociados con el pro)ecto* as. como in#ormacin sobre las opciones
del entorno& ,sta in#ormacin se actuali0a cada !e0 -ue se guarda el
pro)ecto& 9odos los arc5i!os ) ob(etos tambin se pueden compartir con
otros pro)ectos& 1n pro)ecto est compuesto por los siguientes arc5i!os:

*ipo de archivo (tensi$n 5escripci$n

Pro)ecto &!bp ?eali0a el seguimiento de todos los
componentes de la aplicacin&

:ormulario &#rm &#r8 Inclu)e el #ormulario* los ob(etos sobre el
#ormulario ) el cdigo -ue se e(ecuta cuando
ocurre un e!ento en el #ormulario&

"dulo estndar &bas 2ontiene procedimientos !ub )
%unction -ue pueden ser in!ocados por
cual-uier #ormulario u ob(eto sobre el
#ormulario& 3opcional4
*ipo de archivo (tensi$n 5escripci$n

2ontroles
Personali0ados &oc8 2ontroles adicionales a los controles
estndar proporcionados por "icroso#t u otras
empresas& 3opcional4

"dulo de clase &cls 2ontiene la denicin de clase* mtodos
) propiedades de un nue!o tipo de ob(eto&
3opcional4

?ecursos &res 2ontiene in#ormacin binaria usada por
la aplicacin& +on usados generalmente
cuando se crean programas para m/ltiples
lengua(es&
3opcional4

2uando 5a completado todos los arc5i!os del pro)ecto puede con!ertir el
pro)ecto en un arc5i!o e(ecutable 3&e8e4&

Nota: Con las ediciones Pro*esional y Empresarial de Visual Basic tam$i%n
puede crear otro tipo de arc+i)os e,ecuta$les, como arc+i)os .ocx y .dll.



Pasos para crear una aplicacin

,l proceso de creacin de una aplicacin Visual Basic puede descomponer en una serie de
siete pasos&

1& 1& 2rear la inter#a0 de usuario
1sted crea una inter#a0 dibu(ando controles ) ob(etos sobre un #ormulario& A n de 5acer
-ue su cdigo sea ms #cil de leer ) depurar* debe luego asignar nombres a los ob(etos
usando con!enciones de nombres estndar&

A& A& ,stablecer las propiedades de los ob(etos de la inter#a0
'uego de a6adir ob(etos al #ormulario* se establece las propiedades de los ob(etos& Puede
establecer !alores iniciales )a sea usando la !entana de propiedades en tiempo de dise6o
o escribiendo cdigo para modicar las propiedades en tiempo de e(ecucin&

B& B& ,scribir cdigo para los e!entos
'uego de establecer las propiedades iniciales para el #ormulario ) cada ob(eto* a6ada el
cdigo -ue se e(ecutar en respuesta a los e!entos& 'os e!entos ocurren cuando di#erentes
acciones ocurren sobre un control u ob(eto& Por e(emplo* clic es un e!ento -ue puede
ocurrir para un botn de comando&

C& C& Euardar el pro)ecto
2uando crea el pro)ecto* aseg/rese de darle un nombre usando el comando
,uardar .royecto como del men/ 4rchivo. Euarde su pro)ecto
#recuentemente con#orme a6ada cdigo& Al guardar un pro)ecto se guardan
cada #ormulario ) mdulo de cdigo en el pro)ecto&

F& F& Probar ) depurar la aplicacin
2on#orme a6ada cdigo al pro)ecto* puede usar el comando /niciar en la
Barra de @erramientas para e(ecutar su aplicacin ) !er su comportamiento&
9ambin puede usar las 5erramientas de depuracin para !ericar errores )
modicar cdigo&

G& G& 2rear un arc5i!o e(ecutable
Al completar su pro)ecto* crear un arc5i!o e(ecutable usando el comando
,enerar 9.ee del men/ 4rchivo.

H& H& 2rear una aplicacin de instalacin
Debido a -ue su arc5i!o e(ecutable depende de otros arc5i!os* tales como
el arc5i!o en tiempo de e(ecucin de Visual Basic 3VbrunFIIBA&dll4* algunos
arc5i!os =2J ) arc5i!os D'' adicionales re-ueridos por la aplicacin o por
los controles Acti!eJ&



2on!enciones para los nombres de los ob(etos
'os ob(etos deben lle!ar nombres con un pre(o co5erente -ue #acilite la
identicacin del tipo de ob(eto& A continuacin se o#rece una lista de
con!enciones recomendadas para algunos de los ob(etos permitidos poro
Visual Basic&


*ipo de control .re8jo (jemplo

Panel BD pnl pnlErupo
Botn animado ani aniBu0n
2asilla de !ericacin c5K c5K+lo'ectura
2uadro combinado* cuadro lista desplegable cbo cboIngls
Botn de comando cmd cmd+alir
Dilogo com/n dlg dlgArc5i!oAbrir
2omunicaciones com com:a8
2ontrol de datos dat datBiblio
2uadro combinado enla0ado a datos dbcbo dbcbo'engua(e
2uadr.cula enla0ada a datos dbgrd
dbgrd?esultado2onsulta
2uadro de lista enla0ado a datos dblst dblst9ipo9area
2uadro de lista de directorios dir dir=rigen
2uadro de lista de unidades dr! dr!Destino
2uadro de lista de arc5i!os l l=rigen
:ormulario #rm #rm,ntrada
"arco #ra #ra'engua(e
"edidor gau gau,stado
Erco gra graIngresos
2uadr.cula grd grdPrecios
Barra de despla0amiento 5ori0ontal 5sb 5sbVolumen
Imagen 3Image4 img imgIcono
,stado de tecla Ke) Ke)"a)/sculas
,ti-ueta lbl lbl"s(A)uda
'.nea lin linVertical
*ipo de control .re8jo (jemplo

2uadro de lista lst lst2digoDePol.tica
"ensa(e "API mpm mpm,n!iar"s(
+esin "API mps mps+esin
"2I mci mciV.deo
:ormulario "DI secundario mdi mdi;ota
"en/ mnu mnuArc5i!oAbrir
"+ :le8 Erid msg msg2lientes
"+ 9ab mst mstPrimero
Acti!eJ ole ole@o(aDe9raba(o
,s-uema out outDiagramaDe=rg
Pen Bedit bed bed;ombre
Pen @edit 5ed 5ed:irma
9ra0o de pluma inK inK"apa
Imagen 3Picture4 pic picVEA
2lip de imagen clp
clpBarraDe@erramientas
In#orme rpt
rptEanancias9rimestre1
:orma s5p s5p2.rculo
2uadro de n/mero spn spnPginas
2uadro de te8to t8t t8tApellido
2ronmetro tmr tmrAlarma
Arriba>aba(o upd updDireccin
Barra de despla0amiento !ertical !sb !sbVelocidad
2ontrol desli0ante sld sld,scala
'ista de imgenes ils ils9odoslosIconos
Vista de rbol tre tre=rgani0acin
Barra de 5erramientas tlb tlbAcciones
9ab+trip tab tab=pciones
Barra de estado sta sta:ec5a@ora
'ista l!% l!%,ncabe0ados
Barra de progreso prg prg2argarArc5i!o
?ic59e8Bo8 rt# rt#In#orme



Pre(os sugeridos para men/s
'as aplicaciones suelen usar muc5os controles de men/* lo -ue 5ace /til tener un con(unto
/nico de con!enciones de nombres para estos controles& 'os pre(os de controles de
men/s se deben e8tender ms all de la eti-ueta inicial LmnuM* agregando un pre(o
adicional para cada ni!el de anidamiento* con el t.tulo del men/ nal en la /ltima posicin
de cada nombre& ,n la tabla siguiente 5a) algunos e(emplos&

!ecuencia del t+tulo del men: &ombre del controlador del men:

Arc5i!o Abrir mnuArc5i!adorAbrir
Arc5i!o ,n!iar correo mnuArc5i!o,n!iar2orreo
!ecuencia del t+tulo del men: &ombre del controlador del men:

Arc5i!o ,n!iar #a8 mnuArc5i!o,n!iar:a8
:ormato 2arcter mnu:ormato2arcter
A)uda 2ontenido mnuA)uda2ontenido

2uando se usa esta con!encin de nombres* todos los miembros de un
grupo de men/s determinado se muestran uno (unto a otro en la !entana
Propiedades de Visual Basic& Adems* los nombres del control de men/
documentan claramente los elementos del men/ a los -ue estn ad(untos&



:ormularios


,l #ormulario es el principal medio de comunicacin entre el usuario ) la aplicacin& 'os
usuarios interact/an con los controles sobre el #ormulario para ingresarle datos ) obtener
resultados&

Propiedades
BacK2olor 2olor de #ondo del #ormulario&
Border+t)le ,stilo del borde del #ormulario&
2aption 9e8to en la barra de t.tulo del #ormulario&
2ontrolBo8 9rueN:alse& Determina si tiene o no el cuadro de control&
,nabled 9rueN:alse& Determina si est 5abilitado para responder a
las acciones del usuario&
Icon Icono -ue se muestra cuando el #ormulario est
minimi0ado&
'e#t ) 9op 1bicacin del #ormulario&
"a8Button 9rueN:alse& Determina si tiene o no el botn Maximizar.
"inButton 9rueN:alse& Determina si tiene o no el botn Minimizar.
;ame ;ombre del #ormulario&
$indo%+tate ,stado inicial del #ormulario 3normal* ma8imi0ado o minimi0ado4

E)entos
Acti!ate =curre cuando el #ormulario se con!ierte en la !entana acti!a&
2licK =curre cuando 5ace clic sobre el #ormulario&
Deacti!ate =curre cuando el #ormulario de(a de ser la !entana acti!a&
'oad =curre cuando se carga un #ormulario&
1nload =curre cuando un #ormulario est a punto de
descargarse&

M%todos
@ide =culta el #ormulario&
?e#res5 Actuali0a el contenido del #ormulario&
+et:ocus 'e entrega el en#o-ue al #ormulario&
+5o% @ace !isible el #ormulario&



2ontroles Bsicos















2on los controles* los usuarios pueden operar ) obtener los resultados de
una aplicacin& Puede a6adir controles a un #ormulario seleccionando la
5erramienta adecuada del Cuadro de Herramientas. ,ntre los controles
ms comunes a utili0ar en una aplicacin tenemos: ,ti-ueta 3'abel4* 2uadro
de 9e8to 39e8tBo84 ) Botn de 2omando 32ommandButton4&

2ontrol
,ti-ueta
2ontrol
2uadro de
9e8to
2ontrol Bot
de 2omando
2ontrol ,ti-ueta 3'abel4
+e utili0a para mostrar te8to -ue el usuario no puede modicar&
Eeneralmente para identicar otros controles en el #ormulario o para
mostrar instrucciones al usuario&

Propiedades
Alignment Alineacin del te8to dentro del control&
Auto+i0e 9rueN:alse& Determina si el tama6o del control se a(usta
automticamente al te8to -ue contiene&
2aption 9e8to -ue muestra el control&
;ame ;ombre del control&
:ont ,stablece la #uente* estilo ) tama6o para el te8to del control&

2ontrol 2uadro de 9e8to 39e8tbo84
+e utili0a para -ue el usuario le proporcione datos a la aplicacin o para
-ue la aplicacin le de!uel!a la in#ormacin al usuario& ,l te8to -ue se
muestra en el control puede ser cambiado por el usuario&

Propiedades
,nabled 9rueN:alse& ,stablece un !alor -ue determina si el control puede
responder a e!entos generados por el usuario&
:ont ,stablece la #uentes* estilo ) tama6o para el te8to del control&
'ocKed 9rueN:alse& Determina si es posible modicar el te8to en el
control&
"a8'engt5 ,stablece la longitud m8ima permitida para el te8to en el
control&
"ulti'ine ,stablece si el control puede aceptar m/ltiples l.neas de te8to&
;ame ;ombre del control&
Pass%ord25ar 2arcter utili0ado para ocultar el te8to -ue realmente
contiene el control&
9e8t 9e8to -ue realmente contiene ) muestra el control&
Visible ,stablece si el control ser !isible para el usuario&

E)entos
25ange =curre cuando cambia el te8to -ue contiene el control&
Eot:ocus =curre cuando el control recibe el en#o-ue&
Oe)Do%n =curre cuando el usuario presiona una tecla mientras el control
tiene el en#o-ue&
'ost:ocus =curre cuando el control pierde el en#o-ue&

M%todos
?e#res5 Actuali0a el te8to del control&
+et:ocus "ue!e el en#o-ue al control&

2ontrol Botn de 2omando 32ommandbutton4
Permite -ue la aplicacin inicie* interrumpa o termine un proceso&

Propiedades
2ancel 9rueN:alse& ,stablece si el botn se comportar como el botn
cancelar en el #ormulario ) se in!ocar su e!ento Click cada
!e0 -ue se presione la tecla (!C&
2aption ,stablece el te8to -ue muestra el botn&
De#ault 9rueN:alse& ,stablece si el botn se comportar como el botn
predeterminado en el #ormulario&
:ont ,stablece la #uente* estilo ) tama6o para el te8to del control&
;ame ;ombre del botn&
Visible 9rueN:alse& ,stablece si el botn ser !isible para el
usuario&

E)entos
2licK =curre cuando se 5ace clic sobre el botn&

M%todos
+et:ocus "ue!e el en#o-ue al botn&



,stableciendo Propiedades
Al dise6ar la inter#ase de usuario de una aplicacin Visual Basic* se deben establecer la
propiedades para los controles 3ob(etos4 creados&

Esta$leciendo Propiedades en -iempo de Diseo
Algunas propiedades pueden ser establecidas en tiempo de dise6o& Para establecer estas
propiedades se emplea la !entana de propiedades& Para acceder a la !entana de
propiedades* oprima en botn secundario del ratn sobre un ob(eto* ) luego 5aga
clic en .ropiedades& 9ambin se puede obtener el mismo resultado
seleccionado el ob(eto ) luego presionando %;&
+i selecciona !arios ob(etos a la !e0 ) accede a la !entana de propiedades*
slo se mostrarn las propiedades -ue son comunes para todos los
controles seleccionados& 2ual-uier cambio -ue se 5aga a una propiedad
ser aplicada a todos los controles&

Esta$leciendo Propiedades en -iempo de E,ecucin
,n tiempo de e(ecucin* se puede escribir cdigo para establecer u obtener
el !alor de una propiedad& 'a siguiente l.nea de cdigo establece a negrita
la #uente de un cuadro de te8to llamado t8tData&

txtData.Font.Bold = True ' Establece el texto a negrita

,ste cdigo establece la propiedad *et del cuadro de te8to t8tData

txtData.Text = "Hola mundo" 'Establece el valor del texto

+i se omite el nombre de la propiedad* se establece la propiedad
predeterminada del control& 'a propiedad predeterminada de un cuadro de
te8to es la propiedad *et& 'a propiedad predeterminada de una eti-ueta
es la propiedad Caption& 'as siguientes l.neas de cdigo establecen las
propiedades predeterminadas te8t ) caption de un cuadro de te8to ) de una
eti-ueta&

txtData = "Se establece la propiedad Text del cuadro de
texto"
lblData = "Se establece la propiedad Caption de la
etiueta"

.$teniendo Propiedades en -iempo de E,ecucin
Puede emplear el siguiente cdigo para obtener el !alor de una propiedad
en tiempo de e(ecucin&

Dim s!ombre as String
s!ombre = txt!ame.Text



Procedimientos de ,!ento
Visual Basic in!oca automticamente procedimientos de e!ento en
respuesta a acciones del teclado* del ratn o del sistema& Por e(emplo* los
botones de comando tienen un procedimiento de e!ento 2licK& ,l cdigo
-ue se escriba en el procedimiento de e!ento 2licK es e(ecutado cuando el
usuario 5aga clic en un botn de comando&
Para abrir la !entana de cdigo* 5aga doble clic en el control o #ormulario*
5aga clic en la orden C$digo del men/ Ver.
2ada control tiene un con(unto (o de procedimientos de e!ento& 'os
procedimientos de e!ento para cada control son mostrados en un cuadro de
lista despegable en la !entana de cdigo& ,l siguiente cdigo muestra el
procedimiento de e!ento 2licK para un botn de comando llamado cmd=O&

"rivate Sub cmd#$%Clic&'(
)sgBox "Hola"
End Sub



=rden de 9abulacion de los 2ontroles
,l orden de tabulaci$n es el orden en -ue un usuario se mue!e de un
control a otro pulsando la tecla 9ab& Por omisin* el orden de tabulacin es
igual al orden en -ue se 5an colocado los controles en el #ormulario&
Para cambiar el orden de tabulacin de los controles de un #ormulario*
estable0ca el !alor de la propiedad *ab/nde de cada control& ,l !alor de
esta propiedad !a desde I 5asta n>1* siendo n el n/mero de controles -ue
tiene el #ormulario&

/uitar un control del orden de ta$ulacin
;ormalmente* presionando la tecla 9ab en tiempo de e(ecucin pasamos de
un control a otro en el orden de tabulacin establecido& Podemos -uitar un
control del orden de tabulacin si establecemos su propiedad *ab!top en
%alse. 1n control cu)a propiedad *ab!top se 5a establecido en %alse
sigue manteniendo su posicin en el orden de tabulacin actual* aun-ue el
control es saltado al ir de un control a otro con la tecla 9ab&

Nota: #os controles 0ue no pueden o$tener en*o0ue' al igual 0ue los
controles desacti)ados o in)isi$les' no tienen la propiedad TabIndex y no
est1n incluidos en el orden de ta$ulacin. Cuando el usuario presiona -a$'
estos controles son ignorados.

9ecla de Acceso ?apido a un 2ontrol
+i el control tiene la propiedad Caption, se le puede asignar una tecla de
acceso rpido para seleccionar el control ) de esta manera el control
recibir el en#o-ue cada !e0 -ue se oprima 4#* < *eclade4cceso& Para
especicar la tecla de acceso rpido debe resaltar un carcter de la cadena
en la propiedad Caption colocando delante de este el s.mbolo LPM. Por
e(emplo si el !alor de la propiedad Caption es la cadena 0suario, ) se
desea denir la tecla s como la de acceso rpido* deber establecer la
propiedad Caption de la siguiente manera: 0=suario. ,l te8to del control
se !er as. 0suario&
Algunos controles* tales como el control Cuadro de *eto, no tiene la
propiedad Caption. Para crear una tecla de acceso para esos controles:
1& 1& 2olo-ue un control (ti2ueta cerca de otro control&
A& A& ,stable0ca la propiedad Caption del control (ti2ueta para contener
la tecla de acceso apropiada&
B& B& ,stable0ca para el control (ti2ueta un !alor de orden de tabulacin
menor en una unidad -ue el de otro control&

2uando pulse 4#* < *eclade4cceso del control (ti2ueta* el en#o-ue se
mo!er 5acia el otro control debido a -ue el control (ti2ueta no puede
recibir el en#o-ue&

Parte A: "ane(o de :ormularios


"odulos de :ormulario
2ada #ormulario en su aplicacin tiene un mdulo de #ormulario asociado* estos son
guardados con una e8tensin de arc5i!o :?" ) contienen:
'os !alores de las propiedades para el #ormulario ) sus controles&
Declaracin de !ariables en el mbito del #ormulario&
Procedimientos de e!ento ) procedimientos generales en el mbito
del #ormulario&

Nota: #as descripciones gr12cas de un *ormulario y los controles so$re el
*ormulario son almacenados en *ormato $inario en un arc+i)o con extensin
F34.


"odulos ,stndar
'os mdulos estndar pueden contener cdigo -ue es com/n a !arios #ormularios en su
aplicacin& ,ste cdigo es por omisin p/blico* lo cual signica -ue #cilmente compartido
con otros mdulos de cdigo* tales como un mdulo de #ormulario& ,stos mdulos
contienen declaraciones de procedimientos* tipos ) !ariables& ;o pueden almacenar
procedimientos de e!ento por -ue no contienen ob(etos&


'a Ventana de 2odigo
Cdigo es un trmino general para todas las sentencias Visual Basic -ue
usted escribe en una aplicacin: procedimientos de e!ento )
procedimientos generales& ,l cdigo en Visual Basic se escribe en la
!entana de 2digo& ,l editor de te8to es solo un editor A+2II con colores
para di#erenciar las palabras cla!es en el cdigo -ue escribe&
'a Ventana de Cdigo se usa para escribir* mostrar ) editar el cdigo de su
aplicacin& Puede abrir una !entana de cdigo por cada mdulo de su
aplicacin* de modo -ue puede #cilmente copiar ) pegar entre ellos&



'ista de
=b(etos
'ista de
,!entos
Bot Ver
Procedimiento
Bot Ver
" ulo
Barra de
Di!isi
'a Ventana de Cdigo contiene:

El Cuadro #ista de .$,etos
"uestra el nombre del ob(eto seleccionado& @aga clic en la Dec5a a la derec5a del cuadro
=b(eto para mostrar una lista de todos los ob(etos asociados con el #ormulario&

El Cuadro #ista de E)entos
"uestra todos los e!entos reconocidos para el #ormulario o control
mostrado en el cuadro =b(eto& 2uando seleccionamos un e!ento* en la
!entana de cdigo se muestra el procedimiento de e!ento asociado con ese
e!ento&

#a Barra de Di)isin
Desde el men/ Ventana puede e(ecutar el comando Di)idir para di!idir la
!entana de cdigo en dos partes* cada una de las cuales se despla0a
separadamente& Puede entonces !er di#erentes partes de su cdigo al
mismo tiempo& 'a in#ormacin -ue aparece en el cuadro =b(eto )
Procedimiento se reere al cdigo en la parte -ue tiene el en#o-ue& ,l
mismo comando utili0ado para di!idir la !entana puede utili0arlo para cerrar
una de sus partes o tambin lo puede 5acer arrastrando la barra de di!isin
5acia la parte superior o in#erior de la !entana&

El Botn Ver Procedimiento
,stablece -ue en la !entana de cdigo se edite un procedimiento a la !e0&

El Botn Ver Mdulo Completo
,stablece -ue en la !entana de cdigo se tenga acceso a todos los procedimientos*
separados por una l.nea separadora uno de otro&


,ditando 2digo
1se las caracter.sticas de edicin de Visual Basic para -ue su cdigo sea ms #cil de leer&

5angr"a
1se la sangr.a para di#erenciar partes de su cdigo* tales como estructuras
repetiti!as ) condicionales& Para aplicar sangr.a a una seccin de sentencias
de un cdigo use la tecla *ab o el comando 4plicar sangr+a del men/
(dici$n& +e #orma similar* !hi't Q *ab o el comando 4nular sangr+a del
men/ (dici$n -uitar una sangr.a a las l.neas seleccionadas& Veamos el
siguiente e(emplo:

"rivate Sub cmd*ngresar%Clic&'(
*+ ,en'Trim'txt-suario((=. T/en
txt-suario.SetFocus
Else*+ ,en'Trim'txtContrase0a((=. T/en
txtContrase0a.SetFocus
Else*+ txtContrase0a = 123"S4 T/en
)sgBox 1,a clave ingresada es correcta4
-nload )e
Else
)sgBox 1,a clave ingresada no es v5lida4
txtContrase0a.SelStart=.
txtContrase0a.Sel,engt/= ,en'Trim'txtContrase0a((
txtContrase0a.SetFocus
End *+
End Sub

Car1cter de Continuacin de #"nea
,l carcter subra)ado 3R4 es el carcter de continuacin de l.nea* ) se usa para di!idir una
sentencia en m/ltiples l.neas& ,sto 5ace -ue la sentencia sea ms #cil de leer por-ue est
contenida totalmente dentro de la !entana de cdigo en lugar de e8tenderse mas all de
sus l.mites& ,l carcter de continuacin de l.nea se coloca luego de un espacio de la
sentencia* como se muestra en el siguiente e(emplo:

)sgBox ",a clave ingresada no es v5lida"6 %
vb#$#nl7 8 vbExclamation6 %
")ensa9e"

Comentarios
,l a6adir documentacin ) comentarios a su cdigo permite comprender
me(or lo -ue 5ace el cdigo& ,sto tambin a)uda a comprender el cdigo si
necesita !ol!er a re!isarlo en alguna #ec5a posterior& 1n comentario se
inicia con el carcter apstro#e 3S4* de modo -ue todo el te8to -ue contin/e
a este carcter ser ignorado en la e(ecucin de la aplicacin& Veamos el
siguiente e(emplo:

"rivate Sub cmd,impiar%Clic&'(
'Este procedimiento limpia la ventana de identi+icaci:n
txt-suario.Text = "" ',impia el cuadro de texto -suario
txtContrase0a.Text = "" ',impia el cuadro de texto Contrase0a
txt-suario.SetFocus ' )ueve el en+oue al cuadro de texto -suario
End Sub



2uadro de "ensa(e ) de ,ntrada
1na de las #ormas ms simples de obtener in#ormacin para ) desde el
usuario es utili0ando las #unciones MagBo e /npuBo respecti!amente&

;pta = )sgBox'"<Est5 seguro de eliminar a este
cliente="6 %
Funcin MsgBox67
'os cuadros de mensa(e o#recen un modo simple ) rpido de consultar a los usuarios por
in#ormacin simple o para permitirles tomar decisiones sobre el camino -ue su programa
debe tomar& Puede usar esta #uncin para mostrar di#erentes tipos de mensa(e ) botones
con los cuales el usuario da una respuesta&






%ormato

"sgBo83 prompt T* buttonsU T* title U T* 5elple* conte8tU 4

,' #ormato de la #uncin "sgBo8 consta de los siguientes argumentos:

Parte Descripcin

Prompt ?e-uerido& ,8presin de cadena -ue representa el mensa(e en
el cuadro de dilogo& 'a longitud m8ima de prompt es de
apro8imadamente 1IAC de caracteres* seg/n el anc5o de los
caracteres utili0ados& +i prompt consta de ms de una l.nea*
puede separarlos utili0ando un carcter de retorno de carro
325r31B4 4 o un carcter de a!ance de l.nea 325r31I4 4* o una
combinacin de caracteres de retorno de carro > a!ance de
l.nea 325r31B ) 25r31I4 4 entre cada l.nea ) la siguiente&
Buttons =pcional& ,8presin numrica -ue corresponde a la suma de los !alores -ue
especican el n/mero ) el tipo de los botones -ue se pretenden mostrar* el
estilo de icono -ue se !a a utili0ar* la identidad del botn predeterminado )
la modalidad del cuadro de mensa(es& +i se omite este argumento* el !alor
predeterminado para buttons es I&
9itle =pcional& ,8presin de cadena -ue se muestra en la barra de
t.tulo del cuadro de dilogo& +i se omite title* en la barra de
t.tulo se coloca el nombre de la aplicacin&
@elple =pcional& ,8presin de cadena -ue identica el arc5i!o de
A)uda -ue se utili0a para proporcionar a)uda interacti!a en el
cuadro de dilogo& +i se especica 5elple* tambin se debe
especicar conte8t&
2onte8t =pcional& ,8presin numrica -ue es igual al n/mero de
conte8to de A)uda asignado por el autor al tema de A)uda
correspondiente& +i se especica conte8t* tambin se debe
especicar 5elple&

Valores

,l argumento buttons puede asumir los siguientes !alores:

Constante ValorDescripcin

Vb=O=nl) I "uestra solamente el botn Aceptar&
Vb=O2ancel 1 "uestra los botones Aceptar ) 2ancelar&
VbAbort?etr)Ignore A "uestra los botones Anular* ?eintentar e
Ignorar&
VbVes;o2ancel B "uestra los botones +.* ;o ) 2ancelar&
VbVes;o C "uestra los botones +. ) ;o&
Vb?etr)2ancel F "uestra los botones ?eintentar )
2ancelar&

Vb2ritical 1G "uestra el icono de mensa(e cr.tico&
VbQuestion BA "uestra el icono de pregunta de ad!ertencia&
Constante ValorDescripcin

Vb,8clamation CW "uestra el icono de mensa(e de
ad!ertencia&
VbIn#ormation GC "uestra el icono de mensa(e de
in#ormacin&

VbDe#aultButton1 I ,l primer botn es el predeterminado&
VbDe#aultButtonA AFG ,l segundo botn es el predeterminado&
VbDe#aultButtonB F1A ,l tercer botn es el predeterminado&
VbDe#aultButtonC HGW ,l cuarto botn es el predeterminado&

VbApplication"odal I Aplicacin modal7 el usuario debe responder al
cuadro de mensa(es antes de poder seguir
traba(ando en la aplicacin actual&
Vb+)stem"odal CIXG +istema modal7 se suspenden todas las aplicaciones
5asta -ue el usuario responda al cuadro de
mensa(es&

,l primer grupo de !alores 3I a F4 describe el n/mero ) el tipo de los
botones mostrados en el cuadro de dilogo7 el segundo grupo 31G* BA* CW*
GC4 describe el estilo del icono* el tercer grupo 3I* AFG* F1A* HGW4 determina
el botn predeterminado ) el cuarto grupo 3I* CIXG4 determina la
modalidad del cuadro de mensa(es& 2uando se suman n/meros para
obtener el !alor nal del argumento buttons* se utili0a solamente un
n/mero de cada grupo&

Nota8 Estas constantes las especi2ca Visual Basic. Por tanto' el
nom$re de las mismas puede utilizarse en cual0uier lugar del cdigo en )ez
de sus )alores reales.


Valores devueltos

ConstanteValorDescripcin

Vb=K 1 Aceptar
Vb2ancel A 2ancelar
VbAbort B Anular
Vb?etr) C ?eintentar
VbIgnore F Ignorar
VbVes G +.
Vb;o H ;o

Nota: 5i desea omitir alg9n argumento' de$e incluir el delimitador de
coma correspondiente o utilizar argumentos con nom$re.

(jemplos
Str)sg = "<Desea continuar="
Estilo = vb>es!o 8 vbExclamation 8 vbDe+aultButton?
StrTitulo = ";esponda"
;pta = )sgBox'str)sg6 Estilo6 StrTitulo (
*+ ;pta= vb>es T/en
@@@@@@@@@@@
@@@@@@@@@@@
Else
@@@@@@@@@@@
@@@@@@@@@@@
End *+

Str)sg = "<Desea continuar="
iEstilo = vb>es!o 8 vbExclamation 8 vbDe+aultButton?
StrTitulo = ";esponda"
i;pta = )sgBox' "romptA=str)sg6 TitleA= StrTitulo6 ButtonsA= iEstilo (
*+ i;pta= vb>es T/en
@@@@@@@@@@@
@@@@@@@@@@@
strCodigo = *nputBox'"*ngrese el c:digo del cliente a
buscarA"6 % "BBsueda"6 "C,*...C"(
Else
@@@@@@@@@@@
@@@@@@@@@@@
End *+


Funcin InpuBox67

'a #uncin InputBo8 muestra un mensa(e en un cuadro de dilogo* espera
-ue el usuario escriba un te8to o 5aga clic en un botn ) de!uel!e un tipo
+tring con el contenido del cuadro de te8to&





%ormato
InputBo83 prompt T* titleU T* de#aultU T* 8posU T*)posU T* 5elple* conte8tU
4

,l #ormato de la #uncin InpuBo8 consta de los siguientes argumentos con nombre:

Parte Descripcin

Prompt ?e-uerido& ,8presin de cadena -ue se muestra como mensa(e en el cuadro
de dilogo& 'a longitud m8ima de prompt es de apro8imadamente de 1IAC
caracteres* seg/n el anc5o de los caracteres utili0ados& +i prompt consta de
ms de una l.nea* puede separarlos utili0ando un carcter de retorno de
carro 325r31B44* un carcter de a!ance
Parte Descripcin

de l.nea 325r31I44 o una combinacin de los caracteres de retorno de carro Y
a!ance de l.nea 325r31B4 ) 325r31I44 entre cada l.nea ) la siguiente&
9itle =pcional& ,8presin de cadena -ue se muestra en la barra de
t.tulo del cuadro de dilogo& +i omite title* en la barra de t.tulo
se coloca el nombre de la aplicacin&
De#ault =pcional& ,8presin de cadena -ue se muestra en el cuadro de
te8to como respuesta predeterminada& +i omite de#ault* se
muestra el cuadro de te8to !ac.o&
Jpos =pcional& ,8presin numrica -ue especica* la distancia en
sentido 5ori0ontal entre el borde i0-uierdo del cuadro de dilogo
) el borde i0-uierdo de la pantalla& +i se omite 8pos* el cuadro
de dilogo se centra 5ori0ontalmente&
Vpos =pcional& ,8presin numrica -ue especica* la distancia en
sentido 5ori0ontal entre el borde i0-uierdo del cuadro de dilogo
) el borde i0-uierdo de la pantalla& +i se omite )pos* el cuadro
de dilogo se coloca apro8imadamente un tercio de la altura de
la pantalla* desde el borde superior de la misma&
@elple =pcional& ,8presin de cadena -ue identica el arc5i!o de
A)uda -ue se utili0ar para proporcionar a)uda interacti!a para
el cuadro de dilogo& +i se especica 5elple* tambin deber
especicar conte8t&
2onte8t =pcional& ,8presin numrica -ue es el n/mero de conte8to de
A)uda asignado por el autor al tema de A)uda correspondiente&
+i se especica conte8t* tambin deber especicarse 5elple&

Comentarios
+i el usuario 5ace clic en Cancelar* la #uncin de!uel!e una cadena de
caracteres de longitud cero 3LM4&

Nota: 5i desea omitir algunos argumentos' de$e incluir el delimitador
de coma correspondiente o utilizar argumentos con nom$re.



2onstantes Predenidas
Visual Basic reconoce cierta cantidad de constantes predenidas -ue
pueden se usadas en cual-uier parte de su cdigo en lugar de !alores
numricos& Puede 5acer -ue su cdigo sea ms #cil de leer ) escribir
mediante el uso de estas constantes& Adems* los !alores de estas
constantes pueden cambiar en !ersiones posteriores de Visual Basic* su uso
permitir -ue su cdigo sea compatible& Por e(emplo* la propiedad
>indo"!tate de un #ormulario puede aceptar las siguientes constantes:

Constante Valor 5escripci$n
Vb;ormal I ;ormal
Vb"inimi0ed 1 "inimi0ado
Vb"a8imi0ed A "a8imi0ado


Por e(emplo* para establecer el estado del #ormulario 'rm(ntrada en
ma8imi0ado* la sentencia ser.a:

+rmEntrada.DindoEState = vb)aximiFed


"ane(o de :ormularios
;ormalmente la inte#a0 de una aplicacin est compuesta por !arios
#ormularios& 2uando Visual Basic inicia la aplicacin* automticamente se
muestra el #ormulario de arran-ue* mientras -ue los otros #ormularios
deben ser mostrados ) ocultados a tra!s de cdigo& ,l mtodo o #uncin
usado depende de lo -ue deseamos 5acer&

*area Mtodo o /nstrucci$n
2argar un #ormulario en memoria* pero 1se la sentencia #oad* o
5aga re#erencia a una
sin mostrarlo propiedad o control sobre el
#ormulario&
2argar o mostrar el #ormulario& 1se el mtodo !ho"&
"ostrar un #ormulario cargado& 1se el mtodo !ho".
=cultar u #ormulario 1se el mtodo Hide.
=cultar un #ormulario ) descargarlo de 1se la sentencia 0nload.
memoria&


M%todo 5+o:
"uestra un #ormulario& +i el #ormulario no est cargado al momento de e(ecutar el mtodo
+5o%* Visual Basic lo cargar automticamente&

%ormato

;ombreDel:ormulario&+5o%

(jemplo

FrmEntrada.S/oE


5entencia #oad
2arga un #ormulario a la memoria* pero no lo muestra&

%ormato

'oad ;ombreDel:ormulario

(jemplo

,oad FrmEntrada


E)ento #oad
,l e!ento #oad ocurre cuando el #ormulario es cargado en la memoria& ,sto sucede cuando
se usa la sentencia #oad* o cuando se in!oca el mtodo !ho" ) el #ormulario a/n no est
cargado en memoria& ;ormalmente* este e!ento se utili0a para establecer algunas
propiedades del #ormulario* los controles -ue se encuentran en l* o !ariables a ni!el del
#ormulario&
(jemplos?
"rivate Sub Form%,oad'(
+rm*ngreso.,e+t = 'Screen.Didt/ @ +rm*ngreso.Didt/( G ?
+rm*ngreso.Top = 'Screen.Heig/t @ +rm*ngreso.Heig/t( G ?
End Sub

"rivate Sub Form%,oad'(
txt-suario.Text=""
txtContrase0a.Text=""
cmd*ngresar.Enabled=False
End Sub



M%todo Hide
=culta un #ormulario* pero no lo descarga de memoria&

%ormato

;ombreDel:ormulario&@ide

(jemplo?
+rm*ngreso.Hide


5entencia ;nload
Descarga un #ormulario de memoria

%ormato

1nload ;ombreDel:ormulario

Comentarios

'a descarga de un #ormulario puede ser necesario o con!eniente en a-uellos casos en los
-ue la memoria utili0ada se necesite para alguna otra tarea o cuando sea necesario
restablecer las propiedades a sus !alores originales&
Antes de descargar un #ormulario se e(ecuta el e!ento 0nload 3Form_Unload. +i
establece el argumento Cancelar a *rue en este e!ento* no se descargar el #ormulario&

!ugerencia

1se la palabra Me para re#erirse al #ormulario actual&
(jemplo

H Descarga el +ormulario actual
"rivate Sub cmdCerrar@Clic& ' (
-nload )e
End Sub


E)ento ;nload
=curre cuando un #ormulario est a punto de descargarse& ,ste e!ento se desencadena
por-ue un usuario cierra el #ormulario mediante el comando Cerrar del men/ Control o
una sentencia 0nload.
,l parmetro Cancelar, es un entero -ue determina si el #ormulario es descargado& +i
Cancelar es I* el #ormulario se descarga& ,stablecer Cancelar a cual-uier !alor distinto de
cero impide -ue el #ormulario sea descargado&

(jemplo

"rivate Sub Form%-nload'Cancel 2s *nteger(
Dim i;pta 2s *nteger
i;pta = )sgBox'1<Esta seguro de cerrar la ventana=46 %
Ib>es!o 8 vbJuestion6 1)ensa9e4(
*+ i;pta = vb!o T/en
Cancel = True
End *+
End Sub



:ormularios "odales ) ;o "odales
1n #ormulario -ue se abre como !odal* no permite -ue el usuario interact/e con otros
#ormularios de la misma aplicacin 5asta -ue no sea cerrado&
1n #ormulario -ue se abre como No !odal* permite al usuario cambiar a otros #ormularios
de la misma aplicacin sin -ue los primeros sean cerrados&
,l argumento "stilo del mtodo #$o% determina si el #ormulario se abre como !odal o
No !odal&

(jemplos
' Cargar el +ormulario +rm*ngreso
% como )odal
+rmEntrada.S/oE vb)odal

'Cargar el +ormulario %
+rm*ngreso como !o )odal
+rmEntrada.S/oE vb)odaless



:inali0acin de una Aplicacin
+e puede nali0ar la e(ecucin de la aplicacin descargando el /ltimo #ormulario de la
aplicacin o usando la sentencia "nd& 'a sentencia "nd termina la e(ecucin de la
'ista de men

aplicacin ) descarga todos los #ormularios& 2uando nali0a su aplicacin con la sentencia
(nd no se desencadena ning/n e!ento de los #ormularios&
(jemplos

H Descarga el +ormulario actual
"rivate Sub cmdCerrar@Clic& ' (
-nload )e
End Sub
H FinaliFa la aplicaci:n
"rivate Sub cmdFinaliFar@Clic& ' (
End
End Sub



,l ,ditor de men/s
,sta 5erramienta permite crear men/s personali0ados para la aplicacin )
denir sus propiedades& Para ingresar* estando en tiempo de dise6o* 5aga
clic en el men/ Herramientas ) luego en la orden (ditor de Men:s o en
el botn e-ui!alente de la barra de 5erramientas estndar&

Nota: Para poder ingresar el editor de men9s no de$e encontrarse en la
)entana de cdigo.


.pciones del cuadro de di1logo

Parte Descripcin
2aption 'e permite escribir el nombre del comando o del men/ -ue
desea -ue apare0ca en la barra de men/s o en un men/& +i
desea crear una barra separadora en el men/* escriba un
/nico guin 3>4 en el cuadro 2aption&
Parte Descripcin

Para dar al usuario acceso a tra!s del teclado a un elemento
del men/* escriba el signo P delante de una letra& ,n tiempo de
e(ecucin* esta letra aparecer subra)ada 3el signo P no ser
!isible4 ) el usuario tendr acceso al men/ o al comando si
presiona las
teclas 4#* ) la correspondiente a la letra subra)ada& +i necesita
-ue apare0ca en el men/ el signo P* deber escribir dos signos
P consecuti!os&
;ame 'e permite escribir un nombre de control para el elemento del
men/& ,l nombre de control es un identicador -ue slo se
utili0a para tener acceso al elemento del men/ en el cdigo* no
aparece en ning/n men/&
Inde8 'e permite asignar un !alor numrico -ue determina la posicin
del control en una matri0 de controles& ,sta posicin no tiene
ninguna relacin con la ubicacin del control en la pantalla&
+5ortcut 'e permite seleccionar una tecla de mtodo abre!iado para
cada comando&
@elp2onte8tID 'e permite asignar un !alor numrico /nico para el Id& de
conte8to& ,ste !alor se utili0a para encontrar el tema de A)uda
apropiado en el arc5i!o de A)uda identicado mediante la
propiedad @elp:ile&
;egotiatePosition 'e permite seleccionar la propiedad ;egotiatePosition del
men/& ,sta propiedad determina si el men/ aparece o no en un
#ormulario contenedor ) cmo aparece&
25ecKed 'e permite 5acer -ue apare0ca inicialmente una marca de
!ericacin a la i0-uierda de un elemento del men/& +e utili0a
normalmente para indicar si una opcin de alternar est
acti!ada o no&
,nabled 'e permite seleccionar si el elemento del men/ debe responder
a e!entos& Desacti!e esta opcin si desea -ue el elemento del
men/ no est disponible ) apare0ca atenuado&
Visible 'e permite 5acer -ue un elemento apare0ca en el men/&
$indo%'ist Determina si el control del men/ contiene una lista de
#ormularios secundarios "DI abiertos en una aplicacin "DI&
:lec5a a la derec5a
Pasa el men/ seleccionado a un ni!el in#erior cada !e0 -ue 5ace
clic en el botn& Puede crear 5asta cuatro ni!eles de submen/s&
:lec5a a la i0-uierda
Pasa el men/ seleccionado a un ni!el superior cada !e0 -ue
5ace clic en el botn& Puede crear 5asta cuatro ni!eles de
submen/s&
:lec5a arriba
2ada !e0 -ue se 5ace clic en este botn* el elemento
seleccionado del men/ se mue!e 5acia arriba una posicin
dentro del mismo ni!el de men/&
:lec5a aba(o
2ada !e0 -ue se 5ace clic en este botn* el elemento
seleccionado del men/ se mue!e 5acia aba(o una posicin
dentro del mismo ni!el de men/&
'ista "en/s ,s un cuadro de lista -ue muestra en orden (err-uico
todos los elementos del men/&
'os elementos de los submen/s aparecen indentados para
indicar su ubicacin o su ni!el en la (erar-u.a&
+iguiente +elecciona la l.nea siguiente&
Insertar Inserta una l.nea en el cuadro de lista* inmediatamente encima
de la l.nea actualmente
Parte Descripcin
seleccionada&
,liminar ,limina Borra la l.nea actualmente seleccionada&
Aceptar 2ierra el ,ditor de men/s ) aplica todos los cambios e#ectuados
en el /ltimo #ormulario
seleccionado& ,l men/ est disponible en tiempo de dise6o* pero
si selecciona un men/
en la #ase de dise6o* se abre la !entana 2digo para el e!ento
2lic de ese men/ en lugar de e(ecutarse el cdigo del e!ento&
2ancelar 2ierra el ,ditor de men/s ) cancela todos los cambios&



A6adiendo 2ontroles Adicionales al 2uadro de @erramientas
,l 2uadro de @erramientas contiene los controles intr.nsecos o estndar de
Visual Basic& ,s posible ampliar el cuadro de 5erramientas a6adiendo
controles Acti!eJ& 'a edicin pro#esional de Visual Basic proporciona
controles Acti!eJ adicionales& 9ambin es posible comprar controles Acti!eJ
a terceras partes&
Para a6adir un control Acti!eJ al cuadro de 5erramientas 5aga lo siguiente:
1& 1& ,n el men/ .royecto* 5aga clic en Componentes& Visual Basic
mostrar el cuadro de dilogo Componentes&
A& A& ,n la c5a Controles* 5aga clic en el control -ue desea incluir* )
luego 5aga clic en 4ceptar& Visual Basic a6adir el control al cuadro de
5erramientas&

El control -oolBar
1n control *oolbar contiene una coleccin de ob(etos Button utili0ados
para crear una barra de 5erramientas asociada a una aplicacin&

Comentarios

;ormalmente* una barra de 5erramientas contiene botones -ue
corresponden a elementos de men/ de una aplicacin* proporcionando una
inter#a0 grca al usuario -ue le permite tener acceso a las #unciones )
comandos empleados con ms #recuencia en esa aplicacin&
,l control *oolbar le permite crear barras de 5erramientas agregando ob(etos Button a
una coleccin Buttons7 cada ob(eto Button puede tener te8to opcional o una
imagen* proporcionados por un control /mage#ist asociado& Puede mostrar una
imagen en un botn con la propiedad /mage o mostrar te8to con la propiedad
Caption* o ambos* para cada ob(eto Button& ,n tiempo de dise6o puede agregar
ob(etos Button al control utili0ando la .@gina de propiedades del control
9oolbar& ,n tiempo de e(ecucin* puede agregar o -uitar botones de la coleccin
Buttons mediante los mtodos 4dd ) Aemove&
Para programar el control *oolbar* agregue cdigo al e!ento ButtonClick para -ue
responda al botn seleccionado& 9ambin puede determinar el comportamiento )
la apariencia de cada ob(eto Button mediante la propiedad !tyle& Por e(emplo* si
a cuatro botones se les asigna el estilo Button,roup* slo se podr presionar
uno de ellos ) al menos uno estar siempre presionado&
'a #acilidad de uso se me(ora considerablemente programando
descripciones *ool*ip*et de cada ob(eto Button& Para mostrar
in#ormacin sobre 5erramientas* la propiedad !ho"*ips debe establecerse
a 9rue&

El Control Image#ist
1n control /mage#ist contiene una coleccin de ob(etos #ist/mage* a
cada uno de los cuales se puede 5acer re#erencia mediante su .ndice o su
cla!e& ,l control /mage#ist no est concebido para utili0arlo en solitario*
sino como punto de almacenamiento central para proporcionar
cmodamente imgenes a otros controles&

Comentarios

Puede usar el control /mage#ist con cual-uier control -ue asigne un ob(eto
.icture a una propiedad .icture&
,s posible agregar imgenes de di#erentes tama6os al control /mage#ist*
pero todas se a(ustan al mismo tama6o& ,l tama6o de los ob(etos de
#ist/mage est determinado por uno de los siguientes !alores:
,l !alor de las propiedades /mage>idth ) /mageHeight antes
de agregar alguna imagen&
'as dimensiones de la primera imagen agregada&
;o 5a) ninguna limitacin en cuanto al tama6o de la imagen* pero el
n/mero total de imgenes -ue se puede cargar est limitado por la
cantidad de memoria disponible&
Durante el dise6o del programa puede agregar imgenes mediante la c5a
,eneral del cuadro de dilogo .ropiedades del control /mage#ist& ,n
tiempo de e(ecucin puede agregar imgenes mediante el mtodo 4dd
para la coleccin #ist/mages&

Nota8 #os controles Toolbar e Image&ist *orman parte del grupo de
controles !cti)e4 adicionales Microso*t <indo:s Common Controls =.>
6arc+i)o C.MC-#?(..C47. Para usarlos en su aplicacin de$e agregar el
arc+i)o C.MC-#?(..C4 al proyecto. Cuando distri$uya su aplicacin'
instale el arc+i)o C.MC-#?(..C4 en la carpeta 5ystem o 5ystem?( 6en
plata*ormas con <indo:s @-7 de Microso*t <indo:s del usuario.



Inter#a0 de "/ltiples Documentos 3"DI Y "ultiple Document
Inter#ase4

El .$,eto MDIForm
1n #ormulario "DI es una !entana -ue act/a como #ondo de una aplicacin
) es el contenedor de #ormularios -ue tienen su propiedad "DI25ild
establecida a 9rue& Para crear un ob(eto "DI:orm* eli(a 4gregar 'ormulario
M5/ en el men/ .royecto* luego de agregarlo tenga en cuenta lo
siguiente:

1na aplicacin slo puede tener un ob(eto "DI:orm* pero !arios
#ormularios secundarios "DI&
+i un #ormulario secundario "DI tiene men/s* la barra de men/s del
#ormulario secundario reempla0ar automticamente a la barra de
men/s del ob(eto "DI:orm cuando el #ormulario secundario "DI est
acti!o&
1n #ormulario secundario "DI minimi0ado se mostrar como un icono
en el "DI:orm&
1n ob(eto "DI:orm slo puede contener controles "enu ) PictureBo8*
) controles personali0ados -ue tengan una propiedad Align& Para colocar
otros controles en un "DI:orm* puede dibu(ar un cuadro de imagen en el
#ormulario ) despus dibu(ar otros controles dentro del cuadro de
imagen& Puede utili0ar el mtodo Print para mostrar te8to en un cuadro
de imagen de un "DI:orm* pero no puede usar este mtodo para
mostrar te8to en el "DI:orm propiamente dic5o&
1n ob(eto "DI:orm no puede ser modal&
'os #ormularios secundarios "DI se dise6an de #orma independiente
del "DI:orm* pero siempre estn contenidos en el "DI:orm en tiempo de
e(ecucin&


Formulario secundario MDI
1n #ormulario contenido dentro de un #ormulario "DI en una aplicacin con
inter#a0 de m/ltiples documentos 3"DI4& Para crear un #ormulario
secundario* estable0ca su propiedad "DI25ild a 9rue&


Propiedad MDIC+ild
De!uel!e o establece un !alor -ue indica si un #ormulario debe mostrarse
como #ormulario secundario "DI dentro de un #ormulario "DI& ,s de slo
lectura en tiempo de e(ecucin& 'os !alores admitidos para la propiedad
"DI25ild son:

Valor5escripci$n
9rue ,l #ormulario es "DI secundario ) se mostrar dentro del #ormulario
"DI primario&
:alse 3Predeterminado4 ,l #ormulario no es "DI secundario&

Comentarios

1tilice esta propiedad al crear una aplicacin con inter#a0 de m/ltiples
documentos 3"DI4& ,n tiempo de e(ecucin* los #ormularios -ue tengan
establecida a 9rue esta propiedad se mostrarn dentro de un #ormulario
"DI& 'os #ormularios "DI secundarios pueden ma8imi0arse* minimi0arse )
despla0arse* siempre dentro del #ormulario "DI primario& 2uando traba(e
con #ormularios "DI secundarios* tenga en cuenta lo siguiente:

,n tiempo de e(ecucin* cuando un #ormulario "DI secundario se
ma8imi0a* su t.tulo se combina con el del #ormulario "DI primario&
,n tiempo de dise6o* los #ormularios "DI secundarios se muestran de
la misma #orma -ue el resto ) slo se mostrarn dentro del #ormulario
primario en tiempo de e(ecucin& ,l icono de un #ormulario "DI
secundario en la !entana Pro)ecto es distinto de los iconos de otros tipos
de #ormularios&
'os #ormularios "DI secundarios no pueden ser modales&
,l entorno operati!o "icroso#t $indo%s controla el tama6o ) la
posicin iniciales de los #ormularios "DI secundarios* a menos -ue los
estable0ca espec.camente en el procedimiento de e!ento 'oad&
+i se 5ace re#erencia a un #ormulario "DI secundario antes de cargar
el #ormulario "DI primario* ste se cargar automticamente& +in
embargo* si se 5ace re#erencia al #ormulario "DI primario antes de
cargar un #ormulario "DI secundario* el #ormulario "DI secundario no se
cargar&
Parte B: 9ipos De Datos* 2onstantes
) Variables


9ipos de Datos
1n tipo de dato determina la naturale0a del dominio de !alores -ue puede tomar una
!ariable* las operaciones en -ue puede participar ) el espacio de memoria -ue necesita& 'a
tabla siguiente muestra los tipos de datos* inclu)endo el tama6o de almacenamiento ) el
inter!alo&


*ipo de 5ato *ama-o de
4lmacenamient
o
Aango
B)te 1 b)te I a AFF
Boolean A b)tes 9rue o :alse
Integer A b)tes >BA&HGW a BA&HGH
'ong
3entero largo4
C b)tes >A&1CH&CWB&GCW a A&1CH&CWB&GCH
+ingle
3coma DotanteN
precisin simple4
C b)tes >B*CIAWAB,BW a >1*CI1AXW,>CF para !alores negati!os7
1*CI1AXW,>CF a B*CIAWAB,BW para !alores positi!os
Double
3coma DotanteN
precisin doble4
W b)tes >1*HXHGXB1BCWGABA,BIW a >C*XCIGFGCFWC1ACH,>BAC para
!alores negati!os7 C*XCIGFGCFWC1ACH,>BAC a
1*HXHGXB1BCWGABA,BIW para !alores positi!os
2urrenc)
3entero a escala4
W b)tes >XAA&BBH&AIB&GWF&CHH*FWIW a XAA&BBH&AIB&GWF&CHH*FWIH

Decimal 1C b)tes QN>
HX&AAW&1GA&F1C&AGC&BBH&FXB&FCB&XFI&BBF sin punto
decimal7
QN>
H*XAAW1GAF1CAGCBBHFXBFCBXFIBBF con AW posiciones a la
derec5a del signo decimal7 el n/mero ms pe-ue6o distinto
de cero es
QN>
I*IIIIIIIIIIIIIIIIIIIIIIIIII1
Date W b)tes 1 de enero de 1II a B1 de Diciembre de XXXX
=b(ect C b)tes 2ual-uier re#erencia a tipo =b(ect
+tring
3longitud
!ariable4
1I b)tes Q
longitud de la
cadena
Desde I a A&III millones
+tring
3longitud (a4
'ongitud de la
cadena
Desde 1 a GF&CII apro8imadamente
Variant
3con n/meros4
1G b)tes 2ual-uier !alor numrico 5asta el inter!alo de un tipo
Double
Variant
3con caracteres4
AA b)tes Q
longitud de la
cadena
,l mismo inter!alo para un tipo +tring de longitud !ariable&

Denido por el
usuario
3utili0ando 9)pe4
;/mero
re-uerido
por los elementos
,l inter!alo de cada elemento es el mismo -ue el inter!alo
de su tipo de datos
Nota: #as matrices de cual0uier tipo de datos re0uieren (> $ytes de memoria m1s cuatro
$ytes para cada dimensin de matriz' m1s el n9mero de $ytes 0ue ocupan los propios
datos. Por e,emplo' los datos de una matriz unidimensional 0ue constan de cuatro
elementos de datos tipo Integer de dos $ytes cada uno' ocupan oc+o $ytes. #os oc+o
$ytes 0ue re0uieren los datos m1s los (A $ytes necesarios para la matriz suman un
re0uisito total de memoria de ?( $ytes para dic+a matriz. ;n tipo Variant 0ue contiene una
matriz re0uiere &( $ytes m1s 0ue la matriz por s" sola.


Con)ertir tipos de datos
Visual Basic proporciona !arias #unciones de con!ersin -ue puede utili0ar para con!ertir
!alores de tipos de datos espec.cos& Por e(emplo* para con!ertir un !alor a Currency,
utilice la #uncin Ccur?

"ago"orSemana = Ccur '/oras K "ago"orHora(

'a siguiente tabla muestra las #unciones de con!ersin:

%unciones de
Conversi$n Convierten una epresi$n en
2bool Boolean
2b)te B)te
2cur 2urrenc)
2date Date
2Dbl Double
2int Integer
2'ng 'ong
2+ng +ingle
2+tr +tring
2!ar Variant
2V,rr ,rror

Nota: #os )alores 0ue se pasan a una *uncin de con)ersin de$en ser )1lidos para el tipo
de dato de destino o se producir1 un error. Por e,emplo' si intenta con)ertir un tipo &ong
en un Integer' el tipo de &ong de$e de estar en el inter)alo )1lido del tipo de dato
Integer.



Variables
'as !ariables se utili0an para almacenar !alores temporalmente durante la e(ecucin de
una aplicacin& 'as !ariables tienen un nombre 3la palabra -ue utili0a para re#erirse al !alor
-ue contiene la !ariable4 ) un tipo de dato 3-ue determina la clase de dato -ue la !ariable
puede almacenar4&

!lmacenamiento y recuperacin de datos en )aria$les
1tilice una sentencia de asignacin para reali0ar clculos ) asignar el resultado a una
!ariable:

"an0anaVendidas Z 1I S +e pasa el !alor 1I a la !ariable
"an0anasVendidas Z "an0anasVendidas Q 1

=bser!e -ue el signo igual del e(emplo es un operador de asignacin* no un operador de
igualdad7 el !alor '( se asigna a la !ariable ManBanasVendidas.

Declaracin de Varia$les
Declarar una !ariable es decirle al programa algo de antemano& +e declara una !ariable
mediante la instruccin 5im, proporcionando un nombre a la !ariable* seg/n la siguiente
sinta8is:

5im nombre>!ariable T4s tipoU

'as !ariables -ue se declaran en un procedimiento mediante la sentencia 5im slo e8isten
mientras se e(ecuta el procedimiento& 2uando termina el procedimiento* desaparece el
!alor de la !ariable& Adems* el !alor de una !ariable de un procedimiento es local a dic5o
procedimiento7 es decir* no puede tener acceso a una !ariable de un procedimiento desde
otro procedimiento& ,stas caracter.sticas le permiten utili0ar los mismos nombres de
!ariables en distintos procedimientos sin preocuparse por posibles conDictos o
modicaciones accidentales&

,l nombre de una !ariable debe cumplir con los siguientes re-uisitos:
Debe comen0ar con una letra&
;o puede incluir un punto o un carcter de declaracin de tipo 3[*P*\*]*^*_4&
;o debe e8ceder de AFF caracteres&
Debe ser /nica en el mismo alcance* -ue es el inter!alo desde el -ue se puede
5acer re#erencia a la !ariable: un procedimiento* #ormulario* etc&

'a clusula opcional 4s tipo de la sentencia 5im le permite denir el tipo de dato o de
ob(eto de la !ariable -ue !a a declarar& 'os tipos de datos denen el tipo de in#ormacin
-ue almacena la !ariable& Algunos e(emplos de tipos de datos son !tring, /nteger )
Currency. 'as !ariables tambin pueden contener ob(etos de Visual Basic u otras
aplicaciones& Algunos e(emplos de tipos de ob(eto de Visual Basic* o clases* son =b(ect*
:orm1 ) 9e8tBo8&

@a) otras #ormas de declarar !ariables:
Declarar una !ariable en la seccin Declaraciones de un mdulo de #ormulario*
estndar o de clase* en !e0 de un procedimiento* 5ace -ue la !ariable est disponible
para todos los procedimientos del mdulo&
Declarar una !ariable mediante la palabra cla!e .ublic 5ace -ue est accesible
para toda la aplicacin&
Declarar una !ariable local mediante la palabra cla!e !tatic conser!a su !alor
aun-ue termine el procedimiento&

Declaracin Impl"cita
;o tiene por -u declarar una !ariable antes de utili0arla& Por e(emplo* podr.a escribir una
#uncin donde no 5iciera #alta declarar *empVal antes de utili0arla:
Function ;aLF 'num(
TempIal = 2bs 'num(
;aLF = Sr'TempIal(
End Function

Visual Basic crea automticamente una !ariable con ese nombre* -ue puede utili0ar como
si la 5ubiera declarado e8pl.citamente& Aun-ue es cmodo* puede pro!ocar errores sutiles
en el cdigo si se e-ui!oca de nombre de !ariable& Por e(emplo* suponga -ue 5a escrito
esta #uncin:

Function ;aLF 'num(
TempIal = 2bs 'num(
;aLF = Sr 'TemIal(
End Function

A primera !ista* parece igual& Pero como se 5a escrito errneamente la !ariable *empVal
en la tercera l.nea* la #uncin de!ol!er siempre cero& 2uando Visual Basic encuentra un
nombre nue!o* no puede a!eriguar si realmente desea declarar una !ariable nue!a o
simplemente 5a escrito de #orma errnea una !ariable e8istente* por lo -ue crea una
!ariable nue!a con ese nombre&

Declaracin Expl"cita
Para e!itar problemas al e-ui!ocarse de nombre en las !ariables* puede congurar Visual
Basic para -ue le a!ise siempre -ue encuentre un nombre -ue no se 5a)a declarado
e8pl.citamente como una !ariable&

Para declarar !ariables de #orma e8pl.cita:

Inclu)a esta sentencia en la seccin Declaraciones Benerales del mdulo de clase*
de #ormulario o estndar:

#ption Explicit

> o bien >

,n el men/ Herramientas, eli(a 7pciones* 5aga clic en la c5a (ditor ) acti!e la
opcin 5eclaraci$n de variables re2uerida. ,sto inserta automticamente la
sentencia 7ption (plicit en los mdulos nue!os* pero no en los )a creados* por lo
-ue tendr -ue agregar manualmente 7ption (plicit a los mdulos e8istentes en el
pro)ecto&

+i 5ubiera tenido e#ecto dic5a instruccin en el mdulo de #ormulario o mdulo estndar
-ue contiene la #uncin Aa+B, Visual Basic 5abr.a reconocido 9empVal ) 9emVal como
!ariables no declaradas ) 5abr.a generado errores para ambas& Deber.a* por tanto* declara
e8pl.citamente 9empVal:

Function ;aLF 'num(
Dim TempIal
TempIal = 2bs 'num(
;aLF = Sr 'TemIal(
End Fuction


!lcance de las Varia$les
,l alcance de una !ariable dene en -u partes del cdigo son reconocidas& 2uando
declara una !ariable en un procedimiento* slo el cdigo de dic5o procedimiento puede
tener acceso o modicar el !alor de la !ariable7 tiene un alcance local al procedimiento& A
!eces* sin embargo* se necesita utili0ar una !ariable con un alcance ms general* como
a-uella cu)o !alor est disponible para todos los procedimientos del mismo mdulo o
incluso para todos los procedimientos de toda la aplicacin& Visual Basic le permite
especicar el alcance de una !ariable cuando la declara&

(stablecido el alcance de las variables
Dependiendo de cmo se declara* una !ariable tiene como alcance un procedimiento
3local4 o un mdulo&


4lcance .rivado .:blico
;i!el de procedimiento 'as !ariables son pri!adas ;o es aplicable& ;o
al procedimiento donde se puede declarar !ariables
declaran& p/blicas dentro de un
procedimiento&
;i!el de mdulo 'as !ariables son pri!adas 'as !ariables estn
al mdulo donde se disponibles para todos
declaran& los mdulos&


Varia$les utilizadas en un procedimiento
'as !ariables al ni!el de procedimiento slo se reconocen en el procedimiento en el -ue se
5an declarado& +e las conoce tambin como !ariables locales& +e declaran mediante las
palabras cla!e 5im o !tatic. Por e(emplo:

Dim intTemp 2s *nteger
> o bien >
Static intContador 2s *nteger

'os !alores de !ariables locales declaradas con !tatic e8isten mientras se e(ecuta la
aplicacin* mientras -ue las !ariables declaradas con 5im slo e8isten mientras se e(ecuta
el procedimiento&

Varia$les utilizadas en un mdulo
De #orma predeterminada* una !ariable al ni!el de mdulo est disponible para todos los
procedimientos del mdulo* pero no para el cdigo de otros mdulos& 2ree !ariables al
ni!el de mdulo declarndolas con la palabra cla!e .rivate en la seccin 5eclaraciones
,enerales al principio del mdulo& Por e(emplo:

"rivate intTemp 2s *nteger

Al ni!el de mdulo* no 5a) di#erencia entre .rivate ) 5im, pero es pre#erible usar
.rivate por-ue contrasta con .ublic ) 5ace -ue el cdigo sea ms #cil de comprender&

Varia$les utilizadas por todos los mdulos
Para 5acer -ue una !ariable al ni!el de mdulo est disponible para otros mdulos* utilice
la palabra cla!e .ublic para declararlas& 'os !alores de las !ariables p/blicas estn
disponibles para todos los procedimientos de la aplicacin& Al igual -ue todas las !ariables
al ni!el del mdulo* las !ariables p/blicas se declaran en la seccin 5eclaraciones
,enerales al principio del mdulo& Por e(emplo:

"ublic intTemp 2s *nteger

Nota: @o puede declarar )aria$les p9$licas en un procedimiento' slo en la seccin
Declaraciones )enerales de un mdulo.


2onstantes
A menudo !er -ue el cdigo contiene !alores constantes -ue reaparecen una ) otra !e0& =
puede -ue el cdigo dependa de ciertos n/meros -ue resulten di#.ciles de recordar
3n/meros -ue* por s. mismos* no tienen un signicado ob!io4&
,n estos casos* puede me(orar muc5o la legibilidad del cdigo ) #acilitar su mantenimiento
si utili0a constantes& 1na constante es un nombre signicati!o -ue sustitu)e a un n/mero
o una cadena -ue no !ar.a& Aun-ue una constante recuerda ligeramente a una !ariable* no
puede modicar una constante o asignarle un !alor nue!o como ocurre con una !ariable&
@a) dos or.genes para las constantes:

2onstantes intr*nsecas o de8nidas por el sistema proporcionadas por Visual
Basic&
'as constantes simblicas o de8nidas por el usuario se declaran mediante la
instruccin Const.

Creacin de sus propias constantes
'a sinta8is para declarar una constante es la siguiente:

C.ublicD.rivateE Const nombreRconstante T4s tipoU F e8presin

,l argumento nom$reCconstante es un nombre simblico !lido 3las reglas son las mismas
-ue para crear nombres de !ariable4 ) expresin est compuesta por constantes )
operadores de cadena o numricos7 sin embargo* no puede utili0ar llamadas a #unciones en
expresin& 1na instruccin Const puede representar una cantidad matemtica o de #ec5a )
5ora:

Const con"i = M.CNCOP?QOMORPSP
"ublic Const con)ax"lanetas 2s *nteger = P
Const conFec/aSalida = TCGCGPOT

+e puede utili0ar tambin la instruccin Const para denir constantes de cadena:

"ublic Const conIersion = 1 .S.C..24
Const con!ombreClave = 1Enigma4

Puede colocar ms de una declaracin de constante en una /nica l.nea si las separa con
comas:

"ublic Const con"i=M.CN6 con)ax"lanetas=P6 con"ob)undial=QE8.P

A menudo* la e8presin del lado derec5o del signo igual 3 Z 4 es un n/mero o cadena
literal* pero tambin puede ser una e8presin -ue d como resultado un n/mero o una
cadena 3aun-ue la expresin no puede contener llamadas a #unciones4& Puede incluso
denir constantes en trminos de constantes pre!iamente denidas:

Const con"i? = con"i K ?
1na !e0 -ue dena las constantes* puede colocarlas en el cdigo para 5acerlo ms legible&
Por e(emplo:

Static SistemaSolar 'C To con)ax"lanetas(
*+ num"ersonas U con"op)undial T/en Exit Sub

!lcance de las constantes de2nidas por el usuario
1na instruccin Const tiene igual alcance -ue una declaracin de !ariable ) se le aplican
las mismas reglas:

Para crear una constante -ue slo e8ista en un procedimiento* declrela dentro del
procedimiento&

Para crear una constante disponible para todos los procedimientos de un mdulo*
pero no para el cdigo -ue est #uera del mdulo* declrela en la seccin
5eclaraciones ,enerales del mdulo&


Para crear una constante disponible en toda la aplicacin* declare la constante en la
seccin 5eclaraciones ,enerales de un mdulo estndar ) colo-ue delante de Const
la palabra cla!e .ublic. ;o se pueden declarar las constantes p/blicas en un mdulo
de clase o de #ormulario&

E)itar re*erencias circulares
2omo es posible denir constantes en trminos de otras constantes* deber tener cuidado
para no establecer un ciclo o re#erencia circular entre dos o ms constantes& +e produce un
ciclo cuando se tienen dos o ms constantes p/blicas* cada una de las cuales est denida
en #uncin de la otra& Por e(emplo:

'En el ):dulo CA
"ublic Const con2 = conB K ? ' Disponible en toda la aplicaci:n

'En el ):dulo ?A
"ublic Const conB = con2 G ? ' Disponible en toda la aplicaci:n

+i se produce un ciclo* Visual Basic generar un error cuando intente e(ecutar la aplicacin&
;o puede e(ecutar el cdigo 5asta -ue resuel!a la re#erencia circular& Para e!itar la
creacin de un ciclo* restrin(a todas las constantes p/blicas a un /nico mdulo o* al menos*
al menor n/mero posible de mdulos&



2on!enciones para ;ombres de 2onstantes ) Variables
'as !ariables se deben denir siempre con el menor alcance posible& 'as !ariables globales
3p/blicas4 pueden 5acer lgica de una aplicacin mu) di#.cil de entender& 'as !ariables
globales tambin 5acen ms di#.cil mantener ) !ol!er a usar el cdigo&

,n Visual Basic las !ariables pueden tener el alcance siguiente:

4lcance 5eclaraci$n Visible en
;i!el de procedimiento 5im o !tatic en el ,l procedimiento en el
Procedimiento* -ue est declarada
+ubprocedimiento o
:uncin
4lcance 5eclaraci$n Visible en
;i!el de mdulo .rivate en la seccin 9odos los procedimientos
Declaraciones Benerales del mdulo de #ormulario
de un mdulo de o de cdigo
#ormulario o de cdigo
3&#rm* &bas4
Elobal .ublic en la seccin ,n toda de aplicacin
Declaraciones Benerales
de un mdulo de cdigo
3&bas4

,n una aplicacin de Visual Basic* las !ariables globales se deben usar slo cuando no
e8ista ninguna otra #orma cmoda de compartir datos entre #ormularios& 2uando 5a)a -ue
usar !ariables globales* es con!eniente declararlas todas en un /nico mdulo agrupadas
por #unciones ) dar al mdulo un nombre signicati!o -ue indi-ue su nalidad* como
P/blicas&

1na prctica de codicacin correcta es escribir cdigo modular siempre -ue sea posible&
Por e(emplo* si la aplicacin muestra un cuadro de dilogo* colo-ue todos los controles ) el
cdigo necesario para e(ecutar la tarea del dilogo en un /nico #ormulario& ,sto a)uda a
tener cdigo de la aplicacin organi0ado en componentes /tiles ) minimi0a la sobrecarga
en tiempo de e(ecucin&

A e8cepcin de las !ariables globales 3 -ue no se deber.an pasar4* los procedimientos )
#unciones deben operar slo sobre los ob(etos -ue se les pasan&

Pre2,os de alcance de )aria$les
A medida -ue aumenta el tama6o del pro)ecto* tambin aumenta la utilidad de reconocer
rpidamente el alcance de las !ariables& ,sto se consigue escribiendo un pre(o de alcance
de una letra delante del pre(o de tipo* sin aumentar demasiado la longitud del nombre de
las !ariables&


4lcance .re8jo (jemplo
Elobal g gstr;ombre1suario
;i!el de mdulo m mblnProgresoDel2lculo
'ocal del Procedimiento ;inguno dblVelocidad


1na !ariable tiene alcance glo$al si se declara como .ublic en un mdulo estndar o en un
mdulo de #ormulario& 1na !ariable tiene alcance de ni)el de mdulo si se declara como
.rivate en un mdulo estndar o en un mdulo de #ormulario* respecti!amente&

Nota: #a co+erencia es crucial para usar esta t%cnica de *orma producti)aD el corrector de
sintaxis de Visual Basic no interceptar1 las )aria$les de ni)el de mdulo 0ue comience con
EpF.


Constantes
,l nombre de las constantes se debe escribir en ma)/sculas ) min/sculas* con la letra
inicial de cada palabra en ma)/sculas& Aun-ue las constantes estndar de Visual Basic no
inclu)en in#ormacin de tipo de datos ) el alcance de una constante& Para los nombres de
constantes* se deben seguir las mismas normas -ue para las !ariables& Por e(emplo:

mint)5x,ista-suario H ,Lmite de entradas m5ximas para la
H lista de usuarios
H 'valor entero6 local del m:dulo(
gstr!ueva,Lnea H Car5cter de nueva lLnea
H 'cadena6 global de la aplicaci:n(

Varia$les
Declarar todas las !ariables a5orra tiempo de programacin por-ue reduce el n/mero de
errores debidos a nombres de !ariables errados 3por e(emplo* a;ombre1suario9mp #rente
a s;ombre1suario9mp #rente a s;ombre1suario9emp4& ,n la c5a (ditor del cuadro de
dilogo 7pciones* acti!e la opcin 5eclaraci$n de variables re2uerida. 'a instruccin
7ption (plicit re-uiere -ue declare todas las !ariables del programa de Visual Basic&

'as !ariables deben lle!ar un pre(o para indicar su tipo de datos& =pcionalmente* ) en
especial para programas largos* el pre(o se puede ampliar para indicar el alcance de la
!ariable&

-ipos de datos de )aria$les
1se los siguientes pre(os para indicar el tipo de datos de una !ariable&

*ipo de datos .re8jo (jemplo

Boolean bln bln,ncontrado
B)te b)t b)tDatosImagen
=b(eto 2ollection col col$idgets
2urrenc) cur curIngresos
Date 39ime4 dtm dtmInicio
Double dbl dbl9olerancia
,rror err err;/mDe=rden
Integer int int2antidad
'ong lng lngDistancia
=b(ect ob( ob(Acti!o
+ingle sng sng"edia
+tring str str;ombre:
Denido por el usuario udt udt,mpleado
Variant !nt !nt25ecK+um


@om$res descripti)os de )aria$les y procedimientos
,l cuerpo de un nombre de !ariable o procedimiento se debe escribir en ma)/sculas )
min/sculas ) debe tener la longitud necesaria para describir su #uncionalidad& Adems* los
nombres de #unciones deben empe0ar con un !erbo* como Iniciar;ombre"atri0 o
2errarDilogo&

Para nombres -ue se usen con #recuencia o para trminos largos* se recomienda usar
abre!iaturas estndar para -ue los nombres tengan una longitud ra0onable& ,n general* los
nombres de !ariables con ms de BA caracteres pueden ser di#.ciles de leer en pantalla
VEA&
2uando se usen abre!iaturas* 5a) -ue asegurarse de -ue sean co5erentes en toda la
aplicacin& Alterar aleatoriamente entre 2nt ) 2ontar dentro de un pro)ecto pro!oca una
con#usin innecesaria&

-ipos de2nidos por el usuario
,n un pro)ecto grande con muc5os tipos denidos por el usuario* suele ser /til dar a cada
uno de estos tipos un pre(o de tres caracteres& +i estos pre(os comien0an con LuM* ser
#cil reconocerlos cuando se est traba(ando con tipos denidos por el usuario& Por
e(emplo* LucliM se podr.a usar como pre(o para las !ariables de un tipo 2liente denido por
el usuario&



9ipos Adicionales de Variables

3egistros o Estructuras
+on tipos de datos denidos por el usuario& ,s bsicamente un con(unto de !arios datos de
tipos elementales agrupados ba(o una denominacin com/n& Debe declararse en la seccin
5eclaraciones ,enerales de un mdulo& +e usa la palabra reser!ada *ype.

!intais

-ype @om$reDel@ue)o-ipo
@om$reDelElemento& !s -ipoDato
@om$reDelElemento( !s -ipoDato
@om$reDelElemento? !s -ipoDato
...
...
End -ype

(jemplo

T7pe ;egEmpleado
EmpC:digo 2s *nteger
Emp!ombre 2s String K N.
EmpCargo 2s String K CO
End T7pe


!rreglo de Varia$les
1n arreglo es una coleccin de elementos del mismo tipo con un nombre com/n& 'os
elementos son identicados por el nombre com/n ) un .ndice&

!intais

Dim @om$reDel!rreglo6 Dimensin&' Dimensin(' ... 7 !s -ipoDeDato

Visual Basic soporta 5asta GI dimensiones& Al declarar las dimensiones se puede indicar un
solo n/mero* en cu)o caso se entiende -ue dic5a dimensin !a de cero 5asta el n/mero
indicado& 9ambin es posible indicar e8pl.citamente el inicio ) trmino de la dimensin&
(jemplo

Dim ,istaC '?.( 2s *nteger ' ?C elementos6 del . al ?.
Dim ,ista? 'C to ?.( 2s *nteger ' ?. elementos6 del C al ?.
Dim Tabla 'C to C.6 C to ?.( 2s String ' Tabla de C. x ?.


!rreglos Din1micos
@a) situaciones en las cuales se desea usar un arreglo* pero al momento del dise6o no se
sabe sus dimensiones& Para este tipo de situaciones Visual Basic permite declaraciones de
arreglos del siguiente modo:

Dim x ' ( 2s *nteger
...
...
;edim x 'lst,ista.,istCount(

2uando se redimensiona un arreglo* los !alores almacenados anteriormente se pierden*
por-ue cada elemento es reiniciali0ado con cero o null dependiendo del tipo de dato del
elemento& +i se desea preser!ar los !alores debemos usar la palabra cla!e .reserve en la
sentencia de redimensionamiento&

;edim "reserve x ' int!BmeroDeElementos (


=P,?AD=?,+

!ritm%ticos

` ,8ponenciacin
< "ultiplicacin
N Di!isin
Di!isin entera
"od ?esiduo entero 3,(m: A "od B4
Q +uma
- - ?esta
P 2oncatenacin de cadenas


Comparacin

Z Igual
ab Distinto
"enor -ue
aZ "enor o igual
bZ "a)or o igual
'iKe 2ompara dos cadenas
< 2ero o ms caracteres 3,(m: cad 'iKe Lma<M4
? 2ual-uier carcter
^ 2ual-uier d.gito 3I>X4
TlistaU cual-uier carcter en lista
TclistaU cual-uier carcter -ue no esta en lista
Is 1sado para comparar dos !ariables de re#erencia a ob(etos


#gicos

And LVM lgico
=r L=M lgico
Jor L=M ,8clusi!o
;ot ;egacin

Parte C: ,structuras de 2ontrol


,structuras de 2ontrol
'as estructuras de control le permiten controlar el Du(o de e(ecucin del programa&
9enemos dos tipos de estructuras de control:

,structuras de decisin
,structuras de bucle


Estructuras de Decisin
'os procedimientos de Visual Basic pueden probar condiciones )* dependiendo de los
resultados* reali0ar di#erentes operaciones& ,ntre las estructuras de decisin -ue acepta
Visual Basic se inclu)en las siguientes:

I*...-+en
I*...-+en...Else
5elect Case

/'...*hen
1se la estructura /'...*hen para e(ecutar una o ms instrucciones basadas en una
condicin& Puede utili0ar la sinta8is de una l.nea o un blo-ue de !arias l.neas:

I+ condicin T$en 5entencias
I+ condicin T$en
5entencias
"nd I+

Condicin normalmente es una comparacin* pero puede ser cual-uier e8presin -ue d
como resultado un !alor numrico& Visual Basic interpreta este !alor como *rue o %alse7
un !alor numrico cero es %alse ) se considera *rue cual-uier !alor numrico distinto de
cero& +i condicin es *rue, Visual Basic e(ecuta todas las sentencias -ue siguen a la
palabra cla!e *hen. Puede utili0ar sinta8is de una l.nea o de !arias l.neas para e(ecutar
una sentencia basada en una condicin* los siguientes dos e(emplos son e-ui!alentes:
*+ cualuierFec/a V !oE T/en CualuierFec/a = !oE


*+ cualuierFec/a V !oE T/en
CualuierFec/a = !oE
End *+

=bser!e -ue el #ormato de una /nica l.nea de /'...*hen no utili0a la instruccin (nd /'. +i
se desea e(ecutar ms de una l.nea de cdigo cuando condicin sea *rue, debe utili0ar la
sinta8is de blo-ue de !arias l.neas /'...*hen...(nd /'.

*+ cualuierFec/a V !oE T/en
CualuierFec/a = !oE
TimerC.Enabled = False H Desactiva el control Timer.
End *+

*+ c/&2lumno-!*.Ialue=C T/en
txtCosto = Format 'txtCostoK..S.64Fixed4(
txtC:digo.Enabled = True
End *+

/'...*hen...(lse
1tilice un blo-ue /'...*he...(lse para denir !arios blo-ues de sentencias* uno de los
cuales se e(ecutar:
I+ condicin& T$en
G$lo0ue de sentencias &H
,"lseI+ condicin( T$en
G$lo0ue de sentencias (HH ...
,"lse
G$lo0ue de sentencias nHH
"nd I+
Visual Basic e!al/a primero condici$n6. +i es %alse* Visual Basic procede a e!aluar
condici$nG ) as. sucesi!amente* 5asta -ue encuentre una condicin *rue. 2uando
encuentra una condicin *rue, Visual Basic e(ecuta el blo-ue de instrucciones
correspondientes ) despus e(ecuta el cdigo -ue sigue a (nd /'. =pcionalmente* puede
incluir un blo-ue de instrucciones (lse, -ue Visual Basic e(ecutar sin ninguna de las
condiciones es *rue.
/'...*hen...(lse/' es un caso especial de /'...*hen...(lse. =bser!e -ue puede tener
cual-uier n/mero de clusula (lse/' o ninguna& Puede incluir una clusula (lse sin tener
en cuenta si tiene o no clusula (lse/'.
Por e(emplo* la aplicacin podr.a reali0ar distintas acciones dependiendo del control en -ue
se 5a)a 5ec5o clic de una matri0 de controles de men/:
"rivate Sub mnuCut%Clic& '*ndex 2s *nteger(
*+ *ndex = . T/en H Comando Cortar
Cop72ctiveControl H ,lama a procedimientos generales
Clear2ctiveControl
Else*+ *ndex = C T/en H Comando Copiar
Cop72ctiveControl
Else*+ *ndex = ? T/en H Comando Borrar
Clear2ctiveControl
Else H Comando "egar
"aste2ctiveControl
End *+
End Sub
*+ Clave-suario=4DS*4 T/en
H "ermite al usuario entrar al sistema
...
...
Else
H )ostrar un mensa9e advirtiendo error en la clave
...
...
End *+


"rivate Sub DeterminaCondici:n ' (
*+ Ial 'txt"romedio( U=CM T/en
txtCondici:n = 12probado4
Else*+ Ial 'txt"romedio( U= C. T/en
txtCondici:n = 12sistente4
Else
txtCondici:n = 1Desaprobado4
End *+
End Sub

=bser!e -ue siempre puede agregar ms clusulas (lse/' a la estructura /'...*hen. +in
embargo* esta sinta8is puede resultar tediosa de escribir cuando cada (lse/' compara la
misma e8presin con un !alor distinto& Para estas situaciones* puede utili0ar la estructura
de decisin !elect Case.

!elect Case
Visual Basic proporciona la estructura !elect Case como alternati!a a /'...*hen...(lse
para e(ecutar selecti!amente un blo-ue de sentencias entre !arios blo-ues& 'a sentencia
!elect Case o#rece posibilidades similares a la instruccin /'...*hen...(lse, pero 5ace -ue
el cdigo sea ms legible cuando 5a) !arias opciones&
'a estructura !elect Case #unciona con una /nica e8presin de prueba -ue se e!al/a una
!e0 solamente* al principio de la estructura& Visual Basic compara el resultado de esta
e8presin con los !alores de cada Case de la estructura& +i 5a) una coincidencia* e(ecuta el
blo-ue de sentencias asociado a ese Case?
#elec Case expresinCprue$a
,Case listaCexpresiones&
G$lo0ue de sentencias &HH
,Case listaCexpresiones(
G$lo0ue de sentencias (HH
.
.
.
,Case "lse
G$lo0ue de sentencias nHH
"nd #elect

2ada lista_expresiones es una lista de uno a ms !alores& +i 5a) ms de un !alor en una
lista* se separan los !alores con comas& 2ada blo-.e de sentencias contiene cero o ms
instrucciones& +i ms de un Case coincide con la e8presin de prueba* slo se e(ecutar el
blo-ue de instrucciones asociado con la primera coincidencia& Visual Basic e(ecuta las
instrucciones de la clusula 3opcional4 Case (lse si ning/n !alor de la lista de e8presiones
coincide con la e8presin de prueba&

Por e(emplo* suponga -ue agrega otro comando al men/ (dici$n en el e(emplo
/'...*hen...(lse. Podr.a agregar otra clusula (lse/' o podr.a escribir la #uncin con !elect
Case?
"rivate Sub mnuCut%Clic& '*ndex 2s *nteger(
Select Case *ndex
Case . H Comando Cortar
Cop72ctiveControl H ,lama a procedimientos generales
Clear2ctiveControl
Case C H Comando copiar.
Cop72ctiveControl
Case ? H Comando borrar.
Clear2ctiveControl
Case M H Comando "egar.
"aste2ctiveControl
Case Else
+rmFind.S/oE H )uestra el cuadro de
H di5logo Buscar.
End Select
End Sub

Select Case Tipo-suario
Case 1Supervisor4
H "roporciona al usuario privilegios de Supervisor
...
...
Case 1-suario4
H "roporciona al usuario privilegios de -suario
...
...
Case Else
H "roporciona al usuario privilegio de invitado
...
...
End Select


=bser!e -ue la estructura !elect Case e!al/a una e8presin cada !e0 -ue al principio de
la estructura& Por el contrario* la estructura /'...*hen...(lse puede e!aluar una e8presin
di#erente en cada sentencia (lse/'. +lo puede sustituir una esructura /'...*hen...(lse con
una estructura !elect Case si la intruccin /' ) cada instruccin (lse/' e!al/a la misma
e8presin&

7tros (jemplos
*+ Ientas U C..... T/en
strDscto = Format '..C.6 1Fixed4(
Else*+ Ientas U O.... T/en
strDscto = Format '...O6 1Fixed4(
Else
strDscto = Format '...?6 1Fixed4(
End *+


Select Case Cantidad
Case C
sngDscto = ...
Case ?6 M
sngDscto = ...O
Case N To Q
sngDscto = ..C.
Case Else
sngDscto = ..?.
End Select



int;pta = )sgBox '13uarda cambios antes de salir4 6 vb>es!o(
Select Case int;pta
Case vb>es
3uardarCambios
-nload )e
Case vb!o
-nload )e
End Select


Estrucuras de 3epeticion
'as estructuras de repeticin o bucle le permiten e(ecutar una o ms l.neas de cdigo
repetidamente& 'as estructuras de repeticin -ue acepta Visual Basic son:
Do&&&'oop
:or&&&;e8t
:or ,ac5&&&;e8t

5o...#oop
1tilice el bucle 5o para e(ecutar un blo-ue de sentencias un n/mero indenido de !eces&
@a) algunas !ariantes en la sentencia 5o...#oop, pero cada una e!al/a una condicin
numrica para determinar si contin/a la e(ecucin& 2omo ocurre con /'...*hen, la
condicin debe ser un !alor o una e8presin -ue d como resultado %alse 3cero4 o *rue
3distinto de cero4&
,n el siguiente e(emplo de 5o...#oop, las sentencias se e(ecutan siempre ) cuando
condicin sea *rue?
Do /$ile condicin
5entencias
&oop
2uando Visual Basic e(ecuta este bucle 5o, primero e!al/a condicin. +i condicin es
%alse 3cero4* se salta todas las sentencias. +i es *rue 3distinto de cero4 Visual Basic
e(ecuta las sentencias* !uel!e a la instruccin 5o >hile ) prueba la condicin de nue!o&
Por tanto* el bucle se puede e(ecutar cual-uier n/mero de !eces* siempre ) cuando
condicin sea distinta de cero o *rue. ;unca se e(ecutan las sentencias si condicin es
%alse inicialmente& Por e(emplo* este procedimiento cuenta las !eces -ue se repite una
cadena destino dentro de otra cadena repitiendo el bucle tantas !eces como se encuentre
la cadena de destino:

Function ContarCadenas 'cadenalarga6 destino(
Dim posici:n6 contador
posici:n = C
Do D/ile *nStr 'posici:n6 cadenalarga6 destino(
posici:n = *nStr 'posici:n6 cadenalarga6 destino(8C
contador = contador 8 C
,oop
ContarCadenas = contador
End Function
+i la cadena destino no est en la otra cadena* /n!tr de!uel!e I ) no se e(ecuta el bucle&
=tra !ariante de la instruccin 5o...#oop e(ecuta las sentencias primero ) prueba la
condicin despus de cada e(ecucin& ,sta !ariacin garanti0a al menos una e(ecucin de
sentencias:
Do
5entencias
&oop /$ile condicin
@a) otras dos !ariantes anlogas a las dos anteriores* e8cepto en -ue repiten el bucle
siempre ) cuando condicin sea %alse en !e0 de *rue.
Hace el bucle cero o m@s veces Hace el bucle al menos una veB
Do Until condicin Do
5entencias 5entencias
&oop &oop Until condicin


%or...&et
'os bucles 5o #uncionan bien cuando no se sabe cuntas !eces se necesitar e(ecutar las
sentencias del bucle& +in embargo* cuando se sabe -ue se !a a e(ecutar las sentencias
un n/mero determinado de !eces* es me(or elegir el bucle %or...&et. A di#erencia del
bucle 5o, el bucle %or utili0a una !ariable llamada contador -ue incrementa o reduce su
!alor en cada repeticin del bucle& 'a sinta8is es la siguiente:
For contador I iniciar To 2nalizar G#tep incrementoH
5entencias
Next GcontadorH
'os argumentos contador, iniciar, 8naliBar e incremento son todos numricos&
Nota: El argumento incremento puede ser positi)o o negati)o. 5i incremento es
positi)o' iniciar de$e ser menor o igual 0ue 0nali1ar o no se e,ecutar1n las sentencias del
$ucle. 5i incremento es negati)o' iniciar de$e ser mayor o igual 0ue 0nali1ar para 0ue
se e,ecute el cuerpo del $ucle. 5i no se esta$lece #tep, el )alor predeterminado de
incremento es &. Al e(ecutar el bucle %or, Visual Basic:

1& 1& ,stablece contador al mismo !alor -ue iniciar.
A& A& 2omprueba si contador es ma)or -ue 0nali1ar. +i lo es* Visual Basic sale del
bucle& 3+i incremento es negati!o* Visual Basic comprueba si contador es menor -ue
0nali1ar.4
B& B& ,(ecuta las sentencias.
C& C& Incrementa contador en 1 o en incremento, si se especic&
F& F& ?epite los pasos A a C&
,ste cdigo imprime los nombres de todas las #uentes de pantalla disponibles:
"rivate Sub Form@Clic& ' (
Dim * 2s *nteger
For i = . To Screen.FontCount
"rint Screen.Fonts 'i(
!ext
End Sub

%or (ach...&et
,l bucle %or (ach...&et es similar al bucle %or...&et, pero repite un grupo de sentencia
por cada elemento de una coleccin de ob(etos o de una matri0 en !e0 de repetir las
sentencias un n/mero especicado de !eces& ,sto resulta especialmente /til si no se sabe
cuntos elementos 5a) en la coleccin& @e a-u. la sinta8is del bucle %or (ach...&et?
For "ac$ elemento In grupo
5entencias
Next elemento
Por e(emplo* el siguiente procedimiento !ub abre la base de datos Biblio&mdb ) agrega el
nombre de cada tabla a un cuadro de lista&

Sub ,istTableDe+s ' (
Dim ob9Db 2s Database
Set ob9Db = #penDatabase'"cAG2rc/ivos de programaGDevstudioG" W %
"vbGbiblio.mdb"6 True6 False(
For Eac/ TableDe+ *n ob9Db.TableDe+s ' (
,istC.2dd*tem TableDe+.!ame
!ext TableDe+
End Sub
9enga en cuenta las restricciones siguientes cuando utilice %or (ach...&et?
Para las colecciones* elemento slo puede ser una !ariable Variant, una !ariable
7bject genrica o un ob(eto mostrado en el ,8aminador de ob(etos&
Para las matrices* elemento slo puede ser una !ariable Variant.
;o puede utili0ar %or (ach...&et con una matri0 de tipos denidos por el usuario
por-ue un Variant no puede contener un tipo denido por el usuario&
,l siguiente e(emplo 5abilita todos los C.adro de Texto del #ormulario?

"rivate Sub )odoEdici:n ' (
Dim control
For Eac/ control *n +ormC.Controls
*+ T7pe#+ control *s TextBox T/en
Control.Enabled = True
End *+
!ext control
End Sub

5alida de una Estructura de Control
'a instruccin (it le permite salir directamente de un bucle %or o de un bucle 5o. 'a
sinta8is de la sentencia (it es sencilla: (it %or puede aparecer tantas !eces como sea
necesario dentro de un bucle %or ) (it 5o puede aparecer tantas !eces como sea
necesario dentro de un bucle 5o?
For contador I iniciar To 2nalizar G#tep incrementoH
G$lo0ue sentenciasH
G"xit ForH
G$lo0ue sentenciasH
Next GcontadorH

Do GJ/$ile K UntilL condicinH
G$lo0ue de sentenciasH
G"xit DoH
G$lo0ue de sentenciasH
&oop

Do
G$lo0ue de sentenciasH
G"xit DoH
G$lo0ue de sentenciasH
&oop GJ/$ile K UntilL condicinH
(it %or ) (it 5o son mu) /tiles )a -ue* algunas !eces* resulta apropiado salir
inmediatamente de un bucle sin reali0ar ms iteraciones o sentencias dentro del bucle&
2uando utilice la instruccin (it para salir de un bucle* el !alor de la !ariable contador
diere* dependiendo de cmo 5a)a salido del bucle:

2uando termina un bucle* la !ariable contador contiene el !alor del l.mite superior
ms el paso&
2uando sale de un bucle prematuramente* la !ariable contador conser!a su !alor
seg/n las reglas usuales del alcance&
2uando sale antes del nal de una coleccin* la !ariable contador contiene
&othing si se trata de un tipo de dato 7bject ) (mpty si es un tipo de dato Variant.
Parte F: 2ontroles ,stndar Adicionales
) Procedimientos

2ontrol "arco 3:rame4
,ste control permite agrupar otros controles para darle ma)or #uncionalidad a la inter#a0&
'os controles Botones de 7pci$n necesariamente tienen -ue estar agrupados por el
control Marco. Para agrupar controles* dibu(e primero el control "arco )* a continuacin*
dibu(e los controles dentro de "arco&

Propiedades
2aption 9.tulo de marco&
,nabled Determina si est 5abilitado para responder a las acciones del
usuario&
;ame ;ombre del control&
Visible Determina si el Marco ) los controles -ue contiene estn !isibles o no&


2ontrol 2asilla de Vericacin 325ecKBo84
'as casillas de !ericacin se utili0an para proporcionar al usuario opciones de tipo +iN;o o
VerdaderoN:also& 2uando el usuario selecciona una opcin 3acti!a la casilla4* aparece una
marca de !ericacin 3a 4 dentro de la casilla&

Propiedades
2aption Descripcin -ue acompa6a a la casilla&
,nabled 9rueN:alse& Determina si est 5abilitado para responder a las acciones
del usuario&
;ame ;ombre del control&
Value I Y 1nc5ecKed 3Vac.o* no marcado4
1 Y 25ecKed 3"arcado4
A Y Era)ed 3Eris* Indenido4
Visible Determina si la casilla est !isible o no&

E)entos
2licK =curre cuando el usuario 5ace clic sobre la casilla&


2ontrol Botn de =pcin 3=ptionButton4
,stos controles se utili0an para -ue el usuario seleccione una opcin de un grupo opciones&
'a opcin seleccionada tiene un punto en el centro&

Propiedades
2aption Descripcin -ue acompa6a a la opcin&
,nabled 9rueN:alse& Determina si est 5abilitado para responder a las acciones
del usuario&
;ame ;ombre del control&
Value 9rueN:alse* marcado o no marcado&
Visible 9rueN:alse& Determina si el botn est !isible o no&

E)entos
2licK =curre cuando el usuario 5ace clic sobre el botn&




Arreglo de 2ontroles
2uando creamos un arreglo de controles* todos los controles -ue #orman el arreglo deben
tener el mismo nombre 3Propiedad ;ame4* la propiedad /nde establece el .ndice de cada
control en el arreglo* esta propiedad comien0a desde I&
1n arreglo de controles es un grupo de controles -ue comparten el mismo:

9ipo de ob(eto
;ombre del control
Procedimientos de e!ento

Cdigo m1s *1cil de escri$ir y mantener
'os arreglos de controles 5ace -ue el cdigo sea ms #cil de escribir ) mantener debido a
-ue solo escribe un solo procedimiento de e!ento para todos los controles pertenecientes
al arreglo* el parmetro /nde del procedimiento de e!ento determina desde -ue control
ocurri el e!ento&

Cdigo m1s e2ciente
'os arreglos de controles 5acen -ue el cdigo sea ms eciente ) me(oran el rendimiento
de la aplicacin debido a -ue usa menos recursos del sistema -ue los controles
indi!iduales&

MCmo se crea un arreglo de controlesN
'uego de crear ) establecer el nombre del primer control* tiene dos alternati!as:

Mtodo 6
1& 1& 2opiar el primer control al portapapeles&
A& A& 'uego pegar el control de portapapeles en el #ormulario& Visual Basic le
preguntar si desea crear un arreglo de controles&
B& B& ?epita el paso A 5asta completar el arreglo&

Mtodo G
1& 1& Dibu(e el siguiente control ) estable0ca su nombre igual al del primer
control& Visual Basic le preguntar si desea crear un arreglo de controles&
A& A& ?epita el paso 1 5asta completar el arreglo&


(jemplo
'a inter#a0 mostrada tiene un arreglo de controles para seleccionar el reporte* el
procedimiento de e!ento es el mismo para cual-uier elemento del arreglo&

,l cdigo para el e!ento clic es:

"rivate Sub opt;eporte%Clic&'*ndex 2s *nteger(
Select Case *ndex
Case .6 C
+ra;ango.Enabled = False
lblDesde.Enabled = False
lblHasta.Enabled = False
txtDesde.Enabled = False
txtHasta.Enabled = False
Case ?
+ra;ango.Enabled = True
lblDesde.Enabled = True
lblHasta.Enabled = True
txtDesde.Enabled = True
txtHasta.Enabled = True
txtDesde.SetFocus
End Select
End Sub



2ontrol Barra de Despla0amiento
=pt?eporte314
=pt?eporte3I4
=pt?eporte3A4
Barra de Despla0amiento @ori0ontal 3@+crollBar4
Barra de Despla0amiento Vertical 3V+crollBar4

+on usuados con #recuencia para permitir rpidos despla0amientos a tra!s de una lista
grande de items& Por e(emplo: arc5i!os* indicadores de posicin actual de una escala de
!alores* indicadores de !olumen en un sistema de audio&

Propiedades
'arge25ange De 1 a BAHGH& 2antidad de cambio cuando el usuario 5ace clic en el
despla0amiento largo&
"a8 "8imo !alor de despla0amiento cuando el botn se encuentra en la posicin
ms alta& Valor predeterminado: BAHGH&
"in ".nimo !alor del despla0amiento cuando el botn se encuentra en la posicin
ms ba(a& Valor predeterminado: I&
;ame ;ombre ddel control&
+mall25ange De 1 a BAHGH& 2antidad de cambio cuando el usuario 5ace clic en la Dec5a de
despla0amiento&
Value Valor actual en la escala de !alores&

E)ento
25ange =curre cuando el usuario se despla0a o se cambia el !alor de la propiedad
Value&


2ontrol 2uadro de 'ista 3'istBo84
1n control &ist2ox muestra una lista de elementos entre los cuales el usuario puede
seleccionar uno o ms elementos& +i el n/mero de elementos supera el n/mero -ue puede
mostrarse* se agregar automticamente una barra de despla0amiento al control &ist2ox.
'a propiedad &ist es un arreglo -ue contiene los elementos de la lista* ) comien0a con
.ndice I& 'a propiedad &istCo.nt establece el n/mero total de elementos de la lista& 'a
propiedad &istIndex contiene el .ndice del elemento seleccionado* el cual es un n/mero
entre I 3primer elemento4 ) el n/mero total de elementos en la lista Y1 3&istCo.nt 3 '4& +i
no se selecciona ning/n elemento* el !alor de la propiedad &istIndex ser Y1&
'a propiedad Ne%Index contiene el .ndice del /ltimo elemento a6adido a la lista& ,sto
puede ser /til si desea 5acer algo con el elemento a6adido* por e(emplo* -ue sea el
elemento actualmente seleccionado&


Propiedades
,nabled 9rueN:alse& Determina si el control responde a las acciones del
usuario&
'ist Arreglo con los elementos de la lista&
'ist2ount ;/mero de elementos de la lista&
'istInde8 ,lemento seleccionado&
"ulti+elect ,stablece si es posible seleccionar !arios elementos o uno solo&
;ame ;ombre del control&
lstEaseosas
t8tEaseosa
cmdAgregar
cmd,liminar
;e%Inde8 Indice del /ltimo elemento a6adido al 2uadro de 'ista&
+elected Arreglo de !alores lgicos paralelo ) del mismo tama6o al arreglo list* indica
-ue elementos 5an sido seleccionados 39rue4 de la lista& +e utili0a en lugar de
#ist/nde cuando establecemos la propiedad Multiselect en 1 A&
+orted 9rueN:alse& ,stablece los elementos se ordenan al#abticamente&
+t)le ,stablece el comportamiento del control&
9e8t De!uel!e el elemento seleccionado en el cuadro de lista7 el !alor de retorno
es siempre e-ui!alente al -ue de!uel!e la e8presin 'ist3'istInde84& ,s de
slo lectura en tiempo de dise6o ) es de slo lectura en tiempo de e(ecucin&

M%todos
AddItem Permite a6adir nue!os elementos a la lista&
?emo!eItem Permite eliminar elementos de la lista&

E)entos
2licK =curre cuando el usuario interact/a con el control&


E,emplos
Muestra en el Cuadro de *eto tt,aseosa el elemento seleccionado
"rivate Sub lst3aseosas%Clic&'(
txt3aseosa.Text = lst3aseosas.Text
End Sub
4-ade un nuevo elemento al Cuadro de #ista lst,aseosas

"rivate Sub cmd2gregar%Clic&'(
Dim str!uevoElemento 2s String
str!uevoElemento = *nputBox'"*ngrese una nueva gaseosaA"6 %
"!ueva gaseosa"(
*+ Trim'str!uevoElemento( VU "" T/en
lst3aseosas.2dd*tem str!uevoElemento
End *+
End Sub


(limina el elemento actual del Cuadro de #ista lst,aseosas

"rivate Sub cmdEliminar%Clic&'(
*+ lst3aseosas.,ist*ndex VU @C T/en
lst3aseosas.;emove*tem lst3aseosas.,ist*ndex
End *+
End Sub


2ontrol 2uadro 2ombinado 32omboBo84
1n control ComboBo combina las caracter.sticas de un control *etBo ) un control
#istBo) los usuarios pueden introducir in#ormacin en la parte del cuadro de te8to o
seleccionar un elemento en la parte de cuadro de lista del control&
Para agregar o eliminar elementos en un control ComboBo, se usa el mtodo 4dd/tem o
Aemove/tem. ,stable0ca las propiedades #ist, #istCount ) #ist/nde para permitir a un
usuario tener acceso a los elementos de un control ComboBo. 2omo alternati!a* puede
agregar elementos a la lista mediante la propiedad #ist en tiempo de dise6o&


Propiedades
,nabled 9rueN:alse& Determina si el control responde a las acciones del usuario&
'ist Arreglo con los elementos de la lista&
'ist2ount ;/mero de elementos de la lista
'istInde8 ,lemento seleccionado&
;ame ;ombre del control&
;e%Inde8 Indice del /ltimo elemento a6adido al cuadro de lista&
+orted 9rueN:alse& ,stablece si los elementos se ordenan al#abticamente&
+t)le ,stablece el comportamiento del control&
9e8t 9e8to -ue contiene el control&

M%todos
AddItem Permite a6adir nue!os elementos a la lista&
?emo!eItem Permite eliminar elementos de la lista&

E)entos
2licK =curre cuando el usuario interact/a con la lista del control&
25ange =curre cuando el !alor de la propiedad *et es modicado&

Propiedad 5tyle
,sta propiedad establece el comportamiento del control ComboBo, ) puede tomar los
siguientes !alores:
Constante Valor 5escripci$n
!b2omboDropDo%n I 3Predeterminado4 2uadro combinado desplegable& Inclu)e una
lista desplegable ) un cuadro de te8to&,l 1suario puede
seleccionar datos en la lista o escribir en cuadro de te8to&
!b2ombo+imple 1 2uadro combinado simple& Inclu)e un cuadro de te8to ) una
lista* -ue no se despliega& ,l usuario puede seleccionar datos
en la lista o escribir en el cuadro de te8to& ,l tama6o de un
cuadro combinado simple inclu)e las partes de edicin ) de
lista& De #orma predeterminada* el tama6o de un cuadro
combinado simple no muestra ning/n elemento de la lista&
Incremente la propiedad Height para mostrar ms elementos
de la lista&
!b2omboDrop>Do%n'ist A 'ista desplegable& ,ste estilo slo permite la seleccin desde la
lista desplegable&

E,emplo
,n la siguiente inter#a0 se ilustra el uso del control ComboBo ) la propiedad !tyle.


Muestra la gaseosa seleccionada por el usuario en la eti2ueta
lbl,aseosa

"rivate Sub cbo3aseosas%Clic&'(
lbl3aseosa.Caption = cbo3aseosas.Text
End Sub

cboEaseosas
+t)leZI
cbo,ncuestad
os
+t)leZ1
cbo2iudades
+t)leZA
lblEaseosa
lbl,ncuestado
lbl2iudad
4ctualiBa la eti2ueta lbl,aseosa cuando el usuario modi8ca el control
cbo,aseosas

"rivate Sub cbo3aseosas%C/ange'(
lbl3aseosa.Caption = cbo3aseosas.Text
End Sub

Muestra el encuestado seleccionado por el usuario en la eti2ueta lbl(ncuestado

"rivate Sub cboEncuestados%Clic&'(
lblEncuestado.Caption = cboEncuestados.Text
End Sub

Muestra en la eti2ueta lblCiudad el elemento seleccionado del control
cboCiudades

"rivate Sub cboCiudades%Clic&'(
lblCiudad.Caption = cboCiudades.Text
End Sub



Procedimientos
,8isten dos tipos de procedimientos con los -ue se traba(a en Visual Basic: los
procedimientos de e!ento ) los procedimientos generales&

Procedimientos de ,!ento
Visual Basic in!oca automticamente procedimientos de e!ento en
respuesta a acciones del teclado* del ratn o del sistema& Por e(emplo* los
botones de comando tienen un procedimiento de e!ento 2licK& ,l cdigo
-ue se escriba en el procedimiento de e!ento 2licK es e(ecutado cuando el
usuario 5aga clic en un botn de comando&
2ada control tiene un con(unto (o de procedimientos de e!ento& 'os
procedimientos de e!ento para cada control son mostrados en un cuadro de
lista despegable en la !entana de cdigo&

Procedimientos Eenerales
'os procedimientos generales son procedimientos !ub o %unction -ue son creados para
-ue lle!en a cabo tareas espec.cas* estos deben ser in!ocados de manera e8pl.cita&
Para crear un procedimiento general* se debe abrir la !entana de cdigo ) 5acer clic en la
orden 4gregar procedimiento del men/ Herramientas& 9ambin se puede crear un
nue!o procedimiento escribiendo el encabe0ado de procedimiento !ub* seguido por el
nombre del procedimiento* en una l.nea en blanco dentro de la !entana de cdigo&
+i se tiene cdigo duplicado en !arios procedimientos de e!ento* se puede colocar el
cdigo en un procedimiento general ) luego in!ocar al procedimiento general desde los
procedimiento de e!ento&

Procedimientos 5u$
'os procedimientos !ub no retornan !alores& Por e(emplo:

"ublic Sub Seleccionar'Cuadro 2s TextBox(
Cuadro.SelStart = .
Cuadro.Sel,engt/ = ,en'Cuadro.Text(
End Sub

'os procedimientos !ub son in!ocados especicando slo el nombre del procedimiento* o
empleando la instruccin Call con el nombre del procedimiento& Por e(emplo:

Call Seleccionar'TextC(

+i se emplea la instruccin Call* se debe encerrar la lista de argumentos entre parntesis&
+i se omite Call* tambin se deben omitir los parntesis alrededor de la lista de
argumentos&

Procedimientos Function
'os procedimientos %unction de!uel!en !alores& ,n el siguiente e(emplo* el procedimiento
%unction recibe un n/mero ) de!uel!e ese n/mero al cuadrado&

"ublic Function Cuadrado'! 2s *nteger( 2s *nteger
Cuadrado = ! K !
End Function

+i se desea guardar el !alor de!uelto* se debe usar parntesis cuando se in!o-ue a la
#uncin* como se muestra a continuacin:

;esultado = Cuadrado 'O(

+i se omiten los parntesis* se puede ignorar el !alor de!uelto ) no guardarlo en una
!ariable& ,sto puede ser /til si se -uiere e(ecutar una #uncin ) no se desea el !alor
de!uelto& Por e(emplo:

Cuadrado O


Alcance del 2digo
Adems de poder declarar cdigo en un mdulo de #ormulario* tambin se puede declarar
procedimientos en un mdulo de cdigo estndar&
'os mdulos de cdigo estndar slo contienen cdigo de Visual Basic* ) son un buen lugar
para almacenar cdigo -ue no es espec.co para un solo #ormulario& 'os procedimientos
pueden ser declarados como .rivate 3pri!ados4 o .ublic 3p/blicos4&

'os procedimientos declarados como .rivate pueden ser llamados o in!ocados slo por
otros procedimientos locali0ados en ese #ormulario* mdulo o clase&

'os procedimientos declarados como .ublic en un #ormulario se con!ierten en mtodos del
#ormulario& ,l procedimiento puede ser llamado desde cual-uier lugar de la aplicacin
especicando los nombres del #ormulario ) del procedimiento&

'os procedimientos declarados como .ublic en un mdulo estn disponibles para toda la
aplicacin* ) pueden ser llamados especicando el nombre del procedimiento&
,l siguiente cdigo declara un procedimiento .ublic&

"ublic Sub )i"roc'(

End Sub

+i se declara el procedimiento en un mdulo de #ormulario* puede ser llamado con el
siguiente cdigo&

FormC.)i"roc

+i se declara el procedimiento en un mdulo estndar* puede ser llamado con el siguiente
cdigo&

)i"roc

+i se declara un procedimiento con el mismo nombre en dos mdulos estndar* se debe
especicar el nombre del mdulo como se muestra en el siguiente cdigo&

)oduleC.)i"roc


1so del ,8aminador de =b(etos para !er Procedimientos )
'ibrer.as de =b(etos
1na !e0 -ue se 5a a6adido cdigo a una aplicacin se puede emplear el (aminador de
objetos para listar a todos los procedimientos -ue 5an sido creados* pasar rpidamente a
un procedimiento espec.co* o pegar una llamada a un procedimiento dentro de una
!entana de cdigo&
,l (aminador de objetos !isuali0a las clases -ue estn disponibles desde cual-uier
librer.a de ob(etos a la -ue se 5a establecido una re#erencia& Para !isuali0ar el (aminador
de objetos presione la tecla de #uncin %G&

Parte G: Depuracin* Validacin de Datos
) "anipulacin de ,rrores


2uando desarrolle aplicaciones en Visual Basic* es importante depurar el cdigo escrito )
manipular los probables errores -ue puedan ocurrir& 9ambin es importante pre!enir en lo
posible estos errores !alidando los ingresos de datos a la aplicacin&

@erramientas de Depuracin
Visual Basic proporciona 5erramientas interacti!as para locali0ar errores en tiempo de
e(ecucin ) errores en la lgica del programa& +e puede acceder a todas las 5erramientas
de depuracin empleando el men/ 5epuraci$n o la barra de 5erramientas 5epuraci$n&
'as 5erramientas de depuracin en Visual Basic inclu)en:

Puntos de interrupcin y expresiones de interrupcin
,stablece un punto de interrupcin para detener un programa en e(ecucin& +e puede
establecer un punto de interrupcin en tiempo de dise6o o en tiempo de e(ecucin
mientras se est en modo de interrupcin&

Expresiones de inspeccin
,mplee las e8presiones de inspeccin para e8aminar una !ariable o e8presin en particular&
,l !alor de cada e8presin de inspeccin es actuali0ado en los puntos de interrupcin

.pciones paso a paso
1se las opciones paso a paso para e(ecutar porciones de cdigo )a sea una instruccin o
procedimiento a la !e0&

Pila de llamadas
,mplee Pila de llamadas para !isuali0ar todas las llamadas a procedimientos acti!as )
rastrear la e(ecucin de una serie de procedimientos anidados&

#a )entana inmediato
,n modo de interrupcin* se puede probar una sentencia e(ecutable escribindola en la
!entana inmediato& Visual Basic e(ecuta la sentencia inmediatamente de modo -ue se
pueda e!aluar el cdigo&

#a )entana locales
,sta !entana automticamente !isuali0a todas las !ariables declaradas en el
procedimiento actual* (unto con sus !alores&

Validacin de Datos
+e puede pre!enir algunos errores en el ingreso de datos ) me(orar el uso de una
aplicacin !alidando in#ormacin mientras es ingresada a los campos de la aplicacin&

3estriccin de .pciones con Controles
1na manera de asegurar ingresos !lidos es restringiendo el n/mero de opciones -ue un
usuario puede escoger& Por e(emplo* se puede emplear un cuadro de lista para permitir a
los usuarios seleccionar un nombre de un producto en un #ormulario& Debido a -ue los
usuarios deben escoger un producto de una lista predenida* no podrn ingresar un
nombre de producto no !lido&
9ambin se pueden usar botones de opcin para un n/mero pe-ue6o de opciones* o
casillas de !ericacin para opciones de tipo booleanas&

;so de la propiedad Max#engt+
'a propiedad Ma#ength determina la longitud m8ima de una cadena en un cuadro de
te8to& ,l sistema emitir un sonido 3beep4 cuando el usuario trate de escribir una cadena
-ue e8ceda la longitud m8ima& +i se desea !isuali0ar un mensa(e de error* se necesita
interceptar la tecla oprimida en el e!ento Oe)Press&

;so de la propiedad #ocOed
'a propiedad #ocked determina si los usuarios pueden modicar los datos en un cuadro de
te8to& +i la propiedad #ocked es establecida a *rue* los usuarios slo pueden !er ) copiar
los datos de un cuadro de te8to&

;so del E)ento PeyPress para Validar Datos
+e pueden emplear los e!entos Oe)Press* Oe)Do%n ) Oe)1p para !alidar datos mientras el
usuario escribe& +e puede pre!enir -ue el usuario ingrese ciertos caracteres 3por e(emplo*
puede limitar el ingreso de datos a !alores numricos4& +e puede tambin modicar los
datos mientras son ingresados 3por e(emplo* puede con!ertir todos los caracteres a
ma)/sculas4&
,l e!ento Oe)Press tiene lugar cuando el usuario ingresa un carcter A+2II estndar& ,sto
no inclu)e la ma)or.a de la teclas especiales* tales como las teclas de #uncin* las teclas
direccionales* o la tecla D,',9,& Para responder a estas teclas se debe emplear los e!entos
Oe)Do%n ) Oe)1p& ,l siguiente cdigo cambia los caracteres a ma)/sculas mientras el
usuario escribe&

"rivate Sub TextC%$e7"ress'$e72scii as *nteger(
$e72scii = 2sc'-case'C/r'$e72scii(((
End Sub

,l siguiente cdigo pre!iene -ue los usuarios ingresen slo !alores numricos en un cuadro
de te8to&

"rivate Sub TextC%$e7"ress'$e72scii 2s *nteger(
*+ $e72scii VU R T/en ' "ermite el uso de la tecla B2C$S"2CE
*+ $e72scii V NR #r $e72scii U OS T/en
$e72scii = . ' Esteblece el caracter a nulo si est5 %
+uera del rango
End *+
End *+
End Sub
Para !isuali0ar una lista de los !alores A+2II* bus-ue 4!C// en la a)uda de Visual Basic&


Validacin de In#ormacin a ;i!el de :ormulario
Adems de emplear tcnicas a ni!el de campo para !alidar los datos mientras son
ingresados* se puede escribir cdigo -ue !alide los datos en todos los campos de un
#ormulario al mismo tiempo& ,n esta parte del curso se !ern las tcnicas de !alidacin a
ni!el de #ormulario soportadas por Visual Basic&

Ha$ilitando el Botn !ceptar
1na #orma de !alidar la in#ormacin del #ormulario ser.a la de asegurar -ue un usuario 5a
ingresado los datos en todos los campos en un #ormulario antes de -ue se le permita
continuar& ,sto puede lle!arse a cabo des5abilitando el botn Aceptar en un #ormulario
5asta -ue el usuario 5a)a llenado todos los campos* como se muestra a continuacin&

Para comprobar cada tecla oprimida en un #ormulario* se debe establecer la propiedad
Hey.revie" de un #ormulario a *rue& ,l #ormulario recibe primero el e!ento del teclado )
luego lo recibe el control&

,l siguiente cdigo 5abilita el botn Aceptar luego de ingresar datos en todos los campos&

"rivate Sub Form%,oad'(
)e.$e7"revieE = True
cmd2ceptar.Enabled = False
End Sub

"rivate Sub Form%$e7-p'$e7Code 2s *nteger6 S/i+t 2s *nteger(
' Se /abilita el bot:n 2ceptar s:lo si todos los cuadros de texto %
tienen datos
Dim Control2ct 2s Control
For Eac/ Control2ct *n Controls
*+ T7pe#+ Control2ct *s TextBox T/en
*+ Control2ct.Text = "" T/en ' El cuadro de texto est5 vacLo
cmd2ceptar.Enabled = False
Exit Sub
End *+
' Se podrLan veri+icar otro tipo de controles si %
+uera necesario
End *+
!ext
cmd2ceptar.Enabled = True 'Todos los cuadros de texto tienen datos
End Sub
Validacin de -odos los Campos de un Formulario
1na manera sencilla de !alidar todos los campos de un #ormulario al mismo tiempo es
poniendo el cdigo de !alidacin en el e!ento 2licK del botn 4ceptar& ,n esta caso* la
aplicacin le permite al usuario completar el ingreso de datos en todos los campos del
#ormulario ) luego !alidarlos& 'a aplicacin establece el en#o-ue en el primer campo -ue
contiene los datos incorrectos&
,l siguiente cdigo !alida todos los campos numricos del #ormulario mostrado
anteriormente&

"rivate Sub cmd2ceptar%Clic&'(
*+ !ot '*s!umeric'txtEdad.Text(( T/en
)sgBox "*ngrese la edad correctamente"
txtEdad.SetFocus
Else*+ !ot '*s!umeric'txtSueldo.Text(( T/en
)sgBox "*ngrese el sueldo correctamente"
txtSueldo.SetFocus
Else
)sgBox "Datos correctos"
-nload )e
End *+
End Sub


;so del E)ento /uery;nload
,l e!ento Quer)1nload tiene lugar (usto antes del e!ento 1nload cuando el #ormulario es
descargado& ,l e!ento Quer)1nload permite determinar como #ue iniciado el e!ento 1nload
) cancelar este e!ento& ,s /til cuando un usuario no 5a completado el ingreso de datos a
un #ormulario* o cuando se -uisiera preguntar al usuario si desea grabar cambios reali0ados
antes cerrar el #ormulario&
,l e!ento Quer)1nload tiene los siguientes argumentos:
,l argumento Cancel cancela el e!ento 1nload& +i Cancel se establece a *rue la
aplicacin permanece como estaba antes de -ue se intentara la descarga&
,l argumento 0nloadMode indica como #ue iniciado el e!ento 1nload&
Valores 2ue se pueden obtener
,l argumento 0nloadMode 6modoCdescarga7 de!uel!e los siguientes
!alores:
Constante Valor 5escripci$n
Vb%ormControlMenu I ,l usuario eligi el comando
Cerrar del men/ Control del #ormulario&
Vb%ormCode 1 +e in!oc la instruccin 0nload desde el
cdigo&
Vb4pp>indo"s A 'a sesin actual del entorno operati!o
"icroso#t $indo%s est nali0ando&
Vb4pp*askManager B ,l Administrador de tareas de
"icroso#t $indo%s est cerrando la
aplicacin&
Vb%ormM5/%orm C 1n #ormulario "DI secundario se est cerrando
por-ue el #ormulario "DI tambin se est
cerrando&

,l siguiente cdigo cancela el e!ento 1nload ) pregunta al usuario antes de cerrar el
#ormulario&

"rivate Sub Form%Juer7-nload'Cancel as *nteger6 -nload)ode as *nteger(
Dim i;espuesta *nteger
i;espuesta = )sgBox '"<;ealmente desea salir="6 vb>es!o(
*+ i;espuesta = vb!o T/en
Cancel=True
End *+
End Sub

Notas8
Cuando se cierra un o$,eto !DIForm' el e)ento /uery;nload
ocurre primero para el *ormulario MDI principal y despu%s en todos los
*ormularios secundarios MDI. 5i ning9n *ormulario cancela el e)ento
/uery;nload' ocurre el e)ento ;nload primero en todos los dem1s
*ormularios y despu%s en un *ormulario MDI principal. Cuando un
*ormulario secundario o un o$,eto Form se cierra' el e)ento
/uery;nload de ese *ormulario ocurre antes 0ue el e)ento ;nload del
*ormulario.
Cuando una aplicacin se cierra' puede utilizar los procedimientos
de e)ento /uery;nload o ;nload para esta$lecer la propiedad Cancel
a Tr.e' deteniendo el proceso de cierre. 5in em$argo' el e)ento
/uery;nload ocurre en todos los *ormularios antes de 0ue se
descargue ninguno de ellos y el e)ento ;nload ocurre con*orme se
descarga cada *ormulario.


"anipulacin de ,rrores en 9iempo de ,(ecucin
;o importa lo bien -ue se dise6e una aplicacin* los errores en tiempo de e(ecucin
siempre ocurrirn& 'os usuarios ol!idan poner los discos en las unidades* sistemas se
e(ecutan con poca memoria* ) arc5i!os no se encuentran donde se supone deber.an estar&
A6adiendo cdigo de manipulacin de errores e#ecti!o a una aplicacin* se crean
aplicaciones ms robustas&

Entendiendo el Proceso de Manipulacin de Errores
,l proceso de manipulacin de errores in!olucra los siguientes pasos&

1& 1& @abilitar la interceptacin de errores -ue especica 5acia donde se bi#urcar la
e(ecucin cuando ocurra un error&
A& A& ,scribir el cdigo de manipulacin de errores&
B& B& +alir del cdigo de manipulacin de errores&

'a instruccin 7n (rror ,o*o 5abilita la interceptacin de errores ) especica 5acia donde
saltar la e(ecucin cuando ocurra un error& +i ocurriera un error en tiempo de e(ecucin* la
e(ecucin saltar 5acia la eti-ueta especicada por la instruccin 7n (rror ,o*o& ,l
manipulador de errores e(ecuta el cdigo de manipulacin de errores seguido por una
instruccin Aesume -ue indica donde deber continuar el proceso&
,l siguiente cdigo muestra como emplear las instrucciones 7n (rror ,o*o ) Aesume&

"rivate Sub CommandC%Clic&'(
Dim !ombre2plic 2s String
#n Error 3oTo )anipulaErr
!ombre2plic = *nputBox'"*ngrese el nombre de la aplicaci:nA"(
S/ell !ombre2plic6 vb!ormalFocus
Exit Sub

)anipulaErrA
*+ Err.!umber = OM T/en
)sgBox "!o se encontro la aplicaci:n"
*+ )sgBox'"<Desea intentarlo nuevamente="6 vb>es!o( %
= vb>es T/en
!ombre2plic = *nputBox %
'"*ngrese el nombre de la aplicaci:nA"(
;esume '*ntentar nuevamente
Else
;esume !ext 'E9ecutar la siguiente instrucci:n
End *+
Else
)sgBox "Error desconocido"
End *+
End Sub

,n el cdigo o rutina de manipulacin de errores* se emplean las propiedades ) mtodos
del ob(eto (rr para !ericar -ue error ocurri* borrar un !alor de error o desencadenar un
error&

#as Propiedades del .$,eto Err
'a propiedad &umber es un entero -ue indica el /ltimo error -ue tu!o lugar& Para
determinar -ue error 5a ocurrido* se !erica el !alor de (rr.&umber& ,n algunos casos* se
puede corregir un error ) permitir continuar el proceso sin interrumpir el usuario& ,n otros*
se deber noticar al usuario de un error* ) tomar alguna accin basada en la respuesta del
usuario&

'a propiedad 5escription es una cadena -ue contiene una descripcin del error&

'a propiedad !ource contiene el nombre del ob(eto aplicacin -ue gener el error& ,s /til
cuando se emplea Automati0acin& Por e(emplo* si se traba(a con "icroso#t ,8cel ) genera
un error* "icroso#t ,8cel establecer (rr.&umber al cdigo de error apropiado )
establecer (rr.!ource a (cel.4pplication&

#os M%todos del .$,eto Err
,l mtodo Clear establece el !alor de (rr.&umber a cero& Bsicamente* el mtodo Clear
se emplea borrar e8pl.citamente el ob(eto (rr despus de controlar un error&

,l mtodo Aaise genera un error en tiempo de e(ecucin& Por e(emplo* se podr.a emplear
este mtodo para probar el cdigo de manipulacin de errores&

Err.;aise OM '2rc/ivo no encontrado


.pciones de las Instruccin 3esume
'a instruccin Aesume se emplea para especicar donde continuar el proceso de una
aplicacin luego de manipular un error& 'a siguiente tabla lista los tres tipos de
instrucciones Aesume disponibles en Visual Basic&

/nstrucci$n 5escripci$n
Aesume ?egresa a la instruccin -ue gener el error& ,mplee Aesume para
repetir una operacin luego de corregir el error&
/nstrucci$n 5escripci$n
Aesume &et ?egresa a la instruccin inmediatamente siguiente a la -ue gener el
error&
Aesume l"nea 'a e(ecucin contin/a en la l.nea especicada en el argumento
obligatorio l.nea&

Nota8
5i utiliza una instruccin 4es.me en otro sitio 0ue no sea una rutina de
manipulacin de errores' ocurre un error.


Des5abilitando la "anipulacin de ,rrores
Puede ser di#.cil depurar cdigo -ue tiene 5abilitada la manipulacin de errores& Visual
Basic puede e(ecutar el cdigo de manipulacin de errores cuando se -uiera ingresar al
modo de Interrupcin ) depurar la aplicacin&
Visual Basic proporciona opciones para des5abilitar la manipulacin de errores en el
momento de la depuracin&

Para cambiar como sern manipulados los errores:
1& 1& ,n el men/ Herramientas* 5aga clic en 7pciones&
A& A& ,n la c5a ,eneral* deba(o de /nterceptaci$n de errores* 5aga clic en la opcin
deseada ) luego en 4ceptar&

'a siguiente tabla describe las opciones de manipulacin de errores disponibles deba(o de
/nterceptaci$n de errores en la c5a ,eneral&

7pci$n 5escripci$n
Modo de interrupci$n en todos +i se selecciona esta opcin* Visual Basic ignora
cual-uiera de las instrucciones 7n (rror ,o*o e
ingresa en modo de Interrupcin si tiene lugar alg/n
error en tiempo de e(ecucin&
/nterrupci$n en m$dulos de clase +i se selecciona esta opcin* Visual Basic e(ecutar
las instrucciones 7n (rror ,o*o para manipular
errores en tiempo de e(ecucin&
/nterrupci$n en errores no controlados Visual Basic ingresa a modo de
Interrupcin en cual-uier error para el cual no se
5a)a establecido una rutina de manipulacin&


2ompilacin de una Aplicacin
1na !e0 nali0ada la creacin de una aplicacin* se puede crear el arc5i!o e(ecutable para
los usuarios& ,sta parte del curso describe como compilar un pro)ecto&

Creacin de un !rc+i)o E,ecuta$le
2rear un arc5i!o e(ecutable en Visual Basic es un proceso sencillo&
1& 1& ,n el men/ 4rchivo* 5aga clic en ,enerar I&ombre.royectoJ.ee
A& A& Ingrese el nombre para el arc5i!o e(ecutable&
B& B& Para a6adir in#ormacin espec.ca de !ersin:
,n el cuadro de dilogo ,enerar proyecto* 5aga clic en el botn 7pciones& ,n la c5a
,enerar escriba los n/meros de !ersin ) el te8to de in#ormacin de la !ersin * )
luego 5aga clic en 4ceptar&



Adems del arc5i!o e(ecutable* se debe de proporcionar di!ersas D''ds ) otros arc5i!os
a los usuarios& +e deber.a crear un programa de instalacin -ue instale la aplicacin en
la computadora del usuario&
(l 4sistente para instalar aplicaciones de Visual Basic 5ace sencilla la tarea de
crear discos o una carpeta de distribucin para una aplicacin& 'os usuarios pueden
luego e(ecutar el programa de instalacin en sus computadoras para instalar ) registrar
los arc5i!os apropiados&
Parte H: 2ontroles ,stndar A!an0ados
) Acceso a Datos

2ontrol 2uadro de 'ista de 1nidades 3Dri!e'istBo84
1n control Dri!e'istBo8 permite al usuario seleccionar una unidad de disco !lida en
tiempo de e(ecucin& 1tilice este control para mostrar una lista de todas las unidades
!lidas del sistema de un usuario& Puede crear cuadros de dilogo -ue permitan al
usuario abrir un arc5i!o de una lista de un disco en cual-uier unidad disponible&

Propiedades
Dri!e De!uel!e o establece la unidad seleccionada en tiempo de e(ecucin& ;o
est disponible en tiempo de dise6o&
'ist 2ontiene la lista de cone8iones de unidad e#ecti!as&
'ist2ount De!uel!e el n/mero de cone8iones con unidades de disco&
'istInde8 De!uel!e o establece el .ndice del elemento seleccionado actualmente en el
control& ;o est disponible en tiempo de dise6o&

E)entos
25ange =curre cuando el usuario selecciona una nue!a unidad o cuando se cambia
la conguracin de la propiedad Dri!e mediante cdigo&

2ontrol 2uadro de 'ista de Directorios 3Dir'istBo84
1n control Dir'istBo8 muestra directorios ) rutas de acceso en tiempo de e(ecucin&
1tilice este control para mostrar una lista (err-uica de directorios& Puede crear
cuadros de dilogo -ue* por e(emplo* permitan a un usuario abrir un arc5i!o desde una
lista de arc5i!os de todos los directorios disponibles&

Propiedades
'ist 2ontiene una lista de todos los directorios&
'ist2ount De!uel!e el n/mero de subdirectorios del directorio actual&
'istInde8 Indica el .ndice de la ruta de acceso actual&
Pat5 ,l !alor de la propiedad Pat5 es una cadena -ue indica una ruta de acceso*
como 2:e=b o 2:e$indo%se+)stem&

E)entos
25ange =curre cuando el usuario 5ace doble clic en un nue!o directorio o cuando se
cambia la conguracin de la propiedad Pat5 mediante cdigo&

2ontrol 2uadro de 'ista de Arc5i!os 3:ile'istBo84
,l control :ile'istBo8 encuentra ) muestra los arc5i!os del directorio especicado por la
propiedad Pat5 en tiempo de e(ecucin& 1tilice este control para mostrar una lista de
los arc5i!os seleccionados por tipo& Puede crear cuadros de dilogo en la aplicacin
-ue* por e(emplo* permitan al usuario seleccionar un arc5i!o o un grupo de arc5i!os&

Propiedades
:ile;ame De!uel!e o establece el nombre de un arc5i!o seleccionado&
'ist 2ontiene una lista con los arc5i!os del directorio e8pandido actualmente -ue
coinciden con la propiedad Pattern& ;o se inclu)e la ruta de acceso&
'ist2ount De!uel!e el n/mero de arc5i!os del directorio actual -ue coinciden con el
!alor de la propiedad Pattern&
'istInde8 De!uel!e o establece el .ndice del elemento seleccionado actualmente&
Pat5 ,l !alor de la propiedad Pat5 es una cadena -ue indica una ruta de acceso*
como 2:e=b o 2:e$indo%se+)stem&
Pattern De!uel!e o establece un !alor -ue indica los nombres de arc5i!o mostrados
en un control :ile'istBo8 en tiempo de e(ecucin&

E)entos
2licK =curre cuando el usuario presiona ) suelta un botn del ratn en un control
:ile'istBo8&


2ontrol Imagen 3Image4
,l control Image se utili0a para mostrar un grco& 1n control Image puede mostrar un
grco desde un mapa de bits* un icono o un metarc5i!o* as. como un metarc5i!o
me(orado* un arc5i!o fP,E o arc5i!os EI:&

Propiedades
Picture De!uel!e o establece un grco -ue se mostrar en el control& 9ambin se le
puede asignar un grco de!uelto por la #uncin 'oadPicture&
+tretc5 9rueN:alse& De!uel!e o establece un !alor -ue indica si un grco cambia su
tama6o para a(ustarse al de un control Image&

Comentarios
El control Image utiliza menos recursos del sistema y actualiza con m1s rapidez 0ue
un control Pict.re2ox' pero slo admite un su$con,unto de las propiedades' los
e)entos y los m%todos de Pict.re2ox. ;se la propiedad 5tretc+ para determinar si el
gr12co se escala para a,ustarse al control o )ice)ersa. !un0ue puede colocar un
control Image dentro de un contenedor' un control Image no puede actuar como
contenedor.


:uncin 'oadPicture34
2arga un grco en un ob(eto Picture* un control PictureBo8 o un control Image&

%ormato?
'oadPicture3@om$reDe!rc+i)oBr12co4

9ambin se puede usar la #uncin #oad.icture3) para asignar un icono a un #ormulario
o al puntero del ratn mostrado en pantalla&

(jemplos de la 'unci$n #oad.icture3)?

'Establece el icono del +ormulario
Set FormC.*con = ,oad"icture'")**C#!#.*C#"(


'Establece el puntero del rat:n
Screen.)ouse*con = ,oad"icture'")**C#!#.*C#"(
Screen.)ouse"ointer = PP


Creaci$n de un visor de im@genes


(l c$digo para los controles es el siguiente?

"rivate Sub drv-nidad%C/ange'(
dirDirectorio."at/ = drv-nidad.Drive
End Sub

"rivate Sub dirDirectorio%C/ange'(
+il,ista."at/ = dirDirectorio."at/
End Sub


"rivate Sub +il,ista%Clic&'(
*mageC."icture = ,oad"icture'dirDirectorio."at/ W %
"X" W +il,ista.+ilename(
FrameC.Caption = +il,ista.+ilename
FormC.*con = ,oad"icture'dirDirectorio."at/ W %
"X" W +il,ista.+ilename(
End Sub
dr!1nidad
dirDirectorio
l'ista
:rame1
Image1
2ontrol 9empori0ador 39imer4
1n control *imer puede e(ecutar cdigo a inter!alos peridicos produciendo un e!ento
9imer& ,l control *imer* in!isible para el usuario* resulta /til para el procesamiento de
#ondo& ;o e8iste ning/n l.mite prctico en cuanto al n/mero de controles *imer acti!os
-ue se puede tener en Visual Basic F&I e(ecutndose en $indo%s XF o en $indo%s ;9&

Propiedades
,nabled 9rueN:alse& Acti!a o desacti!a el control& +i se desacti!a el control *imer,
estableciendo ,nabled a :alse* se cancelar la cuenta atrs establecida por la
propiedad Inter!al del control&
Inter!al De!uel!e o establece el n/mero de milisegundos entre las llamadas al e!ento
9imer de un control *imer& 'os !alores admitidos para milisegundos son I*
-ue desacti!a el control *imer* o de 1 a GFFBF& ,l m8imo* GFFBF
milisegundos* e-ui!ale a poco ms de un minuto&

E)entos
9imer =curre cuando 5a transcurrido un inter!alo preestablecido para el control
*imer&


(jemplo de uso del control *imer



MinimiBa el 'ormulario y activa el control temporiBador *imer6

"rivate Sub cmdEstablecer%Clic&'(
FormC.DindoEState = C
TimerC.Enabled = True
End Sub
t8t@ora
t8t"ensa(e
cmd,stablec
er
cmd+alir
9imer1
Inter!alZ1II
I
,nabledZ:als
e
*ermina la ejecuci$n de la aplicaci$n

"rivate Sub cmdSalir%Clic&'(
End
End Sub


Compara la hora actual con la hora ingresada en el cuadro ttHora cada
segundo y muestra el mensaje establecido en caso de 2ue sean iguales,
desactiva el control temporiBador y restaura la ventana a su tama-o normal.

"rivate Sub TimerC%Timer'(
Dim /ora 2s String
/ora = Format'Time6 "//Amm"(
*+ /ora = txtHora.Text T/en
Beep
)sgBox txt)ensa9e.Text6 vb#$#nl7 8 vb*n+ormation6 ")ensa9e"
TimerC.Enabled = False
FormC.DindoEState = .
End *+
End Sub


1so del control Data
,n Visual Basic puede utili0ar el control 5ata para crear aplicaciones de
bases de datos para una gran !ariedad de #ormatos de base de datos& ,l
control 5ata interact/a con el motor de base de datos "icroso#t fet )
permite crear aplicaciones preparadas para datos con la m.nima
cantidad de cdigo posible&

Vista Eeneral del Acceso a Datos
Antes de traba(ar con la #uncionalidad de base de datos desde Visual Basic* se debe
entender las capacidades de acceso a datos* as. como* la terminolog.a empleada&

=pciones de Acceso a Datos en Visual Basic
,sta parte del curso enumera las di!ersas opciones -ue Visual Basic proporciona para
acceder a datos&

;so del Motor de Base de Datos Microso*t Qet
'os ob(etos de acceso a datos Y Data Access =b(ects 35474 ) el control 5ata usan el
motor de base de datos "icroso#t fet para acceder a bases de datos& ,l motor de base
de datos fet puede acceder a los siguientes B tipos de bases de datos&

Bases de datos Ket
,stas bases de datos son creadas ) manipuladas directamente por el motor fet&
"icroso#t Access ) Visual Basic emplean el mismo motor de base de datos fet&

Bases de datos de Mtodo de 4cceso !ecuencial /ndeado 3/!4M)
'os #ormatos de estas bases de datos inclu)en Btrie!e* dBase* "icroso#t Visual
:o8Pro* ) Parado8&

Bases de datos compatibles con 75BC 37pen 5ataBase Connectivity L
Conectividad 4bierta de Base de 5atos)
,stas bases de datos inclu)en las bases de datos clienteNser!idor -ue con#orman el
estndar =DB2* tal como "icroso#t +Q' +er!er& 'a ma)or.a de bases de datos -ue
soportan =DB2 pueden ser accedidas empleando Visual Basic&

.tros m%todos de !cceso a Datos
'os otros mtodos de acceso a datos soportados por Visual Basic inclu)en:

(l control 7rigen de 5atos Aemoto 3Aemote 5ata !ource)
,ste es un control -ue emplea =DB2 para acceder a bases de datos =DB2 tales
como "icroso#t +Q' +er!er ) =racle& ,l control 7rigen de 5atos Aemoto slo est
disponible en la edicin ,mpresarial de Visual Basic&

#ibrer+as 75BC
,stas librer.as permiten -ue se llame a la inter#ace de programacin de
aplicaciones 3API4 de =DB2 directamente ) estn disponibles como un producto
separado&

#ibrer+as !M# de Visual Basic
,stas librer.as proporcionan un enlace directo a "icroso#t +Q' +er!er* ) estn
disponibles como un producto separado&
,ntendiendo los 2onceptos Bsicos acerca de las Bases de
Datos
'a ma)or.a de sistemas de bases de datos emplean el modelo de base de datos
relacional& ,ste modelo presenta los datos como una coleccin de tablas& 1na tabla es
un grupo lgico de in#ormacin relacionada& Por e(emplo* la base de datos ;eptuno
contiene una tabla -ue almacena a los empleados* ) otra almacena los pedidos de una
compa6.a cticia&
'a base de datos ;eptuno&mdb es una base de datos de e(emplo incluida con "icroso#t
Access&



,lementos de una 9abla
'a base de datos ;eptuno contiene un n/mero de tablas -ue agrupan la in#ormacin&
,stas tablas inclu)en Pedidos* 2lientes* ) ,mpleados&
,n una base de datos fet* las las de la tabla son denominadas registros* ) las
columnas campos&



#a Cla)e Principal
2ada tabla debe de tener una cla!e principal* -ue es un campo 3o una combinacin de
campos4 -ue es /nico para cada registro en la tabla& Por e(emplo* el campo Id,mpleado
es la cla!e principal para la tabla ,mpleados&
1na tabla puede tambin tener cla!es #orneas* -ue son campos -ue 5acen re#erencia
a una cla!e principal de otra tabla& Por e(emplo* en la base de datos ;eptuno* la tabla
Pedidos tiene un campo llamado Id2liente& ,ste campo es una cla!e #ornea por-ue
5ace re#erencia a un cliente de la tabla 2lientes& ,n !e0 de duplicar toda la in#ormacin
del cliente por cada pedido* slo se ingresa la cla!e principal del cliente a -uien
pertenece el pedido* como la cla!e principal es /nica por cada cliente* 5a) un solo
cliente por cada pedido* ) un cliente puede tener muc5os pedidos& ,n trminos de una
base de datos* la relacin entre la tabla 2lientes ) la tabla Pedidos es una relacin del
tipo uno>a>!arios&

3egistros
1n registro contiene in#ormacin acerca de un solo ingreso en una tabla&
Eeneralmente* no se desea -ue dos registros en una tabla tengan los mismos datos&
Por e(emplo* un registro en la tabla ,mpleados contiene in#ormacin acerca de un /nico
empleado&

Campos
2ada campo en una tabla contiene una parte de la in#ormacin& Por e(emplo* la tabla
,mpleados inclu)e campos para el Id del empleado* Apellidos* ;ombre* etc&

Indices
'os .ndices de una tabla de una base de datos son listas ordenadas -ue son ms
rpidas para las b/s-uedas -ue las tablas en s.& Para 5abilitar un acceso ms rpido a
una base de datos* la ma)or.a de bases de datos emplean uno o ms .ndices& Por
e(emplo* la tabla ,mpleados tiene un .ndice para la columna Id,mpleado&


9raba(ando con el 2ontrol Data
,l control 5ata de Visual Basic permite escribir aplicaciones de bases de
datos mu) ecaces con mu) poco cdigo&
,n esta parte se aprender a generar aplicaciones de bases de datos
con el control 5ata ) el ob(eto Aecordset asociado& 9ambin se
aprender como el Asistente para :ormularios de Datos puede construir
una aplicacin -ue inclu)e el control 5ata&


9ener Acceso a Datos con el 2ontrol Data
,l control 5ata implementa el acceso a datos mediante el motor de
base de datos "icroso#t fet& ,sta tecnolog.a proporciona acceso a
muc5os #ormatos de base de datos ) permite crear aplicaciones -ue
mane(an datos sin necesidad de escribir cdigo&
Para crear una aplicacin de base de datos -ue emplee el control 5ata*
se siguen los siguientes pasos:
1& 1& A6adir el control 5ata al #ormulario ) establecer las propiedades
para especicar la base de datos ) la tabla desde la cual se
obtendrn los datos&
A& A& A6adir controles enla0ados a datos al #ormulario* ) establecer las
propiedades para enla0ar los controles al control 5ata para -ue los
datos puedan ser mostrados&
1so de 2ontroles ,nla0ados a Datos
2uando un control -ue 5a colocado en un #ormulario se enla0a a datos*
se muestran automticamente los datos de la base de datos en el
control enla0ado& +i un usuario cambia los datos de un control enla0ado*
dic5os cambios se actuali0arn automticamente en la base de datos en
cuanto el usuario se desplace a otro registro& "uc5os controles
intr.nsecos o estndar de Visual Basic permiten ser enla0ados a datos*
como es el caso de los controles CheckBo* /mage* #abel*
.ictureBo* *etBo* #istBo* ComboBo ) los contenedores 7#(&
'a siguiente ilustracin es un e(emplo de un #ormulario -ue contiene un
control 5ata ) dos controles enla0ados&

,stablecer las Propiedades del 2ontrol Data
'os siguientes pasos describen como conectar un control 5ata a una
base de datos&

1& 1& ,specicar las base de datos a la cual se -uiere acceder
estableciendo la propiedad 5atabase&ame al nombre de la base
de datos&
A& A& Para especicar -ue registros recuperar* establecer la
propiedad Aecord!ource al nombre de la tabla dentro de la base
de datos* o a una cadena +Q'&

Nota8 Para acceder a una $ase de datos dBase' Paradox' o Btrie)e' se
de$e esta$lecer la propiedad DatabaseName a la carpeta 0ue contiene
los arc+i)os de la $ase de datos' y la propiedad Connect al tipo
apropiado de $ase de datos.

,nla0ar 2ontroles
Despus de establecer los !alores de las propiedades para el control
5ata* es necesario enla0ar al control 5ata controles indi!iduales )
despus especicar -u campo de la tabla mostrar cada control&

1& 1& ,n tiempo de dise6o* establecer la propiedad 5ata!ource del
control enla0ado a datos al control 5ata&
A& A& ,n tiempo de dise6o o en tiempo de e(ecucin* especicar -ue
campo se desea mostrar en el control enla0ado estableciendo la
propiedad 5ata%ield&
'a propiedad 5ata%ield puede ser establecida en tiempo de dise6o
o en tiempo de e(ecucin&
1sar las Propiedades ) "todos del 2ontrol Data
Para especicar los datos -ue se desean recuperar* se debe establecer
las propiedades 5atabase&ame ) Aecord!ource de un control 5ata&
Adems* se pueden establecer las siguientes propiedades ) mtodos&

#a Propiedad Connect
,sta propiedad especica el tipo de base de datos a abrir& Puede incluir
argumentos tales como un nombre de usuario 3user ID4 ) una
contrase6a&

#a Propiedad Exclusi)e
'a propiedad (clusive determina si se tiene o no un uso e8clusi!o de
la base de datos& +i esta propiedad se establece a *rue* ) luego se abre
sin problemas la base de datos* ninguna otra aplicacin podr abrirla
5asta -ue sea cerrada&

#a Propiedad 3ead.nly
,sta propiedad determina si se puede o no actuali0ar o grabar cambios
en la base de datos& +i no se tiene planeado 5acer cambios en la base
de datos* es ms eciente establecer la propiedad Aead7nly a *rue&

#a Propiedad 3ecordset
'a propiedad Aecordset es un ob(eto -ue contiene el con(unto de
registros de!ueltos por el control 5ata& ,sta propiedad contiene a su !e0
propiedades ) mtodos -ue pueden ser usados para traba(ar con los
registros de!ueltos&

#as Propiedades B.F!ction y E.F!ction
,stas propiedades determinan -ue accin tomar el control 5ata
cuando las propiedades B7% o (7% del recordset tomen como !alor
*rue&
Por e(emplo* si la propiedad (7%4ction del control 5ata es establecida
a !bActionAdd;e%* ) se emplea el control 5ata para despla0arse* una
!e0 -ue se pase el /ltimo registro* el control 5ata automticamente
e(ecutar el mtodo 4dd&e" de modo -ue se pueda a6adir un nue!o
registro&

El M%todo 3e*res+
,l mtodo Ae'resh renue!a el ob(eto Aecordset& +i se cambia la
propiedad Aecord!ource en tiempo de e(ecucin* se debe in!ocar al
mtodo Ae'resh para reno!ar el recordset&
,l siguiente cdigo muestra como emplear el mtodo Ae'resh&

DataC.;ecordSource = "SE,ECT K F;#) Empleados " W %
"DHE;E Y*dEmpleadoZ = " W txt*dEmp.Text
DataC.;e+res/


,l =b(eto ?ecordset
,n una aplicacin de base de datos* los usuarios traba(an con el control
5ata para despla0arse entre registros dentro de la base de datos& 'os
usuarios pueden 5acer clic en los botones del control 5ata para a!an0ar
o retroceder registro a registro o para ir directamente al primer o al
/ltimo registro&
M/u% es un 3ecordsetN
9odo el con(unto de registros al -ue 5ace re#erencia un control 5ata se
denomina con(unto de registros o Aecordset& ,l Aecordset se
almacena en la memoria* transrindose al disco si es necesario&
Para manipular el Aecordset* se emplea la propiedad Aecordset del
control 5ata& ,l Aecordset contiene el registro actual& 'a in#ormacin
del registro actual es mostrada por los controles enla0ados& +e puede
cambiar la posicin del registro actual 5aciendo clic en el control 5ata o
escribiendo cdigo -ue emplee mtodos del ob(eto Aecordset&

Determinar los l"mites de un 3ecordset
+i utili0a cdigo para cambiar la posicin del registro actual* debe
comprobar las propiedades (7% ) B7% del ob(eto Aecordset para
determinar el inicio ) el nal del mismo& 2uando se desplace al registro
(7% o al B7%* se e(ecutar la accin indicada por el !alor de la
propiedad B7%4ction o (7%4ction&
Por e(emplo* se puede establecer la propiedad (7%4ction para a6adir
un nue!o registro automticamente& +i se establece la propiedad
(7%4ction a (7%* ninguna accin ser tomada cuando se desplace al
registro (7%& 2uando se desplace pasando un registro los registros B7%
o (7%* se producir un error en tiempo de e(ecucin&
,n la siguiente ilustracin se muestra cmo las propiedades B7% ) (7%
determinan los l.mites del ob(eto Aecordset&


Para emplear el ob(eto Aecordset de un control 5ata determinado* se
debe especicar la propiedad Aecordset del control Data* como se
muestra en el siguiente cdigo&

DataC.;ecordset.)ove!ext ')ueve el registro actual al
siguiente
*+ DataC.;ecordset.E#F T/en
DataC.;ecordset.)ove,ast


1so de las Propiedades ) "todos de un ?ecordset

1tilice los mtodos ) las propiedades del ob(eto Aecordset para
recuperar in#ormacin del con(unto de registros* despla0arse por los
registros ) agregar* actuali0ar o eliminar registros&

#as Propiedades B.F y E.F
'as propiedades B7% ) (7% del ob(eto Aecordset indican si la posicin
del registro actual es antes del primer registro o despus del /ltimo
registro dentro del con(unto de registros& +i no 5a) registros en el
recordset* entonces el !alor de las propiedades B7% ) (7% es *rue&

El M%todo !dd@e: del 3ecordset
Para agregar un nue!o registro a un recordset* se emplea el mtodo
4dd&e"& 2uando se e(ecuta el mtodo 4dd&e"* Visual Basic limpia los
controles enla0ados ) establece la propiedad (ditMode del control 5ata
a db,ditAdd&
,l nue!o registro no ser a6adido a la base de datos 5asta -ue sea
e(ecutado e8pl.citamente un mtodo 0pdateAecord o 0pdate* o 5asta
-ue el usuario se mue!a a otro registro&
,l siguiente cdigo muestra como agregar un nue!o registro a un
recordset&

"rivate Sub cmd2gregar%Clic&'(
DataC.;ecordset.2dd!eE

El M%todo ;pdate3ecord del Control Data
,l mtodo 0pdateAecord se emplea para grabar el registro actual a
una base de datos& ,l siguiente cdigo muestra como grabar el registro
actual ) actuali0ar la base de datos&

"rivate Sub cmd3rabar%Clic&'(
DataC.-pdate;ecord

El M%todo Cancel;pdate del Control Data
,l mtodo Cancel0pdate se emplea para cancelar un mtodo 4dd&e"
o (dit ) reno!ar o re#rescar los controles enla0ados con datos del
recordset&
Por e(emplo* si un usuario 5a modicado los campos de un #ormulario*
pero toda!.a no los 5a actuali0ado* el mtodo Cancel0pdate re#rescar
los campos con los datos originales del recordset&
+i un usuario selecciona un botn 4gregar de un #ormulario* ) luego
decide no agregar el registro* el mtodo Cancel0pdate cancelar la
operacin ) !isuali0ar el registro actual&
,l siguiente cdigo muestra como cancelar la agregacin o edicin de un
registro&

"rivate Sub cmdCancelar%Clic&'(
DataC.Cancel-pdate

El M%todo Delete del 3ecordset
Para eliminar un registro de una base de datos* se emplea el mtodo
5elete& ,l registro eliminado permanecer como el registro actual 5asta
-ue el usuario se mue!a a un registro di#erente* como se muestra en el
siguiente cdigo&

"rivate Sub cmdEliminar%Clic&'(
DataC.;ecordset.Delete
DataC.;ecordset.)ove!ext
*+ DataC.;ecordset.E#F T/en
DataC.;ecordset.)ove,ast
End *+
End Sub
Nota8 #a $ase de datos @eptuno tiene de2nidas reglas de integridad
re*erencial 0ue impiden eliminar registros relacionados.

1so del Asistente para :ormularios de Datos
,l Asistente para :ormularios de Datos es una utilidad de Visual Basic
-ue genera #ormularios de datos simples -ue emplean el control 5ata&
+e puede emplear el Asistente para :ormularios de Datos para construir
rpidamente #ormularios para una aplicacin de base de datos&
Para cargar el Asistente para :ormularios de Datos* se emplea la orden
4dministrador de Complementos del men/ Complementos&


1so de los ,!entos del 2ontrol Data
,l control 5ata proporciona tres e!entos -ue puede utili0ar para me(orar
la aplicacin de base de datos: Validate* ,rror ) ?eposition& Dic5os
e!entos permiten omitir parte del comportamiento predeterminado del
control 5ata&

;sar el E)ento Validate
1tilice el e!ento Validate para comprobar los datos antes de guardar un
registro en la base de datos& ,ste e!ento se produce (usto antes de -ue
Visual Basic escriba en la base de datos los cambios procedentes de los
controles enla0ados ) de -ue !uel!a a colocar el puntero del registro
actual en otro registro de la base de datos& Puede utili0ar el e!ento
Validate para pedir al usuario -ue conrme los cambios reali0ados&

#intaxis
,l e!ento Validate tiene la siguiente sinta8is:

.rivate !ub 5ata61Validate 3index 4s /nteger* action 4s /nteger*
sa)e 4s /nteger4

"l 5rg.mento 5ction
,l argumento action indica la operacin -ue pro!oc el e!ento Validate&
,l e!ento Validate se produce como resultado de reali0ar las operaciones
siguientes:

Move%irst* Move.revious* Move&et* Move#ast
4dd&e"
0pdate
5elete
%ind
,stablecer la propiedad Bookmark
2errar la base de datos
Descargar el #ormulario

Para cancelar cual-uiera de estas acciones* asigne al argumento action
el !alor !bDataAction2ancel&

"l 5rg.mento #a6e
,l argumento sa)e indica si !a a guardarse o no el registro& +i sa)e es
*rue* los datos enla0ados 5an cambiado& Para cancelar la accin de
guardar puede asignar a sa)e el !alor %alse&
,l siguiente cdigo pide al usuario -ue conrme los cambios 5ec5os a la
base de datos& +i el usuario responde ;o* los cambios sern cancelados&

"rivate Sub DataC%Ialidate '2ction 2s *nteger6 Save 2s
*nteger(
Dim i;espuesta as *nteger
*+ Save = True T/en
i;espuesta = )sgBox '"<Desea guardar los
cambios=" 6 vb>es!o(
*+ i;espuesta = vb!o T/en
Save = False
DataC.-pdateControls '2ctualiFa los campos
End *+
End *+
End Sub

;sar el E)ento 3eposition
1tilice el e!ento ?eposition para modicar la apariencia de un #ormulario
o reali0ar una accin necesaria cuando se desplace a un nue!o registro&
,ste e!ento tiene lugar cuando Visual Basic despla0a el puntero del
registro actual a otro registro de la base de datos& 9ambin se produce la
primera !e0 -ue se abre la base de datos&

!odi0car la apariencia de .n +orm.lario
Para cambiar la manera en -ue un #ormulario muestra in#ormacin
basndose en el registro seleccionado en ese momento 5a) -ue utili0ar
el e!ento ?eposition& Por e(emplo* puede modicar el t.tulo del control
5ata de #orma -ue se muestre el registro n/mero n&
Para !er el n/mero del registro actual* utilice la propiedad
4bsolute.osition del ob(eto Aecordset& ,l n/mero de registro es
relati!o a cero* por lo -ue el primer registro es el I&
,l siguiente cdigo muestra como !isuali0ar el n/mero del registro
actual&

"rivate Sub DataC%;eposition'(
DataC.Caption = ";egistro ![" W
DataC.;ecordset.2bsolute"osition 8 C
End Sub

Tratar los cambios al despla1arse a .n n.e6o registro
2uando un usuario se despla0a a un nue!o registro mediante el control
5ata* puede -ue los datos del #ormulario tengan -ue presentarse de
una #orma distinta en el caso del nue!o registro&
Por e(emplo* es posible -ue en un #ormulario -ue muestre registros de
empleados 5a)a distintas opciones dependiendo de s. los empleados son
(os* temporales o si traba(an por 5oras& 2ada registro mostrar la
in#ormacin sobre un empleado distinto* cu)as opciones pueden no ser
las mismas para todos los registros& Para -ue se seleccione la opcin
correcta para cada registro* escriba cdigo en el e!ento ?eposition&
,l cdigo siguiente utili0a el e!ento ?eposition para modicar la
apariencia de un #ormulario&

"rivate Sub DataC%;eposition'(
DataC.Caption=DataC.;ecordset.2bsolute"osition
*+ DataC.;ecordset'"*dEmpleado"( U O T/en
optSenior.Ialue = True
Else
opt\unior.Ialue = True
End *+
DataC.Caption = ";egistro ![" W
DataC.;ecordset.2bsolute"osition 8 C
End Sub

,sta ilustracin muestra el #ormulario basado en el cdigo anterior&



;sar el E)ento Error
,l e!ento ,rror tiene lugar cuando un usuario interact/a con el control
5ata ) se produce un error de acceso a datos& 1tilice el e!ento ,rror
para agregar tratamiento de errores personali0ado al control 5ata&
Por e(emplo* si un usuario modica un campo ) despus 5ace clic en el
control 5ata para despla0arse al siguiente registro* el control 5ata
actuali0ar el registro actual& +i se produce un error de acceso a datos
durante la actuali0acin* se producir el e!ento ,rror&
'os !alores de los campos enla0ados no cambian tras producirse un
error& ,l usuario puede corregir los !alores ) 5acer clic en el control 5ata
para tratar de actuali0ar nue!amente el registro&

!ostrar .n mensa7e de error personali1ado
+i no coloca cdigo para tratar errores en el e!ento ,rror ) se produce
un error cuando un usuario interact/a con el control 5ata* Visual Basic
muestra el mensa(e de error ) el programa contin/a e(ecutndose&
+i no desea -ue se muestre el mensa(e de error estndar* puede asignar
al argumento ?esponse el !alor I ) mostrar un mensa(e de error
personali0ado como se muestra en el siguiente cdigo&

"rivate Sub DataC%Error 'DataErr 2s *nteger6 ;esponse 2s
*nteger(
*+ DataErr = M.?? T/en 'Error de clave principal
duplicada
)sgBox "*ngrese un *d de Empleado Bnico"
txt*dEmp.SetFocus
;esponse = .
Else
;esponse = C ')uestra el mensa9e de error est5ndar
End *+
End Sub


1so de 2ontroles ,nla0ados a Datos Acti!eJ
Adems de los controles enla0ados intr.nsecos* Visual Basic o#rece !arios
controles 4ctive9 enla0ados a datos& ,n esta parte del curso se
describen algunos controles Acti!eJ enla0ados a datos a!an0ados&

;sar el Control DBBrid
,l control de cuadr.cula enla0ada a datos 3control 5B,rid4 permite -ue
los usuarios de su aplicacin de base de datos traba(en con !arios
registros a la !e0&

!ostrar m8ltiples registros
5B,rid es un control Acti!eJ -ue muestra una serie de las ) columnas
-ue representan registros ) campos de un ob(eto Aecordset& 2uando
asigne a la propiedad 5ata!ource del control 5B,rid un control 5ata*
el control 5B,rid se llenar automticamente de datos ) se
establecern automticamente sus encabe0ados de columna a partir del
con(unto de registros del control 5ata&
Al contrario -ue la ma)or.a de los controles enla0ados a datos* el control
5B,rid le permite !er ) modicar !arios registros simultneamente&
,n la siguiente ilustracin se muestra un #ormulario -ue utili0a un control
5B,rid para presentar registros procedentes de la base de datos
;eptuno&

.ara a-adir el control 5B,rid a un proyecto
1& 1& @acer clic en la orden Componentes del men/ .royecto&
A& A& ,n la c5a Controles* seleccionar Microso't 5ata Bound ,rid
Control* ) luego 5acer clic en 4ceptar&

,l control 5B,rid tiene !arias propiedades -ue especican cmo se
comporta el control& Por e(emplo* si asigna a la propiedad 4llo"0pdate
el !alor *rue* un usuario puede modicar los datos del control& 9ambin
puede establecer propiedades para columnas indi!iduales del control
5B,rid&
Puede cambiar el t.tulo de la columna* cambiar el campo de datos al -ue
se enla0a la columna* agregar !alores predeterminados* etc&

.ara establecer propiedades de columnas
1& 1& =prima el botn secundario del ratn sobre el control 5B,rid&
A& A& @aga clic en la orden .ropiedades&
B& B& @aga clic en Columnas&

Puede cambiar el t.tulo de la columna* cambiar el campo de datos al -ue
se enla0a la columna* agregar !alores predeterminados* etc&
Para establecer los encabe0ados de las columnas del control 5B,rid*
luego de 5aberlo enla0ado a un control 5ata* oprima el botn
secundario del ratn sobre el control en tiempo de dise6o* ) luego 5aga
clic en la orden Aecuperar campos&

9btener : establecer el texto de la celda act.al
1tilice la coleccin Columns del control 5B,rid para recuperar el te8to
de la celda seleccionada actualmente en tiempo de e(ecucin& Por
e(emplo:

)sgBox DB3ridC.Columns'DB3ridC.Col(.Text

Para cambiar la in#ormacin del control DBErid* cambie el ob(eto
?ecordset asociado& Por e(emplo* si el control 5B,rid est enla0ado al
recordset Data1* se e(ecutar.a el siguiente cdigo:

DataC.;ecordset.Edit
DataC.;ecordset.Fields'"!ombre"roducto"( = "Disco duro"
DataC.;ecordset.-pdate

Usar el e6ento 2e+oreUpdate
,l e!ento Be#ore1pdate tiene lugar antes de -ue se mue!an datos desde
un control 5B,rid al b/#er de copia del control 5ata& Puede !alidar los
datos ) cancelar la actuali0acin si es necesario&

;sar el Control M5FlexBrid
,l control M!%le,rid proporciona caracter.sticas a!an0adas para la
presentacin de datos en una cuadr.cula& ,s similar al control 5B,rid
aun-ue* cuando se enla0a a un control 5ata* el control M!%le,rid
muestra datos de slo lectura& Puede utili0ar el control M!%le,rid para
combinar las o columnas de in#ormacin ) as. agrupar la in#ormacin
relacionada&
,n la siguiente ilustracin se muestran registros agrupados por Id& de
pedido en la tabla Detalles de pedidos&

.ara combinar celdas
1& 1& ,stable0ca la propiedad MergeCells a un !alor di#erente a cero&
A& A& ,stable0ca las propiedades arreglo MergeAo"3) ) MergeCol3) a
*rue para las las ) columnas -ue desee combinar&

Por e(emplo* para combinar las celdas en la tabla Detalles de pedidos*
a6ada el siguiente cdigo al #ormulario donde se encuentra el control
M!%le,rid&

"rivate Sub Form%,oad'(
)SFlex3ridC.)ergeCells = +lex)ergeFree
)SFlex3ridC.)ergeCol'.( = True
End Sub

;sar el Control DBCom$o
Puede utili0ar el control de cuadro de lista enla0ado a datos 35B#ist4 o
el cuadro combinado enla0ado a datos 35BCombo4 para presentar
automticamente una lista de !alores de un ?ecordset& ,sto resulta /til
para proporcionar !alores !lidos al usuario&

9btener in+ormacin de .na tabla de b8s-.eda
9ambin puede utili0ar estos controles en aplicaciones de gtabla de
b/s-uedag&
Por e(emplo* puede presentar una lista de nombres de categor.a !lidos
3en !e0 de Id&4 ) utili0ar el Id& correspondiente cuando el usuario agregue
o modi-ue datos&
'a ilustracin siguiente muestra un #ormulario -ue utili0a el control
5BCombo para presentar nombres de categor.as de la tabla Productos&


"stablecer propiedades del control D2Combo
Para determinar el !alor -ue se presenta en el control 5BCombo* asigne
a la propiedad Ao"!ource un nombre de control 5ata ) a la propiedad
#ist%ield un nombre de campo&
,l cuadro combinado enla0ado a datos contiene todos los !alores de ese
campo& Para determinar -u campo de la base de datos se actuali0a
cuando un usuario cambia un !alor* estable0ca las propiedades
5ata!ource ) 5ata%ield& Para establecer la relacin entre la tabla -ue
contiene los !alores de b/s-ueda ) la tabla -ue se est modicando
realmente* estable0ca la propiedad BoundColumn&