0% encontró este documento útil (0 votos)
47 vistas65 páginas

Curso de Visual Basic Parte 1

Este documento proporciona una introducción a Visual Basic. Explica que Visual Basic es un lenguaje de programación orientado a objetos y basado en eventos que permite crear interfaces gráficas de usuario arrastrando y soltando controles. Visual Basic evolucionó a partir del lenguaje BASIC y ahora incluye cientos de instrucciones, funciones y clases relacionadas con interfaces gráficas. Visual Basic está disponible en tres ediciones: aprendizaje, profesional y empresarial, cada una orientada a diferentes requisitos de programación.

Cargado por

Marlon Baltazar
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
47 vistas65 páginas

Curso de Visual Basic Parte 1

Este documento proporciona una introducción a Visual Basic. Explica que Visual Basic es un lenguaje de programación orientado a objetos y basado en eventos que permite crear interfaces gráficas de usuario arrastrando y soltando controles. Visual Basic evolucionó a partir del lenguaje BASIC y ahora incluye cientos de instrucciones, funciones y clases relacionadas con interfaces gráficas. Visual Basic está disponible en tres ediciones: aprendizaje, profesional y empresarial, cada una orientada a diferentes requisitos de programación.

Cargado por

Marlon Baltazar
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 65

Curso de Visual Basic (parte I)

Qu es Visual Basic? La palabra "Visual" hace referencia al mtodo que se utili a para crear la interfa !r"fica de usuario (#$I)% &n lu!ar de escribir numerosas l'neas de c(di!o para describir la apariencia ) la ubicaci(n de los elementos de la interfa * simplemente puede arrastrar ) colocar ob+etos prefabricados en su lu!ar dentro de la pantalla% ,i ha utili ado al!una -e un pro!rama de dibu+o como .aint* )a tiene la ma)or parte de las habilidades necesarias para crear una interfa de usuario efecti-a% La palabra "Basic" hace referencia al len!ua+e B/,IC (Be!inners /ll0.urpose ,)mbolic Instruction Code)* un len!ua+e utili ado por m"s pro!ramadores que nin!1n otro len!ua+e en la historia de la inform"tica o computaci(n% Visual Basic ha e-olucionado a partir del len!ua+e B/,IC ori!inal ) ahora contiene centenares de instrucciones* funciones ) palabras cla-e* muchas de las cuales est"n directamente relacionadas con la interfa !r"fica de 2indo3s% Los principiantes pueden crear aplicaciones 1tiles con s(lo aprender unas pocas palabras cla-e* pero* al mismo tiempo* la eficacia del len!ua+e permite a los profesionales acometer cualquier ob+eti-o que pueda alcan arse mediante cualquier otro len!ua+e de pro!ramaci(n de 2indo3s% &l len!ua+e de pro!ramaci(n Visual Basic no es e4clusi-o de Visual Basic% La &dici(n para aplicaciones del sistema de pro!ramaci(n de Visual Basic* incluida en 5icrosoft &4cel* 5icrosoft /ccess ) muchas otras aplicaciones 2indo3s* utili an el mismo len!ua+e% &l sistema de pro!ramaci(n de Visual Basic* ,criptin! &dition (VB,cript) para pro!ramar en Internet es un subcon+unto del len!ua+e Visual Basic% La in-ersi(n reali ada en el aprendi a+e de Visual Basic le a)udar" a abarcar estas otras "reas% ,i su ob+eti-o es crear un peque6o pro!rama para su uso personal o para su !rupo de traba+o* un sistema para una empresa o incluso aplicaciones distribuidas de alcance mundial a tra-s de Internet* Visual Basic dispone de las herramientas que necesita% Las caracter'sticas de acceso a datos le permiten crear bases de datos ) aplicaciones cliente para los formatos de las bases de datos m"s conocidas* incluidos 5icrosoft ,QL ,er-er ) otras bases de datos de "mbito empresarial% Las tecnolo!'as /cti-e78 le permiten utili ar la funcionalidad proporcionada por otras aplicaciones* como el procesador de te4tos 5icrosoft 2ord* la ho+a de c"lculo 5icrosoft &4cel ) otras aplicaciones 2indo3s% .uede incluso automati ar las aplicaciones ) los ob+etos creados con la &dici(n profesional o la &dici(n empresarial de Visual Basic%

Las capacidades de Internet facilitan el acceso a documentos ) aplicaciones a tra-s de Internet desde su propia aplicaci(n% La aplicaci(n terminada es un autntico archi-o %e4e que utili a una biblioteca de -'nculos din"micos (9LL) de tiempo de e+ecuci(n que puede distribuir con toda libertad%

&diciones de Visual Basic


Visual Basic se encuentra disponible en tres -ersiones* cada una de las cuales est" orientada a unos requisitos de pro!ramaci(n espec'ficos% La &dici(n de aprendi a+e de Visual Basic permite a los pro!ramadores crear robustas aplicaciones para 5icrosoft 2indo3s :; ) 2indo3s <= >% Inclu)e todos los controles intr'nsecos* adem"s de los controles de cuadr'cula* de fichas ) los controles enla ados a datos% La documentaci(n que se proporciona con esta edici(n inclu)e Learn VB Now (un C90?@5 multimedia)* un Manual del programador impreso, la /)uda en pantalla ) los Libros en pantalla de Visual Basic% La &dici(n profesional proporciona a los profesionales un completo con+unto de herramientas para desarrollar soluciones para terceros% Inclu)e todas las caracter'sticas de la &dici(n de aprendi a+e* as' como controles /cti-e7 adicionales* incluidos controles para Internet ) el #enerador de informes de Cr)stal ?eports% La documentaci(n que se proporciona con la &dici(n profesional inclu)e el Manual del programador* la /)uda en

pantalla* la Gua de herramientas componentes ) el Manual del usuario de Crystal Reports para Visual Basic. La &dici(n empresarial permite a los profesionales crear s(lidas aplicaciones distribuidas en un entorno de equipo% Inclu)e todas las caracter'sticas de la &dici(n profesional* as( como el /dministrador de automati aci(n* la #aler'a de ob+etos* las herramientas de administraci(n de bases de datos* el sistema de control de -ersiones orientado a pro)ectos 5icrosoft Visual ,ource,afe 8* etc% La documentaci(n impresa que se proporciona con la &dici(n empresarial inclu)e toda la documentaci(n de la &dici(n profesional* ) la Gua para la creacin de aplicaciones cliente ser!idor con Visual Basic ) el Manual del usuario de "ource"a#e%

1- Introduccin: $.$ %rogramacin orientada a o&'etos.


A%A%A0 @b+etos%
Un objeto es una entidad que tiene asociado un conjunto de mtodos, eventos y propiedades. Ejemplo : Una caja de texto (TextBox) en la cual podemos escribir cualquier l nea es un objeto.

A%A%B0 .ropiedades%
!on las caracter sticas que posee un objeto o un "ormulario (ventana de #indo$s). Ejemplo : %olor de "ondo del "ormulario, &uente de texto de un TextBox, '.

A%A%C0 5todos%
(os mtodos son "unciones internas de un determinado objeto que permite reali)ar "unciones sobre l o sobre otro objeto. Ejemplo : *eseamos poner en la ventana #indo$s de nuestra aplicaci+n ,-ola mundo,, por tanto pondremos el mtodo ./ 0entana.1rint ,-ola mundo,

A%A%D0 &-entos%
(os eventos son acciones que se pueden reali)ar en cualquier control: clic2, doble clic2, movimiento del rat+n. 3 estos eventos se les puede asociar c+di4o para que se ejecute al producir el evento. Un pro4rama 0isual Basic es un 15E (1ro4rama orientado a eventos). Todo lo que 6acemos en un pro4rama 0isual Basic est7 4enerado por medio de eventos

A%A%;0 &4plicaci(n inte!rada ) e+emplo de @b+etos* .ropiedades* 5todos ) &-entos%


(os "ormularios y controles de 0isual Basic son objetos que exponen sus propios mtodos, propiedades y eventos. (as propiedades se pueden considerar como atributos de un objeto, los mtodos como sus acciones y los eventos como sus respuestas. Un objeto de uso diario como el 4lobo de un ni8o tiene tambin propiedades, mtodos y eventos. Entre las propiedades de un 4lobo se incluyen atributos visibles como el peso, el di7metro y el color. 5tras propiedades describen su estado (in"lado o desin"lado) o atributos que no son visibles, como su edad. 1or de"inici+n, todos los 4lobos tienen estas propiedades9 lo que var a de un 4lobo a otros son los valores de estas propiedades.

Un 4lobo tiene tambin mtodos o acciones in6erentes que puede e"ectuar. Tiene un mtodo in"lar (la acci+n de llenarlo de 6elio) o un mtodo desin"lar (expeler su contenido) y un mtodo elevarse (si se deja escapar). *e nuevo, todos los 4lobos pueden e"ectuar estos mtodos. (os 4lobos tienen adem7s respuestas prede"inidas a ciertos eventos externos. 1or ejemplo, un 4lobo responder a al evento de pinc6arlo desin"l7ndose o al evento de soltarlo elev7ndose en el aire. (os objetos tienen propiedades, responden a eventos y ejecutan mtodos: !i se pudiera pro4ramar un 4lobo, el c+di4o de 0isual Basic podr a ser como el si4uiente. 1ara establecer las propiedades del 4lobo: :lobo.%olor ; <ojo :lobo.*i7metro ; => :lobo.?n"lado ; True 5bserve la sintaxis del c+di4o: el objeto (:lobo) se4uido de la propiedad (%olor) se4uida de la asi4naci+n del valor (<ojo). 1odr a modi"icar el color del 4lobo desde el c+di4o si repitiera esta instrucci+n y sustituyera el valor por otro di"erente. (as propiedades tambin se pueden establecer en la ventana 1ropiedades mientras se est7 dise8ando la aplicaci+n. (os mtodos de un 4lobo se invocan de esta "orma: :lobo.?n"lar :lobo.*esin"lar :lobo.Elevar @ (a sintaxis es similar a la sintaxis de las propiedades: el objeto (un nombre) se4uido de un mtodo (un verbo). En el tercer ejemplo 6ay un elemento adicional, llamado argumento, que indica la distancia que se eleva. 3l4unos mtodos tendr7n uno o m7s ar4umentos para describir m7s a "ondo la acci+n que se va a ejecutar. El 4lobo puede responder a un evento como se muestra a continuaci+n: !ub :loboA1inc6a)o() :lobo.*esin"lar :lobo.-acer<uido ,Ban4, :lobo.?n"lado ; &alse :lobo.*i7metro ; = End !ub En este caso, el c+di4o describe el comportamiento del 4lobo cuando se produce un evento 1inc6a)o: invoca el mtodo *esin"lar y lue4o invoca el mtodo -acer<uido con un ar4umento BBan4C (el tipo de ruido que se va a 6acer). %omo el 4lobo ya no est7 in"lado, la propiedad ?n"lado tiene el valor &alse y la propiedad *i7metro adopta un nuevo valor. !i bien no puede pro4ramar un 4lobo, s puede pro4ramar un "ormulario o un control de 0isual Basic. %omo pro4ramador, tiene el control: decide qu propiedades se deben modi"icar, qu mtodos se deben invocar o a qu eventos 6ay que responder para conse4uir la apariencia y el comportamiento deseados

A%A%E0 9iferencias entre la pro!ramaci(n procedural ) la pro!ramaci(n ba+o 2indo3s%


Un estudio pro"undo del "uncionamiento interno de #indo$s necesitar a un libro completo. Do es necesario tener un pro"undo conocimiento de todos los detalles tcnicos. Una versi+n reducida del "uncionamiento de #indo$s incluye tres conceptos clave: ventanas, eventos y mensajes. Una ventana es simplemente una re4i+n rectan4ular con sus propios l mites. 1robablemente ya sabe que 6ay varios tipos de ventanas: una ventana Explorador en #indo$s E@, una ventana de documento dentro de su pro4rama de proceso de textos o un cuadro de di7lo4o que emer4e para recordarle una cita. 3unque stos son los ejemplos m7s comunes, realmente 6ay otros muc6os tipos de ventanas. Un bot+n de comando es una ventana. (os iconos, cuadros de texto, botones de opci+n y barras de menFs son todos ventanas. El sistema operativo Gicroso"t #indo$s administra todas estas ventanas asi4nando a cada una un Fnico nFmero identi"icador (controlador de ventana o 6#nd). El sistema controla continuamente cada una de estas ventanas para ver si existen si4nos de actividad o eventos. (os eventos pueden producirse

mediante acciones del usuario, como 6acer clic con el mouse (rat+n) o presionar una tecla, mediante pro4ramaci+n o incluso como resultado de acciones de otras ventanas. %ada ve) que se produce un evento se env a un mensaje al sistema operativo. El sistema procesa el mensaje y lo transmite a las dem7s ventanas. Entonces, cada ventana puede reali)ar la acci+n apropiada, bas7ndose en sus propias instrucciones para tratar ese mensaje en particular (por ejemplo, volverse a dibujar cuando otra ventana la 6a dejado al descubierto). %omo puede ima4inar, tratar todas las combinaciones posibles de ventanas, eventos y mensajes podr a ser interminable. 3"ortunadamente, 0isual Basic le evita tener que tratar con todos los controladores de mensajes de bajo nivel. Guc6os de los mensajes los controla autom7ticamente 0isual Basic, mientras que otros se tratan como procedimientos de evento para su comodidad. Esto le permite crear r7pidamente e"icaces aplicaciones sin tener que tratar detalles innecesarios. En las aplicaciones tradicionales o ,por procedimientos,, la aplicaci+n es la que controla qu partes de c+di4o y en qu secuencia se ejecutan. (a ejecuci+n comien)a con la primera l nea de c+di4o y continFa con una ruta prede"inida a travs de la aplicaci+n, llamando a los procedimientos se4Fn se necesiten. En una aplicaci+n controlada por eventos, el c+di4o no si4ue una ruta predeterminada9 ejecuta distintas secciones de c+di4o como respuesta a los eventos. (os eventos pueden desencadenarse por acciones del usuario, por mensajes del sistema o de otras aplicaciones, o incluso por la propia aplicaci+n. (a secuencia de estos eventos determina la secuencia en la que se ejecuta el c+di4o, por lo que la ruta a travs del c+di4o de la aplicaci+n es di"erente cada ve) que se ejecuta el pro4rama. 1uesto que no puede predecir la secuencia de los eventos, el c+di4o debe establecer ciertos supuestos acerca del ,estado del mundo, cuando se ejecute. %uando 6a4a suposiciones (por ejemplo, que un campo de entrada debe contener un valor antes de ejecutar un procedimiento para procesar ese valor), debe estructurar la aplicaci+n de "orma que ase4ure que esa suposici+n siempre ser7 v7lida (por ejemplo, des6abilitando el bot+n de comando que inicia el procedimiento 6asta que el campo de entrada conten4a un valor). El c+di4o tambin puede desencadenar eventos durante la ejecuci+n. 1or ejemplo, cambiar mediante pro4ramaci+n el texto de un cuadro de texto 6ace que se produ)ca el evento %6an4e del cuadro de texto. Esto causar a la ejecuci+n del c+di4o (si lo 6ay) contenido en el evento %6an4e. !i supone que este evento s+lo se desencadenar7 mediante la interacci+n del usuario, podr a ver resultados inesperados. 1or esta ra)+n es importante comprender el modelo controlado por eventos y tenerlo en cuenta cuando dise8e su aplicaci+n.

$.( %royecto.
A%C%A0 9efinici(n de .ro)ecto en Visual Basic%
1ara crear una aplicaci+n con 0isual Basic se trabaja con proyectos. Un proyecto es una colecci+n de arc6ivos que se usan para 4enerar una aplicaci+n. Este tema describe c+mo 4enerar y administrar proyectos. 3l crear una aplicaci+n probablemente crear7 nuevos "ormularios9 tambin puede volver a usar o modi"icar "ormularios creados en proyectos anteriores. Esto tambin se aplica a otros m+dulos o arc6ivos que pueda incluir en su proyecto. (os controles 3ctiveH y los objetos de otras aplicaciones tambin se pueden compartir entre proyectos. *espus de ensamblar todos los componentes de un proyecto y escribir el c+di4o, puede compilar el proyecto para crear un arc6ivo ejecutable.

A%C%B0Componentes de un .ro)ecto%
%uando desarrolla un aplicaci+n, trabaja con un arc6ivo de proyecto para administrar todos los di"erentes arc6ivos que crea. Un proyecto consta de lo si4uiente: Un arc6ivo de proyecto que reali)a el se4uimiento de todos los componentes (.vbp)

Un arc6ivo para cada "ormulario (."rm).

Un arc6ivo de datos binario para cada "ormulario que conten4a datos sobre propiedades de controles del "ormulario (."rx). Estos arc6ivos no se pueden modi"icar y los 4enera autom7ticamente cualquier arc6ivo ."rm que ten4a propiedades en "ormato binario, como Picture o Icon. 5pcionalmente, un arc6ivo para cada m+dulo de clase (.cls). 5pcionalmente, un arc6ivo para cada m+dulo est7ndar (.bas). 5pcionalmente, uno o m7s arc6ivos con controles 3ctiveH (.ocx). 5pcionalmente, un Fnico arc6ivo de recursos (.res).

El archivo de proyecto es simplemente una lista de todos los arc6ivos y objetos asociados con el proyecto, as como in"ormaci+n sobre las opciones de entorno establecidas. Esta in"ormaci+n se actuali)a cada ve) que 4uarda el proyecto. Todos los arc6ivos y objetos tambin se pueden compartir con otros proyectos. %uando 6a completado todos los arc6ivos del proyecto puede convertir el proyecto en un arc6ivo ejecutable (.exe): en el menF Archivo, elija el comando Generar proyecto.exe.

1.3.2.1-Formularios.
Un "ormulario es una ventana. (a ventana #indo$s de cualquier aplicaci+n. 1odemos abrir tantas ventanas como queramos en nuestro proyecto, pero el nombre de las ventanas debe ser distinto. 1or de"ecto como ya 6emos visto, la ventana que se abre en 0isual Basic tiene el nombre de &orm=. Ia veremos como cambiar estas ,1ropiedades, m7s adelante. (os m+dulos de "ormularios (extensi+n de nombre de arc6ivo ."rm) pueden contener descripciones en "orma de texto del "ormulario y sus controles, incluyendo los valores de sus propiedades. Tambin pueden contener declaraciones a nivel de "ormulario de constantes, variables y procedimientos externos, procedimientos de evento y procedimientos 4enerales.

1.3.2.2-Mdulos de clase.
(os m+dulos de clase (extensi+n de nombre de arc6ivo .cls) son similares a los m+dulos de "ormulario, excepto en que no tiene inter"a) de usuario visible. 1uede usar m+dulos de clase para crear sus propios objetos, incluyendo c+di4o para mtodos y propiedades.

1.3.2.3-Mdulos estndar.
Un m+dulo es un arc6ivo 0isual Basic donde escribimos parte del c+di4o de nuestro pro4rama, y di4o parte, porque puede 6aber c+di4o en el "ormulario tambin. (as rutinas incluidas dentro de los m+dulos pueden ser ejecutadas desde los "ormularios de la aplicaci+n. (os m+dulos est7ndar (extensi+n de nombre de arc6ivo .bas) pueden contener declaraciones pFblicas o a nivel de m+dulo de tipos, constantes, variables, procedimientos externos y procedimientos pFblicos.

1.3.2.4-Archivos de Recursos.
(os arc6ivos de recursos (extensi+n de nombre de arc6ivo .res) contienen mapas de bits, cadenas de texto y otros datos que puede modi"icar sin volver a modi"icar el c+di4o. 1or ejemplo, si piensa traducir su aplicaci+n a un idioma extranjero, puede 4uardar todas las cadenas de texto de la inter"a) de usuario y los mapas de bits en un arc6ivo de recursos, y simplemente traducir el arc6ivo de recursos en ve) de la aplicaci+n completa. Un proyecto s+lo puede contener un arc6ivo de recursos.

1.3.2. -!ontroles Active ".


(os controles 3ctiveH (extensi+n de nombre de arc6ivo .ocx) son controles opcionales que se pueden a4re4ar al cuadro de 6erramientas y se pueden usar en "ormularios. %uando instala 0isual Basic, los arc6ivos que contienen los controles incluidos en 0isual Basic se copian a un directorio comFn (el subdirectorio J#indo$sJ!ystem en #indo$s E@). Existen controles 3ctiveH adicionales disponibles en diversas "uentes. Tambin puede crear sus propios controles mediante las ediciones 1ro"esional y Empresarial de 0isual Basic.

1.3.2.#-!ontroles estndar.

(os controles est7ndar los proporciona 0isual Basic. (os controles est7ndar, como %ommandButton (bot+n de comando) o &rame (marco), siempre est7n incluidos en el cuadro de 6erramientas, al contrario de lo que ocurre con los controles 3ctiveH y los objetos insertables, que se pueden a4re4ar y quitar del cuadro de 6erramientas.

$.) *ntorno de +esarrollo.


A%D%A0Barra de men1% ) A%D%B0Barra de Ferramientas%
En la ventana del pro4rama, podemos 6acer todas las "unciones normales que nos permite el compilador 0isual Basic.

A%D%C0Ventana de .ro)ecto%

1ulse ,%trlK<, (0er ./ 1royecto) y se abrir7 la ventana de proyectos (L). En esta ventana tenemos todos los "ic6eros del proyecto 0isual Basic en el que vamos a trabajar.

A%D%D0 Gormulario%

3l principio y por de"ecto, el pro4rama abre un "ormulario con el nombre &orm= que es la ventana #indo$s de nuestra aplicaci+n.

A%D%;0 Ventana de .ropiedades%

1ulsando la tecla ,&M,, aparecer7 la ventana de propiedades . Esta ventana es "undamental, ya que contiene todas las propiedades de cada objeto que insertaremos en nuestro "ormulario, as como las propiedades del "ormulario en s .

A%D%E0 Ca+a de Ferramientas%

(a ventana caja de 6erramientas contiene todos los objetos que podemos incluir en nuestro "ormulario. Esta ventana se puede abrir en el menF principal (0er ./ %aja de 6erramientas).

2-Programacin:

,.$ -undamentos de la %rogramacin.


%ada m+dulo de "ormulario contiene procedimientos de evento (secciones de c+di4o donde se colocan las instrucciones que se ejecutar7n como respuesta a eventos espec "icos). (os "ormularios pueden contener controles. 1or cada control de un "ormulario, existe el correspondiente conjunto de procedimientos de evento en el m+dulo de "ormulario. 3dem7s de procedimientos de evento, los m+dulos de "ormulario pueden contener procedimientos 4enerales que se ejecutan como respuesta a una llamada desde cualquier procedimiento de evento. El c+di4o que no est relacionado con un control o un "ormulario espec "ico se puede colocar en un tipo di"erente de m+dulo, un mdulo estndar (.bas). !e deben colocar en un m+dulo est7ndar los procedimientos que se puedan utili)ar como respuesta a eventos de diversos objetos, en lu4ar de duplicar el c+di4o en los procedimientos de evento de cada objeto.

B%A%A0 Como funciona una aplicaci(n controlada por e-entos%


Un evento es una acci+n reconocida por un "ormulario o un control. (as aplicaciones controladas por eventos ejecutan c+di4o Basic como respuesta a un evento. %ada "ormulario y control de 0isual Basic tiene un conjunto de eventos prede"inidos. !i se produce uno de dic6os eventos y el procedimiento de evento asociado tiene c+di4o, 0isual Basic llama a ese c+di4o. 3unque los objetos de 0isual Basic reconocen autom7ticamente un conjunto prede"inido de eventos, usted decide cu7ndo y c+mo se responder7 a un evento determinado. 3 cada evento le corresponde una secci+n de c+di4o (un procedimiento de evento). %uando desea que un control responda a un evento, escribe c+di4o en el procedimiento de ese evento. (os tipos de eventos reconocidos por un objeto var an, pero muc6os tipos son comunes a la mayor a de los controles. 1or ejemplo, la mayor a de los objetos reconocen el evento %lic2: si un usuario 6ace clic en un "ormulario, se ejecuta el c+di4o del procedimiento de evento %lic2 del "ormulario9 si un usuario 6ace clic en un bot+n de comando, se ejecuta el c+di4o del procedimiento de evento %lic2 del bot+n. El c+di4o en cada caso ser7 di"erente. -e aqu una secuencia t pica de eventos en una aplicaci+n controlada por eventos: 1. !e inicia la aplicaci+n y se car4a y muestra un "ormulario. 2. El "ormulario (o un control del "ormulario) recibe un evento. El evento puede estar causado por el usuario (por ejemplo, por la pulsaci+n de una tecla), por el sistema (por ejemplo, un evento de cron+metro) o, de "orma indirecta, por el c+di4o (por ejemplo, un evento (oad cuando el c+di4o car4a un "ormulario). 3. !i 6ay c+di4o en el procedimiento de evento correspondiente, se ejecuta. 4. (a aplicaci+n espera al evento si4uiente.

,., Varia&les.
B%B%A0 /lcance de las -ariables%
El alcance de una variable de"ine qu partes del c+di4o son conscientes de su existencia. %uando declara una variable en un procedimiento, s+lo el c+di4o de dic6o procedimiento puede tener acceso o modi"icar el valor de la variable9 tiene un alcance que es local al procedimiento. 3 veces, sin embar4o, se necesita utili)ar una variable con un alcance m7s 4eneral, como aquella cuyo valor est7 disponible para todos los procedimientos del mismo m+dulo o incluso para todos los procedimientos de toda la aplicaci+n. 0isual Basic le permite especi"icar el alcance de una variable cuando la declara. Establecimiento del alcance de las variables *ependiendo de c+mo se declara, una variable tiene como alcance un procedimiento (local) o un m+dulo.

Alcance
<i-el de procedimiento

Privado

P$%lico

Las -ariables son pri-adas del <o es aplicable% <o puede procedimiento en el que declarar -ariables p1blicas aparecen% dentro de un procedimiento%

<i-el de m(dulo

Las -ariables son pri-adas del Las -ariables est"n disponibles m(dulo en el que aparecen% para todos los m(dulos%

Varia&les utili.adas en un procedimiento


(as variables a nivel de procedimiento s+lo se reconocen en el procedimiento en el que se 6an declarado. !e las conoce tambin como variables locales. !e declaran mediante las palabras clave &im o 'tatic. 1or ejemplo: *im intTemp 3s ?nte4er N o bien N !tatic int1ermanent 3s ?nte4er (os valores de variables locales declaradas con 'tatic existen mientras se ejecuta la aplicaci+n, mientras que las variables declaradas con &im s+lo existen mientras se ejecuta el procedimiento. (as variables locales resultan una elecci+n apropiada para c7lculos temporales. 1or ejemplo, puede crear una docena de procedimientos distintos que conten4an una variable llamada intTemp. %omo cada intTemp se 6a declarado como una variable local, cada procedimiento s+lo reconoce su propia versi+n de intTemp. %ualquier procedimiento puede alterar el valor de su intTemp local sin que ello a"ecte a las variables intTemp de los dem7s procedimientos.

Varia&les utili.adas en un mdulo


*e "orma predeterminada, una variable a nivel de m+dulo est7 disponible para todos los procedimientos del m+dulo, pero no para el c+di4o de otros m+dulos. %ree variables a nivel de m+dulo declar7ndolas con la palabra clave Private en la secci+n *eclaraciones al principio del m+dulo. 1or ejemplo: 1rivate intTemp 3s ?nte4er 3 nivel de m+dulo, no 6ay di"erencia entre Private y &im, pero es pre"erible Private porque contrasta con Pu%lic y 6ace que el c+di4o sea m7s "7cil de comprender.

Varia&les utili.adas por todos los mdulos


1ara 6acer que una variable a nivel de m+dulo est disponible para otros m+dulos, utilice la palabra clave Pu%lic para declarar la variable. (os valores de las variables pFblicas est7n disponibles para todos los procedimientos de la aplicaci+n. 3l i4ual que todas las variables a nivel de m+dulo, las variables pFblicas se declaran en la secci+n *eclaraciones al principio del m+dulo. 1or ejemplo: 1ublic intTemp 3s ?nte4er (ota Do puede declarar variables pFblicas en un procedimiento, s+lo en la secci+n *eclaraciones de un m+dulo.

B%B%B0 9eclaraci(n (a "orma de declarar las variables es la si4uiente:


&im) Pu%lic) 'tatic nombreAvariable As tipo &im* 3l declarar una variable con esta palabra estamos diciendo que la variable sea local al 7mbito en que se declara. 1uede ser dentro de un procedimiento o dentro de un "ormulario, de esta "orma no ser a accesible desde los dem7s procedimientos o "ormularios. Pu%lic: (as variables declaradas ser7n publicas y podr7n estar accesibles desde todos los "ormularios de la aplicaci+n. 1ara conse4uirlo tendremos que declararlas en un m+dulo de c+di4o, no en la secci+n declarations de cualquier "ormulario de los que conste la aplicaci+n. 1ara crear un m+dulo de c+di4o en el menF principal de 0isual Basic marcamos en 1<5IE%T5O?D!ET3< GP*U(5 y aparecer7 junto a los dem7s "ormularios de la ventana de proyecto aunque con un icono distinto indicando que se trata de un m+dulo de c+di4o.

'tatic* %on esta "orma de declarar variables conse4uiremos que las variables locales no se creen y se destruyan al entrar y salir de los procedimientos donde "ueron declaradas sino que se manten4a su valor durante todo el periodo de ejecuci+n de la aplicaci+n. *e esta "orma a entrar en al4Fn procedimiento las variables recuerdan el valor que ten an cuando se sali+ de l.

B%B%C0 =ipos de -ariables


1<?03TE+IP, B55(E3D BITE ?DTE:E< (5D: !?D:(E *5UB(E %U<<ED%I !T<?D: *3TE !,M-(+ARI, !+lo admite Q valores T<UE o &3(!E admite valores entre > y Q@@ admite valores entre .LQRST y LQRSR admite valores entre .Q.=MR.MTL.SMT y Q.=MR.MTL.SMR admite valores decimales con precisi+n simple admite valores decimales de doble precisi+n v7lido para valores de tipo moneda cadenas de caracteres "ec6as, permite operar con ellas

B%B%D0 5atrices
1ara declarar matrices debemos colocar entre parntesis el nFmero de elementos de los que constar7 a continuaci+n del nombre de la variable: &im medidas(E) as inte4er *e esta "orma tenemos una matri) de => elementos identi"icados del > al E 1odemos obli4ar a que el primer elemento de una matri) ten4a el ndice con valor =. Esto lo 6aremos colocando la instrucci+n option base = en la secci+n declarations de nuestro "ormulario. Tambin podemos indicar los l mites in"erior y superior de la matri): &im medidas(@ to =M) as inte4er es una matri) de => elementos cuyos indices van del @ al =M (as matrices multidimensionales se declaran de la si4uiente "orma: &im medidas(= to =>, = to =>) as inte4er CONSIDERACIONES 3l trabajar con 0isual Basic es pre"erible que activemos la opci+n que nos obli4ue a declarar todas las variables que utilicemos, de esta "orma nos a6orraremos errores inesperados como el de trabajar con una variable ya utili)ada anteriormente producindose un con"licto d "icil de resolver. En cambio si intentamos declarar Q variables con el mismo nombre, en el mismo "ormulario o procedimiento se produce un error en tiempo de edici+n avis7ndonos de la situaci+n. 1ara activar esta opci+n debemos ir a la opci+n del menF -erramientas y 5pciones para que apare)ca un cuadro de dialo4o como este.

1<?03TE (a opci+n que nos interesa activar es Requerir declaracin de variables que en este caso ya lo est7. *e esta "orma en cada secci+n declarations de cada "ormulario aparecer7 la sentencia option explicit 5tra opci+n que es interesante activar, es la de Guardar los cambios en la "ic6a entorno, la cual te 4uarda una copia del c+di4o antes de ejecutarlo por si acaso lue4o no podemos, se bloquea la aplicaci+n etc... no suele pasar pero nunca se sabe. *e esta "orma te ase4uras que lo Fltimo que 6ayas ejecutado lo tienes 4uardado en el disco. (a opci+n Comprobacin automtica de sinta is normalmente viene activada por de"ecto, no conviene desactivarla puesto que te avisa de errores de sintaxis con"orme vas escribiendo el c+di4o: !i te "alta el t6en despus del i", el do antes del $6ile etc...

,.( %rocedimientos y #unciones.


B%C%A0Introducci(n a los .rocedimientos%
1uede simpli"icar las tareas de pro4ramaci+n si divide los pro4ramas en componentes l+4icos m7s peque8os. Estos componentes, llamados procedimientos, pueden convertirse en bloques b7sicos que le permiten mejorar y ampliar 0isual Basic. (os procedimientos resultan muy Ftiles para condensar las tareas repetitivas o compartidas, como c7lculos utili)ados "recuentemente, manipulaci+n de texto y controles, y operaciones con bases de datos. -ay dos ventajas principales cuando se pro4rama con procedimientos: (os procedimientos le permiten dividir los pro4ramas en unidades l+4icas discretas, cada una de las cuales se puede depurar m7s "7cilmente que un pro4rama entero sin procedimientos. (os procedimientos que se utili)an en un pro4rama pueden actuar como bloques de construcci+n de otros pro4ramas, normalmente con pocas o nin4una modi"icaci+n. En 0isual Basic se utili)an varios tipos de procedimientos: 1rocedimientos 'u% que no devuelven un valor.

1rocedimientos Function que devuelven un valor (normalmente conocidos como "unciones).

B%C%B0 .rocedimientos%
Un procedimiento 'u% es un bloque de c+di4o que se ejecuta como respuesta a un evento. 3l dividir el c+di4o de un m+dulo en procedimientos 'u%, es m7s sencillo encontrar o modi"icar el c+di4o de la aplicaci+n. (a sintaxis de un procedimiento 'u% es la si4uiente: .Private)Pu%lic/.'tatic/'u% nombre_procedimiento (argumentos) instrucciones -nd 'u% %ada ve) que se llama al procedimiento se ejecutan las instrucciones que 6ay entre 'u% y -nd 'u%. !e pueden colocar los procedimientos 'u% en m+dulos est7ndar, m+dulos de clase y m+dulos de "ormulario. *e "orma predeterminada, los procedimientos 'u% son Pu%lic en todos los m+dulos, lo que si4ni"ica que se les puede llamar desde cualquier parte de la aplicaci+n. (os argumentos de un procedimiento son como las declaraciones de variables9 se declaran valores que se pasan desde el procedimiento que 6ace la llamada. <esulta muy Ftil en 0isual Basic distin4uir entre dos tipos de procedimientos 'u%, procedimientos generales y procedimientos de evento.

%rocedimientos generales
Un procedimiento 4eneral indica a la aplicaci+n c+mo reali)ar una tarea espec "ica. Una ve) que se de"ine un procedimiento 4eneral, se le debe llamar espec "icamente desde la aplicaci+n. 1or el contrario, un procedimiento de evento permanece inactivo 6asta que se le llama para responder a eventos provocados por el usuario o desencadenados por el sistema. U1or qu crear procedimientos 4eneralesV Una ra)+n es que muc6os procedimientos de evento distintos pueden necesitar que se lleven a cabo las mismas acciones. Es una buena estrate4ia de pro4ramaci+n colocar las instrucciones comunes en un procedimiento distinto (un procedimiento 4eneral) y 6acer que los procedimientos de evento lo llamen. Esto elimina la necesidad de duplicar c+di4o y tambin 6ace que la aplicaci+n sea m7s "7cil de mantener.

%rocedimientos de e!ento
%uando un objeto en 0isual Basic reconoce que se 6a producido un evento, llama autom7ticamente al procedimiento de evento utili)ando el nombre correspondiente al evento. %omo el nombre establece una asociaci+n entre el objeto y el c+di4o, se dice que los procedimientos de evento est7n adjuntos a "ormularios y controles. Un procedimiento de evento de un control combina el nombre real del control (especi"icado en la propiedad (ame), un car7cter de subrayado (A) y el nombre del evento. 1or ejemplo, si desea que un bot+n de comando llamado cmd1lay llame a un procedimiento de evento cuando se 6a4a clic en l, utilice el procedimiento cmd1layA%lic2. Un procedimiento de evento de un "ormulario combina la palabra ,&orm,, un car7cter de subrayado y el nombre del evento. !i desea que un "ormulario llame a un procedimiento de evento cuando se 6ace clic en l, utilice el procedimiento &ormA%lic2. (%omo los controles, los "ormularios tienen nombres Fnicos, pero no se utili)an en los nombres de los procedimientos de evento.) Todos los procedimientos de evento utili)an la misma sintaxis 4eneral. 'inta0is de un evento de control 'inta0is de un evento de 1ormulario

Private 'u% nombrecontrol_nombreevento (argumentos ) instrucciones -nd 'u%

Private 'u% FormAnombreevento (argumentos) instrucciones -nd 'u% 3unque puede escribir procedimientos de evento nuevos, es m7s sencillo utili)ar los procedimientos de c+di4o que "acilita 0isual Basic, que incluyen autom7ticamente los nombres correctos de procedimiento. 1uede seleccionar una plantilla en la ventana Editor de c+di4o si selecciona un objeto en el cuadro ,%2eto y selecciona un procedimiento en el cuadro Procedimiento. Tambin es conveniente establecer la propiedad (ame de los controles antes de empe)ar a escribir los procedimientos de evento para los mismos. !i cambia el nombre de un control tras vincularle un procedimiento, deber7 cambiar tambin el nombre del procedimiento para que coincida con el nuevo nombre del control. *e lo contrario, 0isual Basic no ser7 capa) de 6acer coincidir el control con el procedimiento. %uando el nombre de un procedimiento no coincide con el nombre de un control, se convierte en un procedimiento 4eneral.

B%C%C0 Gunciones%
(a sintaxis de un procedimiento Function es la si4uiente: .Private)Pu%lic/.'tatic/Function nombre_procedimiento (argumentos) WAs tipoX instrucciones -nd Function 3l i4ual que un procedimiento 'u%, un procedimiento Function es un procedimiento di"erente que puede tomar ar4umentos, reali)ar una serie de instrucciones y cambiar el valor de los ar4umentos. 3 di"erencia de los procedimientos 'u%, los procedimientos Function pueden devolver un valor al procedimiento que reali)a la llamada. -ay tres di"erencias entre los procedimientos 'u% y Function: :eneralmente, se llama a una "unci+n incluyendo el nombre y los ar4umentos del procedimiento en la parte derec6a de una instrucci+n o expresi+n mayor (valor_retorno = funcin()). (os procedimientos Function tienen tipos de datos, al i4ual que las variables. Esto determina el tipo del valor de retorno. (En ausencia de la cl7usula As, el tipo es el tipo predeterminado 3ariant.) !e devuelve un valor asi4n7ndole al propio nombre_procedimiento. %uando el procedimiento Function devuelve un valor, se puede convertir en parte de una expresi+n mayor. 1or ejemplo, podr a escribir una "unci+n que calculara el tercer lado, o 6ipotenusa, de un tri7n4ulo rect7n4ulo, dados los valores de los otros dos lados: &unction -ipotenusa (3 3s ?nte4er, B 3s ?nte4er) 3s !trin4 -ipotenusa ; !qr(3 Y Q K B Y Q) End &unction !e llama a un procedimiento Function de la misma "orma que a las "unciones incorporadas en 0isual Basic: (abel=.%aption ; -ipotenusa(%?nt(Text=.Text),%?nt(TextQ.Text)) strH ; -ipotenusa(#idt6, -ei46t)

B%C%D0 Llamadas a .rocedimientos%


Un procedimiento 'u% di"iere de un procedimiento Function en que al procedimiento 'u% no se le puede llamar mediante su nombre en una expresi+n. (a llamada a un procedimiento 'u% es una instrucci+n Fnica. 3dem7s, un procedimiento 'u% no devuelve un valor en su nombre como 6ace una "unci+n. !in embar4o, al i4ual que Function, un procedimiento 'u% puede modi"icar los valores de las variables que se le pasan. -ay dos "ormas de llamar a un procedimiento 'u%: Z 3mbas instrucciones llaman a un !ub denominado Gi1roc. %all Gi1roc (1rimer3r4umento, !e4undo3r4umento)

Gi1roc 1rimer3r4umento, !e4undo3r4umento 5bserve que cuando utili)a la sintaxis !all, debe poner los ar4umentos entre parntesis. !i omite la palabra clave !all, deber7 tambin omitir los parntesis alrededor de los ar4umentos.

B%C%;0 Llamadas a Gunciones%


Dormalmente se llama a un procedimiento de "unci+n que se 6a escrito de la misma "orma en que se llama a una "unci+n intr nseca de 0isual Basic como A%s9 es decir, utili)ando su nombre en una expresi+n: Z (as instrucciones si4uientes llamar an a una "unci+n A Z llamada To*ec. 1rint => [ 3dec H ; 3dec ?" 3dec ; => T6en *ebu4.1rint ,&uera del intervalo, H ; 5tra&unci+n(=> [ 3dec) Tambin es posible llamar a una "unci+n i4ual que se llama a un procedimiento 'u%. (as instrucciones si4uientes llaman a la misma "unci+n: %all Iear(Do$) Iear Do$ %uando llama a una "unci+n de esta manera, 0isual Basic desec6a el valor de retorno.

B%C%E0 .asa+e de ar!umentos a los procedimientos ) funciones%


Dormalmente el c+di4o de un procedimiento necesita cierta in"ormaci+n sobre el estado del pro4rama para reali)ar su trabajo. Esta in"ormaci+n consiste en variables que se pasan al procedimiento cuando se le llama. %uando se pasa una variable a un procedimiento, se llama argumento.

/ipos de datos de los argumentos


(os ar4umentos de los procedimientos que escriba tienen el tipo de dato 3ariant de "orma predeterminada. !in embar4o, puede declarar otros tipos de datos para los ar4umentos. 1or ejemplo, la "unci+n si4uiente acepta una cadena y un entero: &unction \u%omer (* a!emana 3s !trin4, -ora 3s ?nte4er) 3s !trin4 Z *evuelve el menF del almuer)o bas7ndose en el d a y la 6ora. ?" * a!emana ; ,0iernes, t6en \u%omer ; ,1escado, Else \u%omer ; ,1ollo, End ?" ?" -ora / M T6en \u%omer ; ,*emasiado tarde, End &unction

%aso de argumentos por !alor


!+lo se pasa una copia de la variable cuando se pasa un ar4umento por valor. !i el procedimiento cambia el valor, el cambio a"ecta s+lo a la copia y no a la variable propiamente dic6a. Utilice la palabra clave 453al para indicar un ar4umento pasado por valor. 1or ejemplo: !ub %uentas (By0al intDum%uenta as ?nte4er)

. . Z 1on4a aqu sus instrucciones. . End !ub

%aso de argumentos por re#erencia


1asar ar4umentos por re"erencia le da al procedimiento acceso al contenido real de la variable en su ubicaci+n de direcci+n de memoria. %omo resultado, el procedimiento al que se 6a pasado el valor de la variable se puede modi"icar de "orma permanente. (a "orma predeterminada de pasar valores en 0isual Basic es por re"erencia. !i especi"ica el tipo de dato de un ar4umento que se pasa por re"erencia, debe pasar un valor de ese tipo para el ar4umento. 1uede eludirlo si pasa una expresi+n en ve) de un tipo de dato como ar4umento. 0isual Basic evalFa la expresi+n y la pasa como el tipo requerido si puede. (a "orma m7s sencilla de convertir una variable en una expresi+n es ponerla entre parntesis. 1or ejemplo, para pasar una variable declarada como entero a un procedimiento que espera una cadena como ar4umento, deber a 6acer lo si4uiente: !ub 1rocedimiento\ue(lama () *im intH 3s ?nte4er intH ; =Q [ L &oo(intH) End !ub !ub &oo(Bar 3s !trin4) Gs4Box Bar End !ub

ZEl valor de Bar es la cadena ,LS,.

,.) *structuras de Control 0Repeticin y +ecisin1.


B%D%A09o 2hile H Loop I 9o H Loop 2hile%
Utilice el bucle &o para ejecutar un bloque de instrucciones un nFmero inde"inido de veces. -ay al4unas variantes en la instrucci+n &o...6oo7, pero cada una evalFa una condici+n numrica para determinar si continFa la ejecuci+n. %omo ocurre con I1...+hen, la condicin debe ser un valor o una expresi+n que d como resultado False (cero) o +rue (distinto de cero). En el ejemplo de &o...6oo7 si4uiente, las instrucciones se ejecutan siempre y cuando condicin sea +rue: &o 8hile condicin instrucciones 6oo7 %uando 0isual Basic ejecuta este bucle &o, primero evalFa condicin. !i condicin es False (cero), se salta todas las instrucciones. !i es +rue (distinto de cero), 0isual Basic ejecuta las instrucciones, vuelve a la instrucci+n &o 8hile y prueba la condici+n de nuevo. 1or tanto, el bucle se puede ejecutar cualquier nFmero de veces, siempre y cuando condicin sea distinta de cero o +rue. Dunca se ejecutan las instrucciones si condicin es False inicialmente. 1or ejemplo, este procedimiento cuenta las veces que se repite una cadena de destino dentro de otra cadena repitiendo el bucle tantas veces como se encuentre la cadena de destino: &unction %ontar%adenas (cadenalar4a, destino) *im posici+n, contador posici+n ; =

*o #6ile ?n!tr(posici+n, cadenalar4a, destino) posici+n ; ?n!tr(posici+n, cadenalar4a, destino) K= contador ; contador K = (oop %ontar%adenas ; contador End &unction !i la cadena de destino no est7 en la otra cadena, In'tr devuelve > y no se ejecuta el bucle. 5tra variante de la instrucci+n &o...6oo7 ejecuta las instrucciones primero y prueba condicin despus de cada ejecuci+n. Esta variaci+n 4aranti)a al menos una ejecuci+n de instrucciones: &o instrucciones 6oo7 8hile condicin Hace el bucle cero o ms veces Do Until condicin instrucciones Loo Hace el bucle al menos una vez Do instrucciones Loo Until condicin

B%D%B0 Gor H <e4t%


(os bucles &o "uncionan bien cuando no se sabe cu7ntas veces se necesitar7 ejecutar las instrucciones del bucle. !in embar4o, cuando se sabe que se van a ejecutar las instrucciones un nFmero determinado de veces, es mejor ele4ir el bucle For9(e0t. 3 di"erencia del bucle &o, el bucle For utili)a una variable llamada contador que incrementa o reduce su valor en cada repetici+n del bucle. (a sintaxis es la si4uiente: For contador ; iniciar +o finalizar W'te7 incrementoX instrucciones (e0t WcontadorX (os ar4umentos contador, iniciar, finalizar e incremento son todos numricos. (ota El ar4umento incremento puede ser positivo o ne4ativo. !i incremento es positivo, iniciar debe ser menor o i4ual que finalizar o no se ejecutar7n las instrucciones del bucle. !i incremento es ne4ativo, iniciar debe ser mayor o i4ual que finalizar para que se ejecute el cuerpo del bucle. !i no se establece 'te7, el valor predeterminado de incremento es =. 3l ejecutar el bucle For, 0isual Basic: 1. Establece contador al mismo valor que iniciar. 2. %omprueba si contador es mayor que finalizar. !i lo es, 0isual Basic sale del bucle. (!i incremento es ne4ativo, 0isual Basic comprueba si contador es menor que finalizar.) 3. Ejecuta instrucciones. 4. ?ncrementa contador en = o en instrucciones, si se especi"ic+. . <epite los pasos Q a M. Este c+di4o imprime los nombres de todas las "uentes de pantalla disponibles: 1rivate !ub &ormA%lic2 () *im ? 3s ?nte4er &or i ; > To !creen.&ont%ount 1rint !creen.&onts(i) Dext End !ub

En la aplicaci+n de ejemplo 0%<, el procedimiento -i46li46tButton utili)a un bucle For...(e0t para pasar por la colecci+n de controles del "ormulario 0%< y mostrar el control 'ha7e apropiado: !ub -i46li46tButton(Gy%ontrol 3s 0ariant) *im i 3s ?nte4er &or i ; > To "rm0%<.%ontrols.%ount . = ?" Type5" "rm0%<.%ontrols(i) ?s !6ape T6en ?" "rm0%<.%ontrols(i).Dame ; Gy%ontrol T6en "rm0%<.%ontrols(i).0isible ; True Else "rm0%<.%ontrols(i).0isible ; &alse End ?" End ?" Dext End !ub

,.).( 2# 3 *lse 3 *nd 2#.


Use la estructura I1...+hen para ejecutar una o m7s instrucciones basadas en una condici+n. 1uede utili)ar la sintaxis de una l nea o un bloque de varias l neas: I1 condicin +hen instruccin I1 condicin +hen instrucciones -nd I1 ondicin normalmente es una comparaci+n, pero puede ser cualquier expresi+n que d como resultado un valor numrico. 0isual Basic interpreta este valor como +rue o False9 un valor numrico cero es False y se considera +rue cualquier valor numrico distinto de cero. !i condicin es +rue, 0isual Basic ejecuta todas las instrucciones que si4uen a la palabra clave +hen. 1uede utili)ar la sintaxis de una l nea o de varias l neas para ejecutar una instrucci+n basada en una condici+n (estos dos ejemplos son equivalentes): ?" cualquier&ec6a ] Do$ T6en cualquier&ec6a ; Do$ ?" cualquier&ec6a ] Do$ T6en cualquier&ec6a ; Do$ End ?" 5bserve que el "ormato de una Fnica l nea de I1...+hen no utili)a la instrucci+n -nd I1. !i desea ejecutar m7s de una l nea de c+di4o cuando condicin sea +rue, debe utili)ar la sintaxis de bloque de varias l neas I1...+hen...-nd I1. ?" cualquier&ec6a ] Do$ T6en cualquier&ec6a ; Do$ Timer=.Enabled ; &alse End ?"

Z *esactiva el control Timer.

2#.../hen...*lse
Utilice un bloque I1...+hen...-lse para de"inir varios bloques de instrucciones, uno de los cuales se ejecutar7: I1 condicin! +hen Wbloque de instrucciones !X

W-lse Wbloque de instrucciones nXX -nd I1 0isual Basic evalFa primero condicin!. !i es False, 0isual Basic ejecuta el bloque de instrucciones correspondientes a -lse y despus ejecuta el c+di4o que si4ue a -nd I1. 1or ejemplo, la aplicaci+n podr a reali)ar distintas acciones dependiendo del control en que se 6aya 6ec6o clic de una matri) de controles de menF: 1rivate !ub mnu%utA%lic2 (?ndex 3s ?nte4er) ?" ?ndex ; > T6en %opy3ctive%ontrol %lear3ctive%ontrol Else 1aste3ctive%ontrol End ?" End !ub

Z %omando %ortar.

Z %omando 1e4ar.

B%D%D0 ,elect 0 Case


0isual Basic proporciona la estructura 'elect !ase como alternativa a I1...+hen...-lse para ejecutar selectivamente un bloque de instrucciones entre varios bloques de instrucciones. (a instrucci+n 'elect !ase o"rece posibilidades similares a la instrucci+n I1...+hen...-lse, pero 6ace que el c+di4o sea m7s le4ible cuando 6ay varias opciones. (a estructura 'elect !ase "unciona con una Fnica expresi+n de prueba que se evalFa una ve) solamente, al principio de la estructura. 0isual Basic compara el resultado de esta expresi+n con los valores de cada !ase de la estructura. !i 6ay una coincidencia, ejecuta el bloque de instrucciones asociado a ese !ase: 'elect !ase expresin_prueba W!ase lista_expresiones! Wbloque de instrucciones !XX W!ase lista_expresiones" Wbloque de instrucciones "XX . . . W!ase -lse Wbloque de instrucciones nXX -nd 'elect %ada lista_expresiones es una lista de uno o m7s valores. !i 6ay m7s de un valor en una lista, se separan los valores con comas. %ada bloque de instrucciones contiene cero o m7s instrucciones. !i m7s de un !ase coincide con la expresi+n de prueba, s+lo se ejecutar7 el bloque de instrucciones asociado con la primera coincidencia. 0isual Basic ejecuta las instrucciones de la cl7usula (opcional) !ase -lse si nin4Fn valor de la lista de expresiones coincide con la expresi+n de prueba. 1or ejemplo, supon4a que a4re4a otro comando al menF -dicin en el ejemplo I1...+hen...-lse. 1odr a a4re4ar otra cl7usula -lseI1 o podr a escribir la "unci+n con 'elect !ase: 1rivate !ub mnu%utA%lic2 (?ndex 3s ?nte4er) !elect %ase ?ndex %ase > %opy3ctive%ontrol %lear3ctive%ontrol

Z %omando %ortar. Z (lama a procedimientos 4enerales.

%ase = %opy3ctive%ontrol %ase Q %lear3ctive%ontrol %ase L 1aste3ctive%ontrol %ase Else "rm&ind.!6o$ End !elect End !ub

Z %omando %opiar. Z %omando Borrar. Z %omando 1e4ar.

Z Guestra el cuadro de di7lo4o Buscar.

5bserve que la estructura 'elect !ase evalFa una expresi+n cada ve) al principio de la estructura.

!- "ontroles (.$ Controles &4sicos


0amos a ver los si4uientes puntos:

Introduccin al uso de controles Control !e t"o # Control $abel Control Command"utton Control Option"utton Reali%ac&on de una peque'a aplicacin de e(emplo

3ntes de empe)ar a conocer los controles b7sicos veamos cuales son sus caracter sticas 4enerales:

Pro7iedades:Todos los controles disponen de una serie de propiedades las cuales podemos cambiar al incluirlos en nuestras aplicaciones. Ejemplos de propiedades son el color, el tipo de letra, el nombre, el texto, etc... Metodos* !on procedimientos asociados a los controles, es decir, rutinas ya establecidas que podemos invocar desde nuestras aplicaciones para que se realice al4una operaci+n sobre el control. 1or ejemplo el control (ist0ie$ ( la lista de arc6ivos que aparece en el explorador de $indo$s) dispone del mtodo order que te ordena los datos aparecidos en la lista. -ventos* !on acciones que pueden ser motivadas por el propio usuario o por mismo sistema operativo. Ejemplos pueden ser el movimiento del rat+n o 6acer clic2 sobre su bot+n. En 0isual Basic di4amos que se utili)a la pro4ramaci+n orientada a eventos, lo cual es una de las di"erencias m7s importantes respecto a la pro4ramaci+n lineal de G! *5!. Do necesitamos detectar cuando se 6a producido un evento determinado, #indo$s lo detecta autom7ticamente. (os eventos ya estan de"inidos, son bastantes y cada control cuenta con los suyos propios, aunque son muy parecidos. (o Fnico que tendremos que 6acer es asociar el c+di4o necesario al evento que necesitemos tratar.

#ext$ox
Gediante este control podremos reali)ar tanto la entrada como la salida de datos en nuestras aplicaciones. Do 6ace "alta que indiquemos las coordenadas de la situaci+n del "ormulario en pantalla, simplemente tendremos que marcar sobre el control de la caja de 6erramientas y dibujarlo con el tama8o que queramos en nuestro "ormulario. )RO)IEDADES (as propiedades de las que dispone el control son las si4uientes:(para obtener el cuadro de propiedades, seleccionar el control y pulsar F4 o pulsar con el boton derec6o para obtener el menF contextual y marcar )ropierties)

+e0t* 3qu indicamos el texto que aparecer7 en el control. 1odemos asi4narle cualquier texto en tiempo de dise8o o ejecuci+n. Tambin podemos tomar el texto que 6aya introducido el usuario para tratarlo durante la ejecuci+n. (ame* Esta propiedad la tienen todos los controles, el nombre que viene por de"ecto en este caso Text= y es el nombre con el que se conocer7 el control cuando lo utilicemos en el c+di4o. En un mismo "ormulario no puede 6aber Q controles con el mismo nombre. %onviene poner un nombre que represente la "unci+n que tiene el control en la aplicaci+n para que el c+di4o quede m7s claro. Ejemplo, si en el textbox vamos a introducir la direcci+n de una persona podemos asi4narle a esta propiedad el valor *irecci+n. Multi6ine* 1ermite que introdu)camos varias lineas de texto en el control en lu4ar de s+lo una. Ali:nment* 3lineaci+n que tendr7 el texto dentro del control: i)quierda, centro o derec6a. 1ara que "uncione la propiedad Gulti(ine debe estar con el valor
true.

6oc;ed* !i esta con valor true bloquea el control, es decir, el usuario no puede introducir ni modi"icar el texto que conten4a. Dos puede servir para utili)ar el control como salida de datos sin que el usuario pueda modi"icarlos por error.
5tras propiedades que son comunes a la mayoria de los controles:

4ac;color* color de "ondo. Forecolor* color de letra. Font* tipo y tama8o de letra.
*E!ODOS <ecordemos que por mtodos se entienten los procedimientos o "unciones asociados a un control, los cuales nos permiten reali)ar ciertas operaciones Ftiles sobre dic6o control: Ej. ordenar sus elementos, buscar un dato, etc.. 1ues bien, los controles b7sicos que vamos a ver en este cap tulo Fnicamente contienen mtodos avan)ados que no vamos a anali)ar por a6ora, ya que son mtodos que no se suelen utili)ar. G7s adelante cuando veamos otros tipos de controles estudiaremos cuales son los mtodos que nos podr7n servir. !i al4uien est7 interesado en conocer todas las caracter sticas de los controles puede 6acerlo mirando en la ayuda que proporciona 0B, 6aciendo clic2 sobre cualquier control de la caja de 6erramientas y pulsando a continuaci+n &= obtendr7 ayuda re"erente a ese control donde aparecer7n todas sus propiedades, metodos y eventos.

E+EN!OS (os eventos son acciones que se pueden reali)ar en cualquier control: clic2, doble clic2, movimiento del rat+n. 3 estos eventos se les puede asociar c+di4o para que se ejecute al producir el evento.

MouseMove: al mover el raton por encima del control. Mousedo<n* al pulsar cualquier boton del raton !han:e* al cambiar el contenido del control !lic;* al 6acer clic2 con el bot+n i)quierdo del rat+n sobre el control &ou%leclic;* al 6acer doble clic2 con el con el bot+n i)quierdo del rat+n sobre el control Get1ocus* este evento se activa cuando el control recibe el en"oque, es decir, cuando se activa el control en tiempo de ejecuci+n para introducir datos en l o reali)ar al4una operaci+n. 6ost1ocus* Es el contrario del anterior evento, se activa cuando el control pierde el en"oque, es decir, se pasa a otro control para se4uir introduciendo datos.

-=-MP6,
0amos a probar el uso del control #ext$ox mediante un peque8o ejemplo en el que teniendo un Fnico control de este tipo en un "ormulario, lo pro4ramaremos de "orma que al pasar el rat+n sobre el control (evento mousemove) aparecer7 en el "ormulario el texto que conten4a.

5bservamos que al situar el control en el "ormulario aparece por de"ecto el texto +e0t1. 1ara que no apare)ca ese texto al ejecutar la aplicaci+n, debemos cambiar la propiedad +e0t pulsando F4 y colocar el texto que queramos o no colocar nada. (o que queremos 6acer es que cada ve) que movamos el raton por el control apare)ca su contenido en el "ormulario. Entonces lo que 6abr7 que 6acer abrir la ventana de c+di4o, seleccionando el control y pulsando F>? o con el bot+n derec6o del rat+n y la opci+n +ie, code del menF contextual. Este proceso nos llevar7 al cuadro de la ima4en si4uiente.

(o que tendremos que 6acer es seleccionar el evento que necesitemos de la secci+n Proc, en nuestro caso mousemove y a continuaci+n teclear el codi4o correspondiente: (a instrucci+n print visuali)a un texto en el "ormulario y si le ponemos te0t1.te0t le decimos que nos muestre la propiedad +e0t del control +e0t1 que ese ser7 el nombre que tendr7 el control por de"ecto si no lo 6emos cambiado en la propiedad name. 3l ejecutar esta peque8a aplicaci+n pulsando F observaremos como aparece en el "ormulario lo que 6ayamos tecleado en el control cada ve) que movemos el raton sobre el #extbox. 1odemos modi"icar el pro4rama para que responda a cualquier otro evento sin m7s que seleccionarlo en la secci+n Proc e introduciendo el codi4o que sea necesario.

%abel
Este control es tambin uno de los m7s utili)ados, aunque su utilidad queda restrin4ida a la visuali)aci+n de datos en el mismo, no permitiendo la introducci+n de datos por parte del usuario. (a "orma de utili)arlo es similar a la del control anterior, dibujar el control en el "ormulario con el tama8o que queramos y asi4narle un texto en tiempo de dise8o o de ejecuci+n esta ve) sin utili)ar la propiedad text puesto que no la incorpora, sino utili)ando la propiedad caption. Este control sirve para mostrar mensajes en nuestro "ormulario que orienten al usuario sobre la utilidad de los dem7s controles que ten4amos en la aplicaci+n o para indicarnos acciones que podemos reali)ar. En el ejemplo anterior donde aparec a un textbox en el "ormulario, 6ubiera quedado mejor con un mensaje aclaratorio contenido en un control label:

)RO)IEDADES

!a7tion* Es el texto que contendr7 el control. Ali:nment* 3lineaci+n del texto contenido en el control, no necesita que est activada nin4una otra propiedad. 4order't5le: !i queremos que apare)ca un borde alrededor del control activaremos esta propiedad.
1ara este control no se suelen utili)ar los eventos ya que su contenido suele cambiar poco a lo lar4o de la ejecuci+n de la aplicaci+n. *e todas "ormas los eventos son casi los mismos del control textbox excepto que no dispone de los eventos GetFocus y 6ostFocus ya que a este control no se le puede dar el en"oque. En la parte "inal de este capitulo veremos un ejemplo donde se muestra el "uncionamiento de todos los controles que vamos a ir viendo.1or a6ora a ver si conse4uis que a6ora el mensaje no apare)ca en el "ormulario sino en un se4undo label situado en el "ormulario, dejando un control label que muestre el mensaje aclaratorio que 6emos visto antes.

ommand$utton
Este control es el t pico bot+n que aparece en todas las aplicaciones y que al 6acer clic2 sobre l nos permite reali)ar al4una operaci+n concreta, normalmente 3ceptar o %ancelar. 3unque se4Fn el c+di4o que le asociemos podremos reali)ar las operaciones que queramos. En el ejemplo anterior podemos a8adir un control de este tipo para salir de la aplicaci+n sin tener pulsar sobre la equis de la esquina superior derec6a.

1ero s+lo con introducir un control de este tipo con el texto salir que se introduce a traves de la propiedad caption no basta. -abr7 que asociarle un c+di4o que nos permita salir de la aplicaci+n en el evento adecuado. I el evento por excelencia de este control es clic2. 3s pues accederemos al c+di4o del control

y la sentencia nos permitir7 salir de la aplicaci+n es End, simplemente tecleamos esa palabra en el evento clic2 y comprobar que realmente "inali)aremos nuestra aplicaci+n al pulsar sobre dic6o bot+n. )RO)IEDADES

!a7tion* 3qui pondremos el letrero que queremos que apae)ca en el bot+n: aceptar, cancelar, salir, etc... -na%led* Esta es una nueva propiedad, cuando su valor es true el bot+n "unciona normalmente, cuando su valor es "alse el boton se encuentra desactivado, no responde a los eventos producidos sobre l y el texto aparece en un 4ris claro advirtiendonos de su estado. 1odemos utili)ar esta propiedad para activar o desactivar un boton dependiendo del estado de otros controles. 1or ejemplo, en un boton 3ceptar, no activarlo 6asta que se 6aya introducido una cantidad en un control textbox, ya que ese bot+n nos calcular7 el ?03 de la cantidad.
E+EN!OS

!lic;* Es el evento tipico de este control y el que m7s se utili)a. MouseMove: %omo sabemos detecta el movimiento del raton sobre el control. 1uede servir para que apare)ca un mensaje en un control (abel que nos aporte in"ormaci+n sobre la utilidad del control ampliando el texto que 6ayamos colocado como caption del commandbutton.

&ption$utton
Este control nos permite ele4ir una opci+n entre varias de las que se nos plantean. %ada opci+n ser7 un control optionbutton di"erente. &acilita la introducci+n de datos por parte del usuario:

*e todas las opciones que se nos o"rece, en este caso los M colores, s+lo podremos activar una. !i activamos cualquier otra opci+n, se desactivar7 autom7ticamente la Fltima que ten amos activada. El marco que est7 alrededor de los M controles optionbutton se trata del control -rame , es opcional, aunque es conviente colocarlo siempre que 6a4amos uso de las opciones. Do s+lo por motivos de presentaci+n sino porque de esta manera podremos establecer 4rupos de controles optionbutton independientes en los que en cada 4rupo s+lo pueda 6aber una opcio+n activada a la ve). Tambin, al mover el marco se mover7n los controles incluidos en l "acilit7ndonos las modi"icaciones. 1ara que los controles &ptionbutton queden en4lobados dentro de un control 'rame, primero tendremos que colocar el control 'rame en el "ormulario con el tama8o adecuado y despues ir colocando los controles &ptionbutton dentro del 'rame. *el control &rame la Fnica propiedad que nos interesar7 es caption, que es el texto que aparecer7 en el encabe)ado, en el ejemplo anterior: colores. )RO)IEDADES DE O)!ION".!!ON

!a7tion* El texto que aparecer7 al lado del control: <ojo, verde, etc... 3alue* Es el valor que tendr7 el control: True si se encuentra activado y False si no lo est7. 1ara comprobar que opcion 6a activado el usuario comprobaremos el estado de esta propiedad. Ali:nment* 3lineaci+n del texto respecto al control: Left Justify: el control aparece a la i)quierda del texto. Es el ejemplo anterior. Right Justify: el control aparece a la derec6a del texto.
(os eventos del control son los mismos que en anteriores controles, aunque no se suele asociar c+di4o a los eventos de este tipo de controles, sino Fnicamente conocer el valor que tienen: true o false.

C%A%A0 /.LIC/CI@< 9& &J&5.L@


1ara practicar con los controles que 6emos visto vamos a reali)ar una peque8a aplicaci+n que consistir7 en reali)ar con Q nFmeros que introdu)camos, una operaci+n que seleccionemos y mostrar el resultado. El "ormulario donde estar7n todos los controles es el si4uiente:

(a propiedad !a7tion de cada uno de los controles es la que se muestra en el "ormulario. -e modi"icado la propiedad (ame de cada control para que al utili)arlos desde el codi4o sepamos cual es el control con el que trabajamos: (os controles #ext$ox tienen los nombres: (um1, (um2 y Resul. (os controles &ptionbutton tienen cada uno de ellos el mismo nombre que su caption (os controles ommand$utton tienen los nombres: !alcular, 6im7iar y 'alir. 3 los controles %abel y al 'rame no 6ave "alta cambiarles el nombre. (o que 6abr7 que 6acer a6ora es asociar codi4o a cada uno de los botones que es de donde se van a reali)ar las operaciones: 1ara el bot+n Calcular que es el que nos mostrar7 el resultado se4Fn la operaci+n seleccionada, 6e utili)ado la instrucci+n If Then Else que vimos en el cap tulo anterior:

El bot+n $impiar Datos nos va a servir para borrar de una "orma r7pida los datos introducidos por el usuario y el resultado preparando los controles para introducir nuevos datos. El c+di4o que tendremos que introducir es muy simple:

El bot+n Salir Fnicamente contendr7 la sentencia End.

# -$ormularios%
(os "ormularios tienen sus propios eventos, propiedades y mtodos con los que se puede controlar su apariencia y comportamiento. El primer paso para dise8ar un "ormulario consiste en establecer sus propiedades. 1uede establecer las propiedades de un "ormulario en tiempo de dise8o en la ventana 1ropiedades o en tiempo de ejecuci+n, escribiendo c+di4o. (ota En tiempo de dise(o, que es cualquier momento mientras est7 desarrollando una aplicaci+n en el entorno de 0isual Basic, se trabaja con "ormularios y controles, se establecen propiedades y se escribe c+di4o para los eventos. #iempo de e)ecucin es cualquier momento mientras se ejecuta realmente la aplicaci+n y se interactFa con ella como lo 6ar a un usuario.

).$ *sta&leciendo las %ropiedades m4s importantes de los #ormularios.

Guc6as propiedades de un "ormulario a"ectan a su apariencia " sica. (a propiedad !a7tion determina el texto que muestra la barra de t tulo del "ormulario y la propiedad Icon establece el icono que aparece cuando se minimi)a un "ormulario. (as propiedades Ma04utton y Min4utton determinan si el "ormulario se puede maximi)ar o minimi)ar. %ambiando la propiedad 4order't5le puede controlar el comportamiento de cambio de tama8o del "ormulario. (as propiedades @ei:ht y 8idth determinan el tama8o inicial de un "ormulario, mientras que las propiedades 6e1t y +o7 determinan la ubicaci+n del "ormulario en relaci+n con la esquina superior i)quierda de la pantalla. %on la propiedad 8indo<'tate puede establecer si el "ormulario se inicia en estado maximi)ado, minimi)ado o normal. (a propiedad (ame establece el nombre con el que 6ar7 re"erencia al "ormulario en el c+di4o. *e "orma predeterminada, cuando se a4re4a un "ormulario por primera ve) a un proyecto, su nombre es &orm=, &ormQ, etc. Es conveniente establecer la propiedad (ame a al4o m7s si4ni"icativo, como B"rmEntryC para un "ormulario de entrada de pedidos. (a mejor manera de "amiliari)arse con las numerosas propiedades de los "ormularios es experimentar. %ambie al4unas propiedades de un "ormulario en la ventana 1ropiedades y ejecute la aplicaci+n para ver su e"ecto. 1uede aprender m7s sobre cada propiedad si la selecciona y presiona &= para ver 3yuda contextual.

)., *!entos y M5todos de los #ormularios.


%omo objetos que son, los "ormularios pueden ejecutar mtodos y responder a eventos. El evento <esi)e de un "ormulario se desencadena siempre que se cambia el tama8o de un "ormulario, ya sea por una acci+n del usuario o a travs del c+di4o. Esto permite reali)ar acciones como mover o cambiar el tama8o de los controles de un "ormulario cuando 6an cambiado sus dimensiones. El evento 3ctivate se produce siempre que un "ormulario se convierte en el "ormulario activo9 el evento *eactivate se produce cuando otro "ormulario u otra aplicaci+n se convierte en activo. Estos eventos son adecuados para iniciar o "inali)ar acciones del "ormulario. 1or ejemplo, en el evento 3ctivate podr a escribir c+di4o para resaltar el texto de un determinado cuadro de texto9 con el evento *eactivate podr a 4uardar los cambios e"ectuados en un arc6ivo o en una base de datos. 1ara 6acer visible un "ormulario se invoca el mtodo 'ho<: &ormQ.!6o$ 1ara descar4ar un "ormulario (cerrarlo), se invoca al mtodo Anload: &ormQ.Unload Unload Ge ^Ge si4ni"ica el &ormulario activo. 1ara ocultar un "ormulario (pero dejarlo activo en memoria) se invoca al mtodo @ide: &ormQ.-ide ?nvocar el mtodo 'ho< tiene el mismo e"ecto que establecer a +rue la propiedad 3isi%le del "ormulario. Guc6os mtodos de un "ormulario implican texto o 4r7"icos. (os mtodos Print, 6ine, !ircle y Re1resh son Ftiles para imprimir o dibujar directamente en la super"icie de un "ormulario.

).( *sta&lecer el #ormulario de arran6ue de la aplicacin.


*e "orma predeterminada, el primer "ormulario de la aplicaci+n es el formulario inicial. %uando la aplicaci+n inicia la ejecuci+n, se presenta este "ormulario (el primer c+di4o que se ejecuta es el del evento &ormA?nitiali)e de dic6o "ormulario). !i quiere presentar un "ormulario di"erente cuando se inicie la aplicaci+n, debe cambiar el "ormulario inicial. Para cam%iar el 1ormulario inicial =. En el menF Pro5ecto, elija Pro7iedades del 7ro5ecto.

Q. L. M.

Elija la "ic6a General. En el cuadro de lista ,%2eto inicial, seleccione el "ormulario que desee que sea el nuevo "ormulario inicial. Elija Ace7tar.

Inicio sin 1ormulario inicial 3l4unas veces puede desear que la aplicaci+n se inicie sin car4ar nin4Fn "ormulario. 1or ejemplo, puede que desee ejecutar c+di4o que car4ue un arc6ivo de datos y despus presentar uno de entre varios "ormularios, se4Fn el contenido de dic6o arc6ivo. 1uede 6acerlo creando un procedimiento 'u% llamado Gain en un m+dulo est7ndar, como en el si4uiente ejemplo: !ub Gain() *im int!tatus 3s ?nte4er Z (lamar a un procedimiento de "unci+n para comprobar el estado Z del usuario. int!tatus ; :etUser!tatus Z Gostrar un "ormulario inicial distinto se4Fn el estado. ?" int!tatus ; = T6en "rmGain.!6o$ Else "rm1ass$ord.!6o$ End ?" Este procedimiento tiene que ser un procedimiento 'u% y no puede estar en un m+dulo de "ormulario. 1ara establecer el procedimiento 'u% Main como objeto inicial, en el menF Pro5ecto elija Pro7iedades del 7ro5ecto, seleccione la "ic6a General y seleccione 'u% Main en el cuadro ,%2eto inicial.

& -"ombo 'o( )lista combo*


Un control !om%o4o0 combina las caracter sticas de un control +e0t4o0 y un control 6ist4o09 los usuarios pueden introducir in"ormaci+n en la parte del cuadro de texto o seleccionar un elemento en la parte de cuadro de lista del control. 1ara a4re4ar o eliminar elementos en un control !om%o4o0, use el mtodo AddItem o RemoveItem. Estable)ca las propiedades 6ist, 6ist!ount y 6istInde0 para permitir a un usuario tener acceso a los elementos de un control !om%o4o0. %omo alternativa, puede a4re4ar elementos a la lista mediante la propiedad 6ist en tiempo de dise8o. (ota Un evento !croll ocurrir7 en un control !om%o4o0 s+lo cuando se desplace el contenido de la parte desple4able del !om%o4o0, no cada ve) que cambie el contenido del !om%o4o0. 1or ejemplo, si la parte desple4able de un !om%o4o0 contiene cinco elementos y el elemento superior est7 resaltado, no ocurrir7 un evento !croll 6asta que presione seis veces la "lec6a 6acia abajo (o una ve) la tecla 30 1_:). *espus de eso, ocurrir7 un evento !croll por cada pulsaci+n de la tecla de "lec6a 6acia abajo. !in embar4o, si despus presiona la tecla de "lec6a 6acia arriba, no ocurrir7 un evento !croll 6asta que presione seis veces la tecla de "lec6a 6acia arriba (o una ve) la tecla <E 1_:). *espus de eso, cada ve) que presione la tecla de "lec6a 6acia arriba se producir7 un evento !croll. Eventos: Evento %6an4e Evento %lic2 Evento *bl%lic2 Evento *ra4*rop Evento *ra45ver Evento *rop*o$n Evento :ot&ocus Eventos `ey*o$n y `eyUp Evento `ey1ress

Evento (ost&ocus Evento 5(E%omplete*ra4 Evento 5(E*ra4*rop Evento 5(E*ra45ver Evento 5(E:ive&eedbac2 Evento 5(E!et*ata Evento 5(E!tart*ra4 Evento !croll

Gtodos: Gtodo 3dd?tem Gtodo %lear (%lipboard, %omboBox, (istBox) Gtodo *ra4 Gtodo Gove Gtodo 5(E*ra4

Gtodo <e"res6 Gtodo <emove?tem Gtodo !et&ocus Gtodo !6o$#6atsT6is Gtodo a5rder

1ropiedades: 1ropiedad 3ppearance 1ropiedad (ist?ndex 1ropiedades Bac2%olor y &ore%olor 1ropiedad (oc2ed 1ropiedad %ontainer 1ropiedad Gouse?con 1ropiedad *ata%6an4ed 1ropiedad Gouse1ointer 1ropiedad *ata&ield 1ropiedad Dame 1ropiedad *ra4?con 1ropiedad De$?ndex 1ropiedad *ra4Gode 1ropiedad 5(E*ra4Gode 1ropiedad Enabled 1ropiedad 5(E*ropGode 1ropiedad &ont 1ropiedad 1arent 1ropiedades &ontBold, &ont?talic, &ont!tri2et6ru y &ontUnderline 1ropiedad &ontDame 1ropiedades !el(en4t6, !el!tart y !elText (%ontroles 3ctiveH) 1ropiedad &ont!i)e 1ropiedad !orted 1ropiedades -ei46t y #idt6 1ropiedad !tyle 1ropiedad -elp%ontext?* 1ropiedad Tab?ndex 1ropiedad 6#nd 1ropiedad Tab!top 1ropiedad ?ndex (%ontrol 3rray) 1ropiedad Ta4 1ropiedad ?nte4ral-ei46t 1ropiedad Text 1ropiedad ?tem*ata 1ropiedad ToolTipText 1ropiedades (e"t y Top 1ropiedad Top?ndex 1ropiedad (ist 1ropiedad 0isible 1ropiedad (ist%ount 1ropiedad #6atsT6is-elp?* 1ropiedades !el(en4t6, !el!tart y !elText

+- List 'o( )lista*%


Un control 6ist4o0 muestra una lista de elementos entre los cuales el usuario puede seleccionar uno o m7s. !i el nFmero de elementos supera el nFmero que puede mostrarse, se a4re4ar7 autom7ticamente una barra de despla)amiento al control 6ist4o0. !i no se selecciona nin4Fn elemento, el valor de la propiedad 6istInde0 ser7 .=. El primer elemento de la lista es 6istInde0 > y el valor de la propiedad 6ist!ount siempre es uno m7s que el mayor valor de 6istInde0. 1ara a4re4ar o eliminar elementos de un control 6ist4o0, use el mtodo AddItem o RemoveItem. Estable)ca las propiedades 6ist, 6ist!ount y 6istInde0 para permitir que un usuario ten4a acceso a elementos del 6ist4o0. Tambin puede a4re4ar elementos a la lista mediante la propiedad 6ist en tiempo de dise8o. Eventos Evento %lic2 Evento *bl%lic2 Evento *ra4*rop Evento *ra45ver Evento :ot&ocus

Eventos Gouse*o$n y GouseUp Evento GouseGove Evento 5(E%omplete*ra4 Evento 5(E*ra4*rop Evento 5(E*ra45ver

Evento ?tem%6ec2 Eventos `ey*o$n y `eyUp Evento `ey1ress Evento (ost&ocus

Evento 5(E:ive&eedbac2 Evento 5(E!et*ata Evento 5(E!tart*ra4 Evento !croll

Gtodos Gtodo 3dd?tem Gtodo %lear (%lipboard, %omboBox, (istBox) Gtodo *ra4 Gtodo Gove Gtodo 5(E*ra4

Gtodo <e"res6 Gtodo <emove?tem Gtodo !et&ocus Gtodo !6o$#6atsT6is Gtodo a5rder

1ropiedades 1ropiedad 3ppearance 1ropiedad Gouse1ointer 1ropiedades Bac2%olor y &ore%olor 1ropiedad Gulti!elect 1ropiedad %olumns ((istBox) 1ropiedad Dame 1ropiedad %ontainer 1ropiedad De$?ndex 1ropiedad *ata%6an4ed 1ropiedad 5(E*ra4Gode 1ropiedad *ata&ield 1ropiedad 5(E*ropGode 1ropiedad *ata!ource 1ropiedad 1arent 1ropiedad *ra4?con 1ropiedad !el%ount 1ropiedad *ra4Gode 1ropiedad !elected 1ropiedad Enabled 1ropiedad !orted 1ropiedad &ont 1ropiedad !tyle 1ropiedades &ontBold, &ont?talic, &ont!tri2et6ru y &ontUnderline 1ropiedad &ontDame 1ropiedad Tab!top 1ropiedad &ont!i)e 1ropiedad Ta4 1ropiedades -ei46t y #idt6 1ropiedad Text 1ropiedad -elp%ontext?* 1ropiedad ToolTipText 1ropiedad 6#nd 1ropiedad Top?ndex 1ropiedad ?ndex (%ontrol 3rray) 1ropiedad 0isible 1ropiedad ?tem*ata 1ropiedad #6atsT6is-elp?* 1ropiedades (e"t y Top 1ropiedad Tab?ndex 1ropiedad (ist 1ropiedad (ist%ount 1ropiedad (ist?ndex 1ropiedad Gouse?con

,- -imer )cronmetro*
Un control +imer puede ejecutar c+di4o a intervalos peri+dicos produciendo un evento Timer. El control +imer, invisible para el usuario, resulta Ftil para el procesamiento de "ondo. Do puede establecer la propiedad -na%led de un +imer para una selecci+n mFltiple de controles que no sean controles +imer. Do existe nin4Fn l mite pr7ctico en cuanto al nFmero de controles +imer activos que puede tener en 0isual Basic @.> ejecut7ndose en #indo$s E@ o en #indo$s DT. Eventos: Evento Timer

Propiedades:
1ropiedad Enabled 1ropiedad ?ndex (%ontrol 3rray) 1ropiedad ?nterval 1ropiedades (e"t y Top 1ropiedad Dame 1ropiedad 1arent 1ropiedad Ta4

.- /0a e )1igura*%
'ha7e es un control 4r7"ico que se muestra como un rect7n4ulo, un cuadrado, una elipse, un c rculo, un rect7n4ulo redondeado o un cuadrado redondeado. Utilice controles 'ha7e en tiempo de dise8o en lu4ar de o adem7s de invocar los mtodos !ircle y 6ine en tiempo de ejecuci+n. 1uede dibujar un control 'ha7e en un contenedor, pero no puede actuar como contenedor. El e"ecto de establecer la propiedad 4order't5le depende del valor de la propiedad 4order8idth. !i 4order8idth no es = y 4order't5le no es > + S, 4order't5le se establece a =. Gtodos: Gtodo Gove Gtodo <e"res6

Gtodo a5rder

1ropiedades: 1ropiedades Bac2%olor y &ore%olor 1ropiedad Bac2!tyle 1ropiedad Border%olor 1ropiedad Border!tyle 1ropiedad Border#idt6 1ropiedad %ontainer 1ropiedad *ra$Gode 1ropiedad &ill%olor 1ropiedad &ill!tyle

1ropiedades -ei46t y #idt6 1ropiedad ?ndex (%ontrol 3rray) 1ropiedades (e"t y Top 1ropiedad Dame 1ropiedad 1arent 1ropiedad !6ape 1ropiedad Ta4 1ropiedad 0isible

2- Line )l3nea*%
6ine es un control 4r7"ico que se muestra como una l nea 6ori)ontal, vertical o dia4onal. 1uede utili)ar un control 6ine en tiempo de dise8o para dibujar l neas en "ormularios. En tiempo de ejecuci+n puede utili)ar un control 6ine en lu4ar del mtodo 6ine, o adem7s de l. (as l neas dibujadas con el control 6ine permanecen en el "ormulario aunque la propiedad AutoRedra< sea False. (os controles 6ine pueden mostrarse en "ormularios, en cuadros de ima4en y en marcos. Do puede utili)ar el mtodo Move para mover un control 6ine en tiempo de ejecuci+n, pero s se puede mover o cambiar de tama8o alterando sus propiedades "1, "2, B1 e B2. El e"ecto de establecer la propiedad 4order't5le depende del valor de la propiedad 4order8idth. !i 4order8idth no es = y 4order't5le no es > + S, 4order't5le se establecer7 a =. Gtodos:

Mtodo Refresh Mtodo ZOrder


1ropiedades: 1ropiedad Border%olor 1ropiedad Border!tyle 1ropiedad Border#idt6 1ropiedad %ontainer 1ropiedad *ra$Gode 1ropiedad ?ndex (%ontrol 3rray) 1ropiedad Dame 1ropiedad 1arent 1ropiedad Ta4 1ropiedad 0isible 1ropiedades H=, I=, HQ y IQ

14- Image )imagen*

Utilice el control Ima:e para mostrar un 4r7"ico. Un control Ima:e puede mostrar un 4r7"ico desde un mapa de bits, un icono o un metarc6ivo, as como un metarc6ivo mejorado, un arc6ivo b1E: o arc6ivos :?&. El control Ima:e utili)a menos recursos del sistema y actuali)a con m7s rapide) que un control Picture4o0, pero s+lo admite un subconjunto de las propiedades, los eventos y los mtodos de Picture4o0. Use la propiedad 'tretch para determinar si el 4r7"ico se escala para ajustarse al control o viceversa. 3unque puede colocar un control Ima:e dentro de un contenedor, un control Ima:e no puede actuar como contenedor. Eventos: Evento %lic2 Evento *bl%lic2 Evento *ra4*rop Evento *ra45ver Eventos Gouse*o$n y GouseUp Evento GouseGove Gtodos: Gtodo *ra4 Gtodo Gove Gtodo 5(E*ra4

Evento 5(E%omplete*ra4 Evento 5(E*ra4*rop Evento 5(E*ra45ver Evento 5(E:ive&eedbac2 Evento 5(E!et*ata Evento 5(E!tart*ra4

Gtodo <e"res6 Gtodo !6o$#6atsT6is Gtodo a5rder

1ropiedades: 1ropiedad 3ppearance 1ropiedad Border!tyle 1ropiedad %ontainer 1ropiedad *ata%6an4ed 1ropiedad *ata&ield 1ropiedad *ata!ource 1ropiedad *ra4?con 1ropiedad *ra4Gode 1ropiedad Enabled 1ropiedades -ei46t y #idt6 1ropiedad ?ndex (%ontrol 3rray) 1ropiedades (e"t y Top

1ropiedad Gouse?con 1ropiedad Gouse1ointer 1ropiedad Dame 1ropiedad 5(E*ra4Gode 1ropiedad 5(E*ropGode 1ropiedad 1arent 1ropiedad 1icture 1ropiedad !tretc6 1ropiedad Ta4 1ropiedad ToolTipText 1ropiedad 0isible 1ropiedad #6atsT6is-elp?*

11- Data )acceso a bases de datos*


1roporciona acceso a datos almacenados en bases de datos mediante uno de los tres tipos de objetos Recordset. El control &ata le permite despla)arse de un re4istro a otro, as como presentar y manipular datos de los re4istros en controles enla)ados. !in un control &ata los controles enla)ados a datos (vinculados) de un "ormulario no pueden tener acceso a los datos autom7ticamente. 1uede reali)ar la mayor a de las operaciones de acceso a datos utili)ando el control &ata sin escribir c+di4o. (os controles enla)ados a datos vinculados a un control &ata presentan autom7ticamente los datos de uno o varios campos del re4istro actual o, en al4unos casos, de un conjunto de re4istros situado a ambos lados del re4istro actual. El control &ata reali)a todas sus operaciones sobre el re4istro actual. !i el control &ata recibe instrucciones para despla)arse a un re4istro di"erente, todos los controles enla)ados pasan autom7ticamente los posibles cambios al control &ata para que los 4uarde en la base de datos. *espus, el control &ata se despla)a al re4istro solicitado y pasa los datos del re4istro actual a los controles enla)ados, en los que se presentan. El control &ata administra autom7ticamente una serie de contin4encias entre las que se incluyen los conjuntos de re4istros vac os, la inserci+n de nuevos re4istros, la modi"icaci+n y actuali)aci+n de re4istros existentes, y la administraci+n de ciertos tipos de errores. !in embar4o, en aplicaciones m7s

so"isticadas es necesario interceptar al4unas condiciones de error que el control &ata no puede administrar. 1or ejemplo, si el motor de base de datos Gicroso"t bet tiene un problema al tener acceso al arc6ivo de base de datos, no tiene el permiso adecuado o no puede ejecutar la consulta, se producir7 un error interceptable. !i el error se produce antes de que se inicien los procedimientos de la aplicaci+n o se trata de errores internos, se desencadenar7 el evento Error.

12- "ontroles enlazados


(os controles &46ist, &4!om%o, &4Grid y M'Fle0Grid son capaces de administrar conjuntos de re4istros cuando est7n enla)ados a un control &ata. Todos estos controles permiten presentar o manipular varios re4istros a la ve). (os controles incorporados Picture, 6a%el, +e0t4o0, !hec;4o0, Ima:e, ,6-, 6ist4o0 y !om%o4o0 tambin son controles enla)ados a datos y se pueden enla)ar a un Fnico campo de un Recordset administrado por un control &ata. En las ediciones 1ro"esional y Empresarial se encuentran disponibles otros controles enla)ados a datos como Mas;ed-dit y Rich+e0t4o09 otros proveedores tambin o"recen controles adicionales.

$,.$ -uncionamiento
Una ve) iniciada la aplicaci+n, 0isual Basic utili)a las propiedades del control &ata para abrir la base de datos seleccionada, crear un objeto &ata%ase y crear un objeto Recordset. (as propiedades &ata%ase y Recordset del control &ata 6acen re"erencia a los objetos &ata%ase y Recordset recin creados, que se pueden manipular de "orma independiente del control &ata, con o sin controles enla)ados. El control &ata se iniciali)a antes del evento &ormA(oad inicial del "ormulario en el que se encuentra. !i se producen errores durante esta "ase de iniciali)aci+n, se produce un error no interceptable. %uando 0isual Basic utili)a el motor de base de datos bet para crear un Recordset, no se pueden producir otras operaciones o eventos de 0isual Basic 6asta que se termine la operaci+n. !in embar4o, otras aplicaciones basadas en #indo$s pueden se4uir en ejecuci+n mientras se est7 creando el Recordset. !i el usuario presiona %T<(K?DTE< mientras el motor bet est7 4enerando un Recordset, la operaci+n termina, se produce un error interceptable y la propiedad Recordset del control &ata se establece a Dot6in4. En tiempo de dise8o, la se4unda ve) que se presiona %T<(K?DTE< 6ace que 0isual Basic presente la ventana &e7uracin. 1uede manipular el control &ata con el mouse (rat+n), despla)7ndose de un re4istro a otro, o al principio o al "inal del Recordset. (as propiedades -,FAction y 4,FAction determinan lo que ocurre cuando el usuario se despla)a al principio o al "inal de un Recordset con el mouse. Do puede establecer el en"oque en un control &ata.

$,., Validacin
El evento 3alidate y la propiedad &ata!han:ed se utili)an para reali)ar comprobaciones de Fltima 6ora sobre los re4istros que se van a escribir en la base de datos.

$,.( 7&'etos de acceso a datos


En los procedimientos puede utili)ar los objetos de acceso a datos &ata%ase y Recordset creados por el control &ata. %ada objeto &ata%ase y Recordset tiene sus propias propiedades y mtodos, y puede escribir procedimientos que utilicen dic6as propiedades y mtodos para manipular sus datos. 1or ejemplo, el mtodo Move(e0t de un objeto Recordset despla)a el re4istro actual al si4uiente re4istro dentro del Recordset. 1ara invocar este mtodo, podr a utili)ar el c+di4o si4uiente: *ata=.<ecordset.GoveDext El control &ata puede tener acceso a cualquiera de los tres tipos de objetos Recordset del motor bet versi+n L.>. !i no selecciona el tipo de conjunto de re4istros, se crea un Recordset de tipo dynaset.

En muc6os casos, el tipo predeterminado y la con"i4uraci+n del objeto Recordset creado son muy ine"icientes. Es decir, puede que no necesite un cursor actuali)able totalmente despla)able de conjunto de claves para tener acceso a los datos. 1or ejemplo, un Recordset de tipo snaps6ot, de s+lo lectura y unidireccional se crear a con m7s rapide) que el cursor predeterminado. 3se4Frese de ele4ir el tipo m7s e"iciente, as como las propiedades -0clusive, ,7tions y Read,nl5 adecuadas a su situaci+n. 1ara seleccionar un tipo de Recordset espec "ico, estable)ca la propiedad Recordset+57e del control &ata a: Recordset+57e 3alor !onstante Table > v%R'+57e+a%le *ynaset = v%R'+57e&5naset (1redeterminado) !naps6ot Q v%R'+57e'na7shot

$,.) *diciones %ro#esional y *mpresarial


En lo que concierne al acceso a datos, la principal di"erencia entre las ediciones de 3prendi)aje, 1ro"esional y Empresarial de 0isual Basic es la capacidad de crear nuevos objetos de acceso a datos. En la Edici+n est7ndar no puede declarar (con la palabra clave &im) variables como objetos de acceso a datos dentro del c+di4o. Esto si4ni"ica que s+lo el control &ata puede crear objetos &ata%ase y Recordset. En las ediciones 1ro"esional y Empresarial de 0isual Basic versi+n @.> puede crear un objeto Recordset y asi4narlo a la propiedad Recordset de un control &ata. %ualquier control enla)ado que est conectado al control &ata permitir7 manipular los re4istros del Recordset que 6a creado. 3se4Frese de que las propiedades &ataField de los controles enla)ados estn establecidas a nombres de campo v7lidos dentro del nuevo Recordset.

$,.8 Consultas almacenadas


5tra opci+n importante al utili)ar el control &ata es la posibilidad de ejecutar consultas almacenadas. !i antes 6a creado un objeto Cuer5&e1, el control &ata puede ejecutarlo y crear un Recordset mediante las propiedades 'C6, !onnect y otras del objeto Cuer5&e1. 1ara ejecutar un Cuer5&e1, estable)ca la propiedad Record'ource del control &ata al nombre del Cuer5&e1 y utilice el mtodo Re1resh. !i el Cuer5&e1 almacenado contiene par7metros, tiene que crear el Recordset y pasarlo al control &ata.

$,.9 /ratamiento de B7-:*7El control &ata tambin puede administrar lo que ocurre cuando se encuentre con un Recordset sin re4istros. Godi"icando la propiedad -,FAction puede pro4ramar el control &ata para que pase al modo 3ddDe$ de "orma autom7tica. 1uede pro4ramar el control &ata para que se ajuste autom7ticamente a la parte superior o in"erior del "ormulario primario utili)ando la propiedad Ali:n. En cualquiera de los casos, el control &ata cambia de tama8o 6ori)ontalmente para llenar todo el anc6o de su "ormulario primario, siempre que ste cambie de tama8o. Eventos: Evento *ra4*rop Evento *ra45ver Evento Error Eventos Gouse*o$n, GouseUp Evento GouseGove Evento 5(E%omplete*ra4 Evento 5(E*ra4*rop Gtodos

Evento 5(E*ra45ver Evento 5(E:ive&eedbac2 Evento 5(E!et*ata Evento 5(E!tart*ra4 Evento <eposition Evento <esi)e Evento 0alidate

Gtodo *ra4 Gtodo Gove Gtodo 5(E*ra4 Gtodo <e"res6

Gtodo !6o$#6atsT6is Gtodo Update%ontrols Gtodo Update<ecord Gtodo a5rder

1ropiedades 1ropiedad 3li4n 1ropiedad &ont!i)e 1ropiedad 3ppearance 1ropiedades -ei46t, #idt6 1ropiedades Bac2%olor, &ore%olor 1ropiedad ?ndex (Gatri) de controles) 1ropiedad B5&3ction, E5&3ction 1ropiedades (e"t, Top 1ropiedad %aption 1ropiedad Gouse?con 1ropiedad %onnect 1ropiedad Gouse1ointer 1ropiedad *atabase 1ropiedad Dame 1ropiedad *atabaseDame 1ropiedad 5(E*ropGode 1ropiedad *e"ault%ursorType 1ropiedad 5ptions 1ropiedad *e"aultType 1ropiedad 1arent 1ropiedad *ra4?con 1ropiedad <ead5nly (3ceso de datos) 1ropiedad *ra4Gode 1ropiedad <ecordset 1ropiedad EditGode 1ropiedad <ecordsetType 1ropiedad Enabled 1ropiedad <ecord!ource 1ropiedad Exclusive 1ropiedad Ta4 1ropiedad &ont 1ropiedad ToolTipText 1ropiedades &ontBold, &ont?talic, &ont!tri2et6ru, &ontUnderline 1ropiedad &ontDame 1ropiedad #6atsT6is-elp?* 1ropiedad 0isible

1! -Eventos ms im ortantes de los controles estndares% $(.$ Change


3plicable a: %ontrol %omboBox, %ontroles -!crollBar y 0!crollBar, %ontrol (abel, %ontrol 1ictureBox, %ontrol TextBox ?ndica que el contenido de un control 6a cambiado. %+mo y cu7ndo 6a ocurrido este evento var a se4Fn el control: !om%o4o0: cambia el texto de la parte de cuadro de texto del control. 5curre s+lo si la propiedad 't5le est7 establecida a > (*ropdo$n %ombo) o = (!imple %ombo) y el usuario cambia el texto o usted cambia la con"i4uraci+n de la propiedad +e0t mediante c+di4o. &ir6ist4o0: cambia el directorio seleccionado. 5curre cuando el usuario 6ace doble clic en un nuevo directorio o cuando usted cambia la con"i4uraci+n de la propiedad Path mediante c+di4o. &rive6ist4o0: cambia la unidad seleccionada. 5curre cuando el usuario selecciona una nueva unidad o cuando usted cambia la con"i4uraci+n de la propiedad &rive mediante c+di4o. @'croll4ar y 3'croll4ar (barras de despla)amiento 6ori)ontal y vertical): mueven la parte de cuadro de despla)amiento de la barra de despla)amiento. 5curre cuando el usuario despla)a o cuando usted cambia la con"i4uraci+n de la propiedad 3alue mediante c+di4o. 6a%el: cambia el contenido del control 6a%el. 5curre cuando un v nculo **E actuali)a los datos o cuando usted cambia la con"i4uraci+n de la propiedad !a7tion mediante c+di4o. Picture4o0: cambia el contenido del control Picture4o0. 5curre cuando un v nculo **E actuali)a los datos o cuando usted cambia la con"i4uraci+n de la propiedad Picture mediante c+di4o.

+e0t4o0: cambia el contenido del cuadro de texto. 5curre cuando un v nculo **E actuali)a los datos, cuando un usuario cambia el texto o cuando usted cambia la con"i4uraci+n de la propiedad +e0t mediante c+di4o.

'inta0is Private 'u% ob)etoD!han:eEW*ndice As Inte:erXF (a sintaxis del evento %6an4e consta de las si4uientes partes: Parte &escri7cin ob)eto Una expresi+n de objeto que da como resultado un objeto de la lista 3plicable a. *ndice Un entero que identi"ica Fnicamente a un control si est7 en una matri) de controles. !omentarios El procedimiento del evento %6an4e puede sincroni)ar o coordinar la presentaci+n de datos entre controles. 1or ejemplo, puede utili)ar un procedimiento de evento %6an4e de una barra de despla)amiento para actuali)ar la con"i4uraci+n de la propiedad 3alue de la barra de despla)amiento de un control +e0t4o0. 5 bien, puede utili)ar un procedimiento de evento %6an4e para mostrar datos y "+rmulas en un 7rea de trabajo y los resultados en otra 7rea. (os procedimientos de evento %6an4e son tambin Ftiles para actuali)ar propiedades de controles del sistema de arc6ivos (&ir6ist4o0, &rive6ist4o0 y File6ist4o0). 1or ejemplo, puede actuali)ar la con"i4uraci+n de la propiedad Path para que un control &ir6ist4o0 re"leje un cambio en la con"i4uraci+n de la propiedad &rive de un control &rive6ist4o0. (ota Un procedimiento de evento %6an4e puede al4unas veces causar un evento en cascada. Esto ocurre cuando el procedimiento de evento %6an4e del control altera el contenido del control, por ejemplo, estableciendo una propiedad en el c+di4o que determina el valor del control, como el valor de la propiedad +e0t para un control +e0t4o0. 1ara impedir un evento en cascada: !i es posible, evite escribir un procedimiento de evento %6an4e para un control que altere el contenido de ese control. !i escribe un procedimiento as , ase4Frese de establecer un indicador que impida cambios posteriores mientras el cambio actual est7 en curso. Evite crear dos o m7s controles cuyos procedimientos de evento %6an4e se vean a"ectados entre s , por ejemplo, dos controles +e0t4o0 que se actualicen entre s durante sus eventos %6an4e. Evite utili)ar una "unci+n o una instrucci+n Ms:4o0 en este evento para los controles @'croll4ar y 3'croll4ar.

*'emplo del e!ento Change


Este ejemplo muestra la con"i4uraci+n numrica de la propiedad 3alue de una barra de despla)amiento 6ori)ontal en un control +e0t4o0. 1ara probar este ejemplo, cree un "ormulario con un control +e0t4o0 y un control @'croll4ar y despus pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario que conten4a una barra de despla)amiento 6ori)ontal (control @'croll4ar) y un control +e0t4o0. 1resione &@ y 6a4a clic en la barra de despla)amiento 6ori)ontal. 1rivate !ub &ormA(oad () -!croll=.Gin ; > -!croll=.Gax ; =>>> -!croll=.(ar4e%6an4e ; =>> -!croll=.!mall%6an4e ; = End !ub 1rivate !ub -!croll=A%6an4e () Text=.Text ; -!croll=.0alue End !ub Z Establece Gin. Z Establece Gax. Z Establece (ar4e%6an4e. Z Establece !mall%6an4e.

$(., Clic;
3plicable a:

%ontrol %6ec2Box, %ontrol %omboBox, %ontrol %ommandButton, 5bjeto &orm, %ontrol &rame, %ontrol ?ma4e, %ontrol (abel, %ontrol (istBox, %ontrol Genu, %ontrol 5ptionButton, %ontrol 1ictureBox, %ontrol TextBox. 5curre cuando el usuario presiona y suelta un bot+n del mouse (rat+n) en un objeto. Tambin puede ocurrir cuando se cambia el valor de un control. 1ara un objeto Form, este evento ocurre cuando el usuario 6ace clic en un 7rea en blanco o en un control desactivado. 1ara un control, este evento ocurre cuando el usuario: -ace clic en un control con el bot+n primario o secundario del mouse. %on un control !hec;4o0, !ommand4utton, 6ist4o0 o ,7tion4utton, el evento %lic2 s+lo ocurre cuando el usuario 6ace clic con el bot+n primario del mouse. !elecciona un elemento de un control !om%o4o0 o 6ist4o0, ya sea presionando las teclas de direcci+n o 6aciendo clic con el bot+n del mouse. 1resiona la B3<<3 E!13%?3*5<3 cuando un control !ommand4utton, ,7tion4utton o !hec;4o0 tiene el en"oque. 1resiona EDT<3< cuando un "ormulario tiene un control !ommand4utton con su propiedad &e1ault establecida a +rue. 1resiona E!% cuando un "ormulario tiene un bot+n !ancelar, un control !ommand4utton con su propiedad !ancel establecida a +rue. 1resiona una tecla de acceso para un control. 1or ejemplo, si el t tulo de un control !ommand4utton es ,c?r,, al presionar 3(TK? se desencadena este evento. Tambin puede desencadenar el evento %lic2 en el c+di4o si: Establece la propiedad 3alue de un control !ommand4utton a +rue. Establece la propiedad 3alue de un control ,7tion4utton a +rue. %ambia el valor de la propiedad 3alue de un control !hec;4o0. 'inta0is Private 'u% FormD!lic;E F Private 'u% ob)etoD!lic;EW*ndice As Inte:erXF (a sintaxis del evento %lic2 consta de las si4uientes partes: Parte &escri7cin ob)eto Una expresi+n de objeto que da como resultado un objeto de la lista 3plicable a. *ndice Un entero que identi"ica Fnicamente a un control si est7 en una matri) de controles. !omentarios 1or lo 4eneral se adjunta un procedimiento de evento %lic2 a un control !ommand4utton, un objeto Menu o un control Picture4o0 para reali)ar comandos y acciones similares a comandos. 1ara los dem7s controles aplicables, utilice este evento para desencadenar acciones como respuesta a un cambio en el control. 1uede utili)ar la propiedad 3alue de un control para comprobar el estado del control desde el c+di4o. -acer clic en un control 4enera los eventos Gouse*o$n y GouseUp adem7s del evento %lic2. El orden en que ocurren estos tres eventos var a de un control a otro. 1or ejemplo, para los controles 6ist4o0 y !ommand4utton, los eventos ocurren en este orden: Gouse*o$n, %lic2, GouseUp. 1ero para los controles File6ist4o0, 6a%el o Picture4o0, los eventos ocurren en este otro orden: Gouse*o$n, GouseUp y %lic2. %uando est7 adjuntando procedimientos para estos eventos relacionados, ase4Frese de que sus acciones no entran en con"licto. !i el orden de los eventos es importante en la aplicaci+n, pruebe el control para determinar el orden de los mismos. (ota 1ara distin4uir entre los botones primario, secundario y central del mouse, utilice los eventos Gouse*o$n y GouseUp. !i 6ay c+di4o en el evento %lic2, nunca se activar7 el evento *lb%lic2 ya que de los dos eventos, %lic2 es el primero que se activa. %omo resultado, el evento %lic2 intercepta el clic del mouse, por lo que *bl%lic2 nunca se producir7.

*'emplo del *!ento Clic;


En este ejemplo, cada ve) que se 6ace clic en un control Picture4o0 se mueve dia4onalmente por un "ormulario. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario

que conten4a un control Picture4o0 en la esquina in"erior i)quierda del mismo, despus presione &@ y 6a4a clic en el control Picture4o0. 1rivate !ub 1icture=A%lic2 () 1icture=.Gove 1icture=.(e"t K R@>, 1icture=.Top . @@> End !ub

$(.( Got-ocus
3plicable a: %ontrol %6ec2Box, %ontrol %omboBox, %ontrol %ommandButton, , 5bjeto &orm %ontroles -!crollBar y 0!crollBar, %ontrol (istBox, %ontrol 5ptionButton, %ontrol 1ictureBox, %ontrol TextBox. 5curre cuando un objeto recibe el en"oque, ya sea mediante una acci+n del usuario, como tabular o 6acer clic en el objeto, o cambiando el en"oque en el c+di4o mediante el mtodo 'etFocus. Un "ormulario recibe el en"oque s+lo cuando todos los controles visibles est7n desactivados. 'inta0is Private 'u% FormDGotFocusE F Private 'u% ob)etoDGotFocusEW*ndice As Inte:erXF (a sintaxis del evento :ot&ocus consta de las si4uientes partes: Parte &escri7cin ob)eto Una expresi+n de objeto que da como resultado un objeto de la lista 3plicable a. *ndice Un entero que identi"ica de manera Fnica a un control si est7 en una matri) de controles. !omentarios Dormalmente, el procedimiento de evento :ot&ocus se utili)a para especi"icar las acciones que ocurren cuando un control o un "ormulario recibe primero el en"oque. 1or ejemplo, si adjunta un procedimiento de evento :ot&ocus a cada control de un "ormulario puede 4uiar al usuario mostr7ndole instrucciones breves o mensajes en la barra de estado. Tambin puede proporcionar avisos visuales activando, desactivando o mostrando otros controles que dependan del control que tiene el en"oque. (ota Un objeto puede recibir el en"oque s+lo si sus propiedades -na%led y 3isi%le est7n establecidas a +rue. 1ara personali)ar el inter"a) de teclado en 0isual Basic para mover el en"oque, estable)ca el orden de tabulaci+n o especi"ique teclas de acceso para controles de un "ormulario. -2em7lo del evento GotFocus Este ejemplo muestra un mensaje en la barra de estado cuando un bot+n de un 4rupo ,7tion4utton obtiene el en"oque. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario que conten4a dos controles ,7tion4utton y un control 6a%el. Estable)ca la propiedad (ame de ambos controles ,7tion4utton a 5ption:roup y, despus, presione &@ y 6a4a clic en los controles ,7tion4utton. 1rivate !ub &ormA(oad () (abel=.3uto!i)e ; True End !ub 1rivate !ub 5ption:roupA:ot&ocus (?ndex 3s ?nte4er) !elect %ase ?ndex %ase > (abel=.%aption ; ,(a opci+n = tiene el en"oque., %ase = (abel=.%aption ; ,(a opci+n Q tiene el en"oque., End !elect End !ub

1rivate !ub 5ption:roupA(ost&ocus (?ndex 3s ?nte4er) (abel=.%aption ; ,, End !ub

$(.) <ey%ress
3plicable a: %ontrol %6ec2Box, %ontrol %omboBox, %ontrol %ommandButton, 5bjeto &orm %ontroles -!crollBar y 0!crollBar, %ontrol (istBox, %ontrol 5ptionButton, %ontrol 1ictureBox, %ontrol TextBox. 5curre cuando el usuario presiona y suelta una tecla. 'inta0is Private 'u% FormDGe5PressE+eyascii As Inte:erF Private 'u% ob)etoDGe5PressEW*ndice As Inte:er,X+eyascii As Inte:erF (a sintaxis del evento `ey1ress consta de las si4uientes partes: Parte &escri7cin ob)eto Una expresi+n de objeto que da como resultado un objeto de la lista 3plicable a. *ndice Un entero que identi"ica de manera Fnica a un control si est7 en una matri) de controles. +eyascii Un entero que devuelve un c+di4o de tecla numrico 3D!? est7ndar. +eyascii se pasa por re"erencia9 al cambiarlo se env a un car7cter di"erente al objeto. %ambiar +eyascii a > cancela la pulsaci+n de tecla, de "orma que el objeto no recibe nin4Fn car7cter. !omentarios El objeto que tiene el en"oque recibe el evento. Un "ormulario puede recibir el evento s+lo si no tiene controles visibles y activados. Un evento `ey1ress puede implicar a cualquier car7cter imprimible del teclado, a la tecla %T<( combinada con un car7cter del al"abeto est7ndar o uno de los caracteres especiales, y la tecla EDT<3< o <ET<5%E!5. Un procedimiento de evento `ey1ress es Ftil para interceptar pulsaciones de teclas reali)adas en un control +e0t4o0 o !om%o4o0. Esto le permite comprobar inmediatamente la valide) de las pulsaciones o el "ormato de los caracteres a medida que se escriben. %ambiar el valor del ar4umento +eyascii cambia el car7cter mostrado. `ey1ress interpreta las mayFsculas y minFsculas de cada car7cter como c+di4os de tecla distintos y, por tanto, como caracteres di"erentes. (ota El nFmero 3D!? para la combinaci+n de teclado %T<(Kd es >. 1uesto que 0isual Basic reconoce un valor +eyascii de > como una cadena de lon4itud cero (,,), evite utili)ar %T<(Kd en sus aplicaciones. -2em7lo del evento Ge5Press Este ejemplo convierte a mayFsculas el texto escrito en un control +e0t4o0. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario que conten4a un control +e0t4o0 y, despus, presione &@ y escriba al4o en el control +e0t4o0. 1rivate !ub Text=A`ey1ress (`ey3scii 3s ?nte4er) %6ar ; %6r(`ey3scii) `ey3scii ; 3sc(U%ase(%6ar)) End !ub

$(.8 Load

3plicable a: 5bjeto &orm. 5curre cuando se car4a un "ormulario. 1ara un "ormulario de inicio, ocurre cuando una aplicaci+n se inicia como resultado de una instrucci+n 6oad o como resultado de una re"erencia a una propiedad o control de un "ormulario descar4ado. 'inta0is Private 'u% FormD6oadE F Private 'u% M&IFormD6oadE F !omentarios Dormalmente utili)a un procedimiento de evento (oad para incluir c+di4o de iniciali)aci+n para un "ormulario9 por ejemplo, c+di4o que especi"ica los valores predeterminados de los controles, indica el contenido que se va a car4ar en controles !om%o4o0 o 6ist4o0 e iniciali)a variables a nivel del "ormulario. El evento (oad ocurre tras el evento ?nitiali)e. (ota %uando cree procedimientos para eventos relacionados, como 3ctivate, :ot&ocus, 1aint y <esi)e, ase4Frese de que sus acciones no entran en con"licto y no producen eventos recursivos. -2em7lo del evento 6oad Este ejemplo car4a elementos en un control !om%o4o0 cuando se car4a un "ormulario. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario que conten4a un control !om%o4o0 y despus presione &@. 1rivate !ub &ormA(oad () %ombo=.3dd?tem ,Go)art, %ombo=.3dd?tem ,Beet6oven, %ombo=.3dd?tem ,<oc2 Zn <oll, %ombo=.3dd?tem ,<e44ae, %ombo=.(ist?ndex ; Q End !ub

Z 34re4a elementos a la lista.

Z Establece la selecci+n predeterminada.

$(.9 Lost-ocus
3plicable a %ontrol %6ec2Box, %ontrol %omboBox, %ontrol %ommandButton, 5bjeto &orm %ontroles -!crollBar y 0!crollBar, %ontrol (istBox, %ontrol 5ptionButton, %ontrol 1ictureBox, %ontrol TextBox. 5curre cuando un objeto pierde el en"oque, ya sea por una acci+n del usuario, como tabular o 6acer clic en otro objeto, o bien mediante un cambio del en"oque en el c+di4o con el mtodo 'etFocus. 'inta0is Private 'u% FormD6ostFocusE F Private 'u% ob)etoD6ostFocusEW*ndice As Inte:erXF (a sintaxis del evento (ost&ocus consta de las si4uientes partes: Parte &escri7cin ob)eto Una expresi+n de objeto que da como resultado un objeto de la lista 3plicable a. *ndice Un entero que identi"ica de manera Fnica a un control si est7 en una matri) de controles. !omentarios Un procedimiento de evento (ost&ocus resulta especialmente Ftil para comprobar y validar actuali)aciones. Utili)ar (ost&ocus puede 6acer que la validaci+n ten4a lu4ar con"orme el usuario mueve el en"oque del control. 5tro uso para este tipo de procedimiento de evento es activar,

desactivar, ocultar y mostrar otros objetos, como en un procedimiento de evento :ot&ocus. Tambin puede invertir o cambiar condiciones que estableci+ en el procedimiento de evento :ot&ocus del objeto.

*'emplo del e!ento Lost-ocus


Este ejemplo cambia el color de un control +e0t4o0 cuando recibe o pierde el en"oque (se selecciona con el mouse o la tecla T3B) y muestra el texto apropiado en el control 6a%el. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario que conten4a dos controles +e0t4o0 y un control 6a%el y, despus, presione &@ y mueva el en"oque entre Text= y TextQ. 1rivate !ub Text=A:ot&ocus () Z Guestra el en"oque en rojo. Text=.Bac2%olor ; <:B(Q@@, >, >) (abel=.%aption ; ,Text= tiene el en"oque., End !ub 1rivate !ub Text=A(ost&ocus () Z Guestra la prdida del en"oque en a)ul. Text=.Bac2%olor ; <:B(>, >, Q@@) (abel=.%aption ; ,Text= no tiene el en"oque., End !ub

$(.= MouseMo!e
3plicable a: %ontrol %6ec2Box, %ontrol %ommandButton, %ontrol *ata, 5bjeto &orm, %ontrol &rame, %ontrol ?ma4e, %ontrol (abel, %ontrol (istBox, %ontrol 5ptionButton, %ontrol 1ictureBox, %ontrol TextBox. 5curre cuando el usuario mueve el mouse. 'inta0is Private 'u% FormDMouseMoveEbotn As Inte:er, may,s As Inte:er, x As 'in:le, y As 'in:leF Private 'u% M&IFormDMouseMoveEbotn As Inte:er, may,s As Inte:er, x As 'in:le, y As 'in:leF Private 'u% ob)etoDMouseMoveEW*ndice As Inte:er,X botn As Inte:er, may,s As Inte:er, x As 'in:le, y As 'in:leF (a sintaxis del evento GouseGove consta de las si4uientes partes: Parte &escri7cin ob)eto Una expresi+n de objeto que da como resultado un objeto de la lista 3plicable a. *ndice Un entero que identi"ica de manera Fnica a un control si est7 en una matri) de controles. botn Un entero que corresponde al estado de los botones del mouse en el cual un bit se establece si el bot+n est7 presionado. El ar4umento botn es un campo de bit con los bits correspondientes al bot+n primario (bit >), al bot+n secundario (bit =) y al bot+n central (bit Q). Estos bits corresponden a los valores =, Q y M, respectivamente. ?ndica el estado completo de los botones del mouse9 al4uno, todos o nin4uno de estos tres bits puede estar establecido, lo que indica que al4unos, todos o nin4uno de los botones est7 presionado. may,s Un entero que corresponde al estado de las teclas G3Ie!, %T<( y 3(T. Un bit est7 establecido si la tecla est7 presionada. El ar4umento may,s es un campo de bits con los bits menos si4ni"icativos correspondientes a la tecla G3Ie! (bit >), %T<( (bit =) y 3(T (bit Q ). Estos bits corresponden a los valores =, Q y M, respectivamente. El ar4umento may,s indica el estado de estas teclas. 3l4uno, todos o nin4uno de los bits puede estar establecido, lo que indica que al4una, todas o nin4una de las teclas est7 presionada. 1or ejemplo, si se presionaron las teclas %T<( y 3(T, el valor de shift ser a S.

x, y Un nFmero que especi"ica la ubicaci+n actual del puntero del mouse. (os valores x e y siempre se expresan en trminos del sistema de coordenadas establecido por las propiedades 'cale@ei:ht, 'cale8idth, 'cale6e1t y 'cale+o7 del objeto. !omentarios El evento GouseGove se 4enera continuamente a medida que el puntero del mouse se mueve por los objetos. 3 menos que otro objeto 6aya capturado el mouse, un objeto reconoce un evento GouseGove siempre que la posici+n del mouse est dentro de sus bordes. -2em7lo del evento MouseMove Este ejemplo muestra una aplicaci+n de dibujo simple. El procedimiento de evento Gouse*o$n "unciona con un procedimiento GouseGove relacionado para activar el dibujo cuando est7 presionado cualquier bot+n del mouse. El procedimiento de evento GouseUp desactiva el dibujo. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario, despus presione &@, 6a4a clic en el "ormulario y mueva el mouse mientras est7 presionado el bot+n del mismo. *im 1aintDo$ 3s Boolean Z *eclara una variable. 1rivate !ub &ormAGouse*o$n (Button 3s ?nte4er, !6i"t 3s ?nte4er, H 3s !in4le, I 3s !in4le) 1aintDo$ ; True Z 3ctiva el dibujo. End !ub 1rivate !ub &ormAGouseUp (Button 3s ?nte4er, H 3s !in4le, I 3s !in4le) 1aintDo$ ; &alse Z *esactiva el dibujo. End !ub 1rivate !ub &ormAGouseGove (Button 3s ?nte4er, !6i"t 3s ?nte4er, H 3s !in4le, I 3s !in4le) ?" 1aintDo$ T6en 1!et (H, I) Z *ibuja un punto. End ?" End !ub 1rivate !ub &ormA(oad () *ra$#idt6 ; => Z Utili)a un pincel m7s anc6o. &ore%olor ; <:B(>, >, Q@@) Z Establece el color de dibujo. End !ub

$(.> /imer
3plicable a: %ontrol Timer 5curre cuando 6a transcurrido un intervalo preestablecido para un control +imer. (a "recuencia del intervalo se almacena en la propiedad Interval del control, que especi"ica el tiempo en milise4undos. 'inta0is Private 'u% ob)etoD+imerEW*ndice As Inte:erXF (a sintaxis del evento Timer consta de las si4uientes partes: Parte &escri7cin ob)eto Una expresi+n de objeto que da como resultado un objeto de la lista 3plicable a. *ndice Un entero que identi"ica de manera Fnica a un control si est7 en una matri) de controles. !omentarios

Utilice este procedimiento de evento para indicar a 0isual Basic qu 6acer cada ve) que se a4ote el intervalo de tiempo de un control +imer. %uando est trabajando con el evento Timer: (a propiedad Interval especi"ica el intervalo entre los eventos Timer, en milise4undos.

!iempre que la propiedad -na%led del control +imer est establecida a +rue y la propiedad Interval sea mayor que >, el evento Timer espera durante el periodo especi"icado en la propiedad Interval.

-2em7lo del evento +imer Este ejemplo muestra un reloj di4ital. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario que conten4a un control 6a%el y un control +imer y, despus, presione &@. 1rivate !ub &ormA(oad () Timer=.?nterval ; =>>> End !ub 1rivate !ub Timer=ATimer () (abel=.%aption ; Time End !ub

Z Establece el intervalo de Timer.

Z 3ctuali)a la presentaci+n de la 6ora.

Este ejemplo mueve un control Picture4o0 por un "ormulario. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario que conten4a un control +imer y un control Picture4o0 y, despus, presione &@. !i desea obtener un e"ecto visual mejor puede asi4nar un mapa de bits al control Picture4o0 mediante la propiedad Picture. *im *eltaH, *eltaI 3s ?nte4er Z *eclara variables. 1rivate !ub Timer=ATimer () 1icture=.Gove 1icture=.(e"t K *eltaH, 1icture=.Top K *eltaI ?" 1icture=.(e"t ] !cale(e"t T6en *eltaH ; =>> ?" 1icture=.(e"t K 1icture=.#idt6 / !cale#idt6 K !cale(e"t T6en *eltaH ; .=>> End ?" ?" 1icture=.Top ] !caleTop T6en *eltaI ; =>> ?" 1icture=.Top K 1icture=.-ei46t / !cale-ei46t K !caleTop T6en *eltaI ; .=>> End ?" End !ub 1rivate !ub &ormA(oad () Timer=.?nterval ; =>>> Z Establece el intervalo. *eltaH ; =>> Z ?niciali)a variables. *eltaI ; =>> End !ub

$(.? @nload
3plicable a: 5bjeto &orm. 5curre cuando un "ormulario est7 a punto de quitarse de la pantalla. %uando ese "ormulario se vuelve a car4ar, el contenido de todos sus controles se reiniciali)a. Este evento se desencadena porque un usuario cierra el "ormulario mediante el comando !errar del menF !ontrol o una instrucci+n Anload.

'inta0is Private 'u% ob)etoDAnloadEcancelar As Inte:erF (a sintaxis del evento Unload consta de las si4uientes partes: Parte &escri7cin ob)eto Una expresi+n de objeto que da como resultado un objeto de la lista 3plicable a. cancelar Un entero que determina si el "ormulario se quita de la pantalla. !i cancelar es >, el "ormulario se quita. Establecer cancelar a cualquier valor distinto de cero impide que el "ormulario se quite. !omentarios Establecer cancelar a un valor distinto de cero impide que el "ormulario se quite, pero no detiene los dem7s eventos, como la salida del entorno operativo Gicroso"t #indo$s. Utilice el evento \ueryUnload para detener la salida de #indo$s. Utilice un procedimiento de evento Unload para comprobar si el "ormulario se debe descar4ar o para especi"icar acciones que desea que ten4an lu4ar cuando se descar4ue el "ormulario. Tambin puede incluir cualquier c+di4o de validaci+n a nivel del "ormulario que pueda necesitar para cerrar el "ormulario o 4uardar los datos en un arc6ivo. El evento \ueryUnload ocurre antes que el evento Unload. El evento Unload ocurre antes que el evento Terminate. El evento Unload puede estar causado por la utili)aci+n de la instrucci+n Anload o porque el usuario elija el comando !errar del menF !ontrol del "ormulario, sal4a de la aplicaci+n con el bot+n FinaliHar tarea de la (ista de tareas, o sal4a del entorno operativo Gicroso"t #indo$s mientras la aplicaci+n se est7 ejecutando. -2em7lo del evento Anload Este ejemplo muestra un procedimiento simple para cerrar un "ormulario mientras se avisa al usuario con varios cuadros de mensajes. En una aplicaci+n real, puede a4re4ar llamadas a procedimientos 'u% de prop+sito 4eneral que emulen el proceso de los comandos 'alir, Guardar y Guardar como del menF Archivo de 0isual Basic. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario y, despus, presione &@. Una ve) que se muestre el "ormulario, presione 3(TK&M para cerrar el "ormulario. 1rivate !ub &ormAUnload (%ancel 3s ?nte4er) *im Gs4, <esponse Z *eclara variables. Gs4 ; ,U*esea 4uardar los datos antes de cerrarV, <esponse ; Gs4Box(Gs4, vb\uestion K vbIesDo%ancel, ,*i7lo4o %errar,) !elect %ase <esponse %ase vb%ancel Z Do se permite cerrar. %ancel ; .= Gs4 ; ,!e 6a cancelado el comando., %ase vbIes Z ?ntrodu)ca c+di4o para 4uardar los datos aqu . Gs4 ; ,*atos 4uardados.,Z %ase vbDo Gs4 ; ,*atos no 4uardados., End !elect Gs4Box Gs4, vb5`5nly, ,%on"irmaci+n, Z Gostrar mensaje. End !ub

$(.$A Buery@nload

3plicable a: 5bjeto &orm y %olecci+n &orms, 5bjeto G*?&orm 5curre antes de que se cierre un "ormulario o una aplicaci+n. 'inta0is Private 'u% FormDCuer5AnloadEcancelar As Inte:er, modo_descarga As Inte:erF Private 'u% M&IFormDCuer5AnloadEcancelar As Inte:er, modo_descarga As Inte:erF (a sintaxis del evento \ueryUnload consta de las si4uientes partes: Parte &escri7cin cancelar Un entero. Establecer este ar4umento a cualquier valor distinto de > detiene el evento \ueryUnload en todos los "ormularios car4ados y detiene el cierre del "ormulario y de la aplicaci+n. modo_descarga Un valor o una constante que indica la causa del evento \ueryUnload, tal y como se describe en 0alores que se pueden obtener. 3alores Iue se 7ueden o%tener El ar4umento modo_descarga devuelve los si4uientes valores: !onstante 3alor &escri7cin v%Form!ontrolMenu > El usuario eli4i+ el comando !errar del menF !ontrol del "ormulario. v%Form!ode = !e invoc+ la instrucci+n Anload desde el c+di4o. 3%A778indo<s Q (a sesi+n actual del entorno operativo Gicroso"t #indo$s est7 inali)ando. v%A77+as;Mana:er L El 3dministrador de tareas de Gicroso"t #indo$s est7 cerrando la aplicaci+n. Un "ormulario G*? secundario se est7 cerrando porque el tambin se est7 cerrando. !omentarios Dormalmente este evento se utili)a para ase4urarse de que no 6ay tareas sin "inali)ar en los "ormularios incluidos en una aplicaci+n antes de que esa aplicaci+n se cierre. 1or ejemplo, si un usuario no 6a 4uardado todav a al4unos datos nuevos de cualquier "ormulario, su aplicaci+n puede pedir al usuario que los 4uarde. %uando una aplicaci+n se cierra, puede utili)ar los procedimientos de evento \ueryUnload o Unload para establecer la propiedad !ancel a +rue, deteniendo el proceso de cierre. !in embar4o, el evento \ueryUnload ocurre en todos los "ormularios antes de que se descar4ue nin4uno de ellos y el evento Unload ocurre con"orme se descar4a cada "ormulario. -2em7lo del evento Cuer5Anload En este ejemplo, al cerrar un "ormulario se consulta al operador si realmente quiere salir o no. Tambin se c6equea si est7 saliendo del "ormulario o de toda la aplicaci+n. Z 1e4ar en la secci+n *eclaraciones de &orm=. 1rivate !ub &ormA\ueryUnload (%ancel 3s ?nte4er, UnloadGode 3s ?nte4er) *im Gs4 Z *eclara la variable. ?" UnloadGode / > T6en Z !i sale de la aplicaci+n. Gs4 ; ,U<ealmente desea salir de la aplicaci+nV, Else Z !i s+lo se cierra el "ormulario.

v%FormM&IForm "ormulario G*?

Gs4 ; ,U<ealmente desea cerrar el "ormularioV, End ?" Z !i el usuario 6ace clic en el bot+n Do, se detiene \ueryUnload. ?" Gs4Box(Gs4, vb\uestion K vbIesDo, Ge.%aption) ; vbDo T6en %ancel ; True End !ub

$(.$$ Validate
3plicable a: %ontrol *ata !e produce antes de que otro re4istro se convierta en el re4istro actual, antes del mtodo A7date (excepto cuando se 4uardan los datos con el mtodo A7dateRecord) y antes de una operaci+n &elete, Anload o !lose. 'inta0is Private 'u% ob)etoD3alidate EW*ndice As Inte:er,X accin As Inte:er, guardar As Inte:erF (a sintaxis del evento 0alidate consta de las si4uientes partes: Parte &escri7cin ob)eto Una expresi+n de objeto cuyo resultado es un objeto de la lista 3plicable a *ndice ?denti"ica el control si se encuentra en una matri) de controles accin Un entero que indica la operaci+n que provoca el evento, como se describe en 0alores guardar Una expresi+n booleana que especi"ica si los datos enla)ados 6an cambiado, como se describe en 0alores 3alores (os valores de accin son: !onstante v%&ataAction!ancel v%&ataActionMoveFirst v%&ataActionMovePrevious v%&ataActionMove(e0t v%&ataActionMove6ast v%&ataActionAdd(e< v%&ataActionA7date v%&ataAction&elete v%&ataActionFind v%&ataAction4oo;mar; v%&ataAction!lose v%&ataActionAnload

3alor > = Q L M @ S R T E => ==

&escri7cin %ancela la operaci+n al salir de 'u% Gtodo MoveFirst Gtodo MovePrevious Gtodo Move(e0t Gtodo Move6ast Gtodo Add(e< 5peraci+n A7date (no A7dateRecord) Gtodo &elete Gtodo Find !e 6a establecido la propiedad 4oo;mar; El mtodo !lose !e est7 descar4ando el "ormulario

(os valores de guardar son: 3alor &escri7cin +rue (os datos enla)ados 6an cambiado False (os datos enla)ados no 6an cambiado !omentarios El ar4umento guardar indica inicialmente si los datos enla)ados 6an cambiado. Este ar4umento puede ser False si los datos del bF"er de copia 6an cambiado. !i guardar es +rue cuando este evento termina, se invocan los mtodos -dit y A7dateRecord. El mtodo A7dateRecord s+lo 4uarda los datos de controles enla)ados o del bF"er de copia en los que la propiedad &ata!han:ed sea +rue.

Este evento se produce incluso aunque no se 6ayan modi"icado los datos de los controles enla)ados y aunque no existan controles enla)ados. 1uede utili)ar este evento para cambiar valores y actuali)ar datos. Tambin puede decidir 4uardar los datos o detener cualquier acci+n que est provocando el evento y sustituirla por otra acci+n di"erente. 1uede cambiar el ar4umento accin para cambiar una acci+n por otra. 1uede cambiar los diversos mtodos Gove y el mtodo Add(e<, que se pueden intercambiar libremente (cualquier Gove en Add(e<, cualquier Gove en cualquier otro Gove o Add(e< en cualquier Gove). %uando utilice Add(e<, puede utili)ar Move(e0t y despus ejecutar otro Add(e< para examinar la propiedad -ditMode y determinar si 6ay una operaci+n -dit o Add(e< en curso. El intento de sustituir Add(e< o una acci+n Gove en cualquier otra acci+n se pasa por alto o 4enera un error interceptable. !i se establece accin a >, se puede detener cualquier acci+n. *entro del c+di4o de este evento puede comprobar los datos de cada control enla)ado en el que &ata!han:ed sea +rue. *espus puede establecer &ata!han:ed a False para evitar 4uardar dic6os datos en la base de datos. *urante este evento no puede utili)ar nin4Fn mtodo (como Move(e0t) en el objeto Recordset subyacente.

*'emplo de la propiedad +ataChanged y del e!ento Validate


Este ejemplo ilustra una validaci+n de datos sencilla. En la tabla 3ut6ors de la base de datos Biblio.mdb 6ay dos campos: 3uA?* y 3ut6or. %omo el valor de 3uA?* se utili)a para identi"icar de "orma Fnica al autor, este valor no se debe cambiar. El ejemplo no permite que se modi"ique el campo 3uA?*, que est7 enla)ado a Text=. 1rivate !ub *ata=A0alidate (3ction 3s ?nte4er, !ave 3s ?nte4er) ?" Text=.*ata%6an4ed T6en Z %omprueba si los datos 6an cambiado. Gs4Box ,Do puede cambiar el nFmero de ?d., Text=.*ata%6an4ed ; &alse Z Do 4uarda los datos modi"icados. End ?" ... End !ub

1#- 56todos ms im ortantes de los controles estndares% $).$ Cdd2tem


3plicable a: %ontrol%omboBox, %ontrol(istBox 34re4a un elemento a un control 6ist4o0 o !om%o4o0. 'inta0is ob)eto.AddItem elemento, *ndice (a sintaxis del mtodo AddItem consta de las si4uientes partes: Parte &escri7cin ob)eto <equerido. Una expresi+n de objeto cuyo resultado es un objeto de la lista 3plicable a. -lemento <equerido. expresi+n de cadena que especi"ica el elemento que se va a a4re4ar al objeto. *ndice 5pcional. Entero que especi"ica la posici+n dentro del objeto donde se insertan el elemento o la "ila nuevos. 1ara el primer elemento de un control 6ist4o0 o !om%o4o0, *ndice es >. !omentarios

!i se especi"ica un valor v7lido para *ndice, elemento se sitFa en dic6a posici+n dentro del ob)eto. !i se omite *ndice, elemento se a4re4a en la posici+n que le corresponda dentro del orden apropiado (si la propiedad 'orted es +rue) o al "inal de la lista (si 'orted es False). (os controles 6ist4o0 o !om%o4o0 que est7n enla)ados a un control &ata no aceptan el mtodo AddItem.

*'emplo del m5todo Cdd2tem


Este ejemplo utili)a el mtodo AddItem para a4re4ar =>> elementos a un cuadro de lista. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario con un control 6ist4o0 llamado (ist=, y despus presione &@ y 6a4a clic en el "ormulario. 1rivate !ub &ormA%lic2 () *im Entry, ?, Gs4 Z *eclara variables. Gs4 ; ,-a4a clic en 3ceptar para a4re4ar =>> elementos a su cuadro de lista., Gs4Box Gs4 Z Guestra el mensaje. &or ? ; = To =>> Z %uenta de = a =>>. Entry ; ,Entrada , c ? Z %rea la entrada. (ist=.3dd?tem Entry Z 34re4a la entrada. Dext ? Gs4 ; ,-a4a clic en 3ceptar para quitar una de cada dos entradas., Gs4Box Gs4 Z Guestra el mensaje. &or ? ; = To @> Z *etermina c+mo quitar (ist=.<emove?tem ? Z cada elemento Dext ? Gs4 ; ,-a4a clic en 3ceptar para quitar todos los elementos del cuadro de lista., Gs4Box Gs4 Z Guestra el mensaje. (ist=.%lear Z (impia el cuadro de lista. End !ub

$)., CddNew 07&'eto Recordset1


3plicable a: 5bjeto <ecordset. %rea un nuevo re4istro para un objeto Recordset de tipo Table o *ynaset. 'inta0is recordset.Add(e< El marcador de posici+n del recordset es una variable de objeto que representa un objeto Recordset que se puede actuali)ar al que puede a4re4ar un re4istro nuevo. !omentarios Utilice el mtodo Add(e< para crear y a4re4ar un nuevo re4istro en el objeto Recordset llamado por el recordset. Este mtodo establece los campos a los valores predeterminados y si no se especi"ican valores predeterminados, establece los campos a (ull (los valores predeterminados especi"icados pare el Recordset tipo Table). *espus de modi"icar el nuevo re4istro, utilice el mtodo A7date para 4uardar los cambios y a4re4ar el re4istro al Recordset. Do se producir7n cambios en la base de datos 6asta que no se utilice el mtodo A7date. Precaucin !i ejecuta un Add(e< y a continuaci+n reali)a una operaci+n que desplace otro re4istro sin usar A7date, los cambios se perder7n sin previo aviso. 3dem7s, si cierra el Recordset o "inali)a el

procedimiento que declara el Recordset o su objeto &ata%ase, el nuevo re4istro y los cambios reali)ados se descartar7n sin previo aviso. !i no se 6a despla)ado 6asta el Fltimo re4istro de su Recordset, los re4istros a4re4ados a las tablas subyacentes pueden incluirse, si se colocan m7s all7 del re4istro activo. !in embar4o, si a4re4a un re4istro a un Recordset, el re4istro ser7 visible en el Recordset y se incluir7 en la tabla subyacente donde estar7 visible para todos los nuevos objetos Recordset. (a posici+n del nuevo re4istro depende del tipo de Recordset: En un objeto Recordset tipo *ynaset, los re4istros se insertan al "inal del conjunto del Recordset, independientemente de las re4las de clasi"icaci+n u orden que estuvieran en vi4or cuando se abri+ el Recordset. En un objeto Recordset tipo Table en el que su propiedad Inde0 se 6aya establecido, los re4istros se insertan en el lu4ar adecuado dentro del orden de"inido. !i no se 6a establecido la propiedad Inde0, los nuevos re4istros se insertar7n al "inal del Recordset. -2em7lo de mJtodo Add(e< En este ejemplo se a4re4a un re4isro nuevo a la tabla 34enda de la base de datos %lientes, tomando los datos desde un "ormulario que contiene L cajas de texto (txt%odi4o, txtDombre y txt*ireccion) y un bot+n para a4re4ar los datos (cmd34re4ar) 1rivate !ub cmd34re4arA%lic2 () *im $sp as #or2!pace ^*imensiono las variables *im Base as *atabase *im 34enda as <ecordset !et $sp ; *bEn4ine.#or2spaces(>) ^!eteo el espacio de trabajo !et Base ; $sp.5pen*atabase (B%lientes.mdbC) ^3bro la base de *atos !et 34enda ; Basede*atos.5pen<ecordset(B!E(E%T [ &<5G 34endaC) ^3bro el <ecordset 34enda.3ddDe$ 34endaf%odi4o ; txt%odi4o.Text 34endaf*ireccion ; txt*ireccion.Text 34enda.Dombre ; txtDombre.Text 34enda.Update 34enda.%lose Base.%lose #sp.%lose End !ub ^34re4o un re4istro en blanco ^3si4no los valores de las cajas de texto a los campos

^%ierro el <ecordset ^%ierro la base de *atos ^%ierro el espacio de trabajo

$).( Cancel@pdate 07&'eto Recordset1


3plicanble a: 5bjeto <ecordset. %ancela todas las actuali)aciones pendientes del objeto Recordset. 'inta0is recordset.!ancelA7date tipo (a sintaxis del mtodo !ancelA7date consta de las si4uientes partes. Parte &escri7cin

recordset Una variable de objeto que representa el objeto Recordset en el que se cancelan las actuali)aciones pendientes. #ipo 5pcional. Una constante que indica el tipo de actuali)aci+n, como se especi"ica en 0alores (s+lo espacios de trabajo 5*B%*irect). !omentarios El mtodo !ancelA7date cancela todas las actuali)aciones pendientes a causa de una operaci+n -dit o Add(e<. 1or ejemplo, si un usuario llama al mtodo -dit o Add(e< sin 6aber llamado anteriormente al mtodo A7date, !ancelA7date cancelar7 todos los cambios e"ectuados despus de llamar a -dit o Add(e<. -2em7lo del mJtodo !ancelA7date 3l mismo ejemplo del Evento Add(e<, le a4re4amos la opci+n de con"irmar o volver para atr7s la actuali)aci+n al operador, se4Fn la respuesta a una caja de mensajes. 1rivate !ub cmd34re4arA%lic2 () *im $sp as #or2!pace ^*imensiono las variables *im Base as *atabase *im 34enda as <ecordset !et $sp ; *bEn4ine.#or2spaces(>) ^!eteo el espacio de trabajo !et Base ; $sp.5pen*atabase (B%lientes.mdbC) ^3bro la base de *atos !et 34enda ; Basede*atos.5pen<ecordset(B!E(E%T [ &<5G 34endaC) ^3bro el <ecordset 34enda.3ddDe$ 34endaf%odi4o ; txt%odi4o.Text 34endaf*ireccion ; txt*ireccion.Text 34enda.Dombre ; txtDombre.Text ^34re4o un re4istro en blanco ^3si4no los valores de las cajas de texto a los campos

?" Gs4Box (,34re4a el nuevo re4istroC, vbIesDo) ; vbIes t6en 34enda.Update Else 34enda.%ancelUpdate End ?" 34enda.%lose Base.%lose #sp.%lose End !ub ^%ierro el <ecordset ^%ierro la base de *atos ^%ierro el espacio de trabajo

$).) Clear 0Clip&oard, Com&o BoD, List BoD1


3plicable a: 5bjeto %ontrol %omboBox, %ontrol (istBox. Borra el contenido de los controles 6ist4o0 o !om%o4o0. 'inta0is ob)eto.!lear El marcador de posici+n ob)eto representa una expresi+n de objeto cuyo resultado es un objeto de la lista 3plicable a. !omentarios

(os controles 6ist4o0 o !om%o4o0 que estn enla)ados a un control &ata no aceptan el mtodo !lear. -2em7lo del mJtodo !lear Este ejemplo utili)a el mtodo !lear para borrar todos los elementos de un cuadro de lista. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario con un control 6ist4o0 llamado (ist=, y despus presione &@ y 6a4a clic en el "ormulario. 1rivate !ub &ormA%lic2 () *im Entry, ?, Gs4 Z *eclara variables. Gs4 ; ,-a4a clic en 3ceptar para a4re4ar =>> elementos a su cuadro de lista., Gs4Box Gs4 Z Guestra el mensaje. &or ? ; = To =>> Z %uenta de = a =>>. Entry ; ,Entrada , c ? Z %rea la entrada. (ist=.3dd?tem Entry Z 34re4a la entrada. Dext ? Gs4 ; ,-a4a clic en 3ceptar para quitar cualquier otra entrada., Gs4Box Gs4 Z Guestra el mensaje. &or ? ; = To @> Z *etermina c+mo quitar (ist=.<emove?tem ? Z uno de cada dos Dext ? Z elementos. Gs4 ; ,-a4a clic en 3ceptar para quitar todos los elementos del cuadro de lista., Gs4Box Gs4 Z Guestra el mensaje. (ist=.%lear Z (impia el cuadro de lista. End !ub

$).8 Close 07&'etos +ata&ase, Recordset o Eor;space1


3plicable a: 5bjeto *atabase, 5bjeto <ecordset, 5bjeto #or2space. %ierra un objeto *35 (*ata 3ccess 5bject). 'inta0is ob)eto.!lose El marcador de posici+n ob)eto es una variable de objeto que representa un objeto &ata%ase, Recordset o 8or;s7ace abierto. !omentarios !i el objeto &ata%ase, Recordset o 8or;s7ace llamado por ob)eto est7 cerrado cuando utili)a !lose se produce un error en tiempo de ejecuci+n. Precaucin !i sale de un procedimiento que declara objetos &ata%ase o Recordset y la base de datos est cerrada, los cambios no 4uardados se perder7n, todas las transacciones pendientes se anular7n y se anular7n todas las modi"icaciones pendientes de los datos. !i intenta cerrar un objeto !onnection o &ata%ase mientras 6ay al4Fn objeto Recordset abierto, estos objetos Recordset se cerrar7n y las actuali)aciones o modi"icaciones pendientes quedar7n anuladas. !i intenta cerrar un objeto 8or;s7ace mientras 6ay al4Fn objeto &ata%ase abierto, los objetos &ata%ase se cerrar7n, el cual cerrar7 sus objetos Recordset. (a utili)aci+n del mtodo !lose en un objeto Recordset ori4inal o duplicado no a"ecta al otro objeto Recordset.

Una alternativa al mtodo !lose es establecer el valor de una variable de objeto a (othin: (!et dbsTemp ; Dot6in4). -2em7lo de mJtodo !lose !on v7lidos los ejemplos de los mtodos Add(e< y !ancelA7date. (donde se cierran objetos #or2space, *atabase y <ecordset),

$).9 Cls
3plicable a: 5bjeto &orm, %ontrol 1ictureBox. Borra los 4r7"icos y el texto 4enerados en tiempo de ejecuci+n de los controles Form o Picture4o0.

"intaDis
ob)eto.!ls El marcador de posici+n ob)eto representa una expresi+n de objeto cuyo resultado es un objeto de la lista 3plicable a. !i se omite ob)eto, se supone que el ob)eto es el control Form que ten4a el en"oque.

Comentarios
!ls borra el texto y los 4r7"icos 4enerados en tiempo de ejecuci+n por instrucciones 4r7"icas y de impresi+n. (os mapas de bits de "ondo de"inidos mediante la propiedad Picture y los controles colocados en un Form en tiempo de dise8o no se ven a"ectados por !ls. *espus de llamar a !ls, las propiedades !urrent" y !urrentB del ob)eto se restablecen a >. -2em7lo del mJtodo !ls Este ejemplo utili)a el mtodo !ls para eliminar la in"ormaci+n impresa de un "ormulario. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario, y despus presione &@ y 6a4a clic en el "ormulario. 1rivate !ub &ormA%lic2 () *im Gs4 Z *eclara variable. &ore%olor ; \B%olor(=@) Z Establece el color de primer plano a blanco. Bac2%olor ; \B%olor(=) Z Establece el color de "ondo a a)ul. Gs4 ; ,Esta in"ormaci+n se imprime en el "ondo del "ormulario., 1rint Gs4 Z ?mprime el mensaje en el "ormulario. Gs4 ; ,-a4a clic en 3ceptar para borrar la in"ormaci+n y el patr+n de "ondo , Gs4 ; Gs4 c ,mostrado en el "ormulario., Gs4Box Gs4 Z Guestra el mensaje. %ls Z Borra el "ondo del "ormulario. End !ub

$).= Compact+ata&ase 07&'eto +B*ngine1


3plicable a: 5bjeto *BEn4ine %opia, compacta y o"rece la posibilidad de cambiar la versi+n, la secuencia de ordenaci+n y la codi"icaci+n. (s+lo espacio de trabajo Gicroso"t bet).

"intaDis

&4-n:ine.!om7act&ata%ase antiguabasededatos? nuevabasededatos? escenario? opciones, contrase(a (a sintaxis del mtodo !om7act&ata%ase tiene los si4uientes ar4umentos: /Anti0uabasededatos1 Una 'trin: que identi"ica una base de datos existente y cerrada. 1uede ser una ruta completa y un nombre de arc6ivo, como ,%:Jdb=.mdb,. !i el nombre de arc6ivo tiene una extensi+n, deber7 especi"icarla. !i su red lo admite, tambin puede especi"icar una ruta de red, como ,JJserver=Js6are=Jdir=Jdb=.mdb,. /nuevabasededatos1 Un tipo de datos 'trin: que es la ruta completa de la base de datos compactada que va a crear. Tambin puede especi"icar una ruta de acceso de red al i4ual que con antiguabasededatos. Do puede usar el ar4umento nuevabasededatos para especi"icar el mismo arc6ivo de base de datos que antiguabasededatos. /Escenario1 5pcional. Un tipo de datos 3ariant que es una expresi+n de cadena que se utili)a para especi"icar la secuencia de ordenaci+n para crear nuevabasededatos, como se especi"ica en 5pciones. !i omite este ar4umento, el escenario de la nuevabasededatos ser7 el mismo que el de la antiguabasededatos. Tambin puede crear una contrase8a para nuevabasededatos concatenando la cadena de la contrase8a (que comien)a con ,9p$d;,) con una constante del ar4umento escenario, como este: db(an4!panis6 c ,9p$d;Dueva%ontrase8a, !i desea utili)ar el mismo escenario como antiguabasededatos (el valor predeterminado), pero especi"icar una contrase8a nueva, simplemente escriba una contrase8a en escenario: ,9p$d;Dueva%ontrase8a, opciones 5pcional. Un valor entero que indica una o m7s opciones, se4Fn se especi"ica en 5pciones. 1uede combinar opciones sumando las correspondientes constantes. /Contrase'a1 5pcional. Un tipo de datos 3ariant que es una expresi+n de cadena que contiene una contrase8a, si la base de datos est7 prote4ida con contrase8a. (a cadena ,9p$d;, debe preceder a la propia contrase8a. !i incluye una valor de contrase8a en escenario, este valor se i4nora. 1uede utili)ar una de las si4uientes constantes en el ar4umento opciones para especi"icar si desea o no codi"icar la base de datos mientras se compacta. !onstante &escri7cin d%-ncr57t %odi"ica la base de datos durante la compactaci+n. &%&ecr57t *escodi"ica la base de datos durante la compactaci+n. !i omite una constante de codi"icaci+n o si incluye a la ve) d%&ecr57t y d%-ncr57t, nuevabasededatos tendr7 la misma codi"icaci+n que antiguabasededatos. 1uede usar una de las si4uientes constantes en el ar4umento opciones para especi"icar la versi+n del "ormato de los datos para la base de datos compactada. Esta constante a"ecta s+lo a la versi+n del "ormato de datos de nuevabasededatos y no a"ecta a la versi+n de nin4uno de los objetos de"inidos por Gicroso"t 3ccess, como "ormularios e in"ormes. !onstante &escri7cin d%3ersion1K %rea una base de datos que utili)a el motor de base de datos Gicroso"t bet versi+n =.> durante la compactaci+n. &%3ersion11 %rea una base de datos que utili)a el motor de base de datos Gicroso"t bet versi+n =.= durante la compactaci+n. &%3ersion2K %rea una base de datos que utili)a el motor de base de datos Gicroso"t bet versi+n Q.> durante la compactaci+n. &%3ersion3K %rea una base de datos que utili)a el motor de base de datos Gicroso"t bet versi+n L.> (compatible con la versi+n L.@) durante la compactaci+n. !+lo puede especi"icar una constante de versi+n. !i omite una constante de versi+n, nuevabasededatos tendr7 la misma versi+n que antiguabasededatos. !+lo puede compactar nuevabasededatos a una versi+n i4ual o posterior a la de antiguabasededatos. !omentarios 3l cambiar datos de una base de datos, el arc6ivo de base de datos puede "ra4mentarse y utili)ar m7s espacio en disco del necesario. <e4ularmente, puede usar el mtodo !om7act&ata%ase en la base de datos para des"ra4mentar el arc6ivo de base de datos. (a base de datos compactada suele ser m7s

peque8a y ejecutarse con m7s rapide). Tambin puede cambiar la secuencia de ordenaci+n, la codi"icaci+n o la versi+n del "ormato de datos, mientras copia y compacta la base de datos. Tiene que cerrar antiguabasededatos antes de compactarla. En un entorno multiusuario, los dem7s usuarios no pueden tener abierta antiguabasededatos mientras usted la compacta. !i antiguabasededatos no est7 cerrada o no se encuentra disponible para su uso exclusivo, se producir7 un error. 1uesto que !om7act&ata%ase crea una copia de la base de datos, deber7 disponer de espacio su"iciente en disco para la base de datos ori4inal y la duplicada. (a operaci+n de compactaci+n "racasar7 si no 6ay su"iciente espacio disponible en disco. (a base de datos duplicada nuevabasededatos no tiene por qu estar en el mismo disco que antiguabasededatos. *espus de compactar una base de datos, puede eliminar el arc6ivo antiguabasededatos y cambiar el nombre del arc6ivo compactado nuevabasededatos por el nombre del arc6ivo ori4inal. El mtodo !om7act&ata%ase copia todos los datos y valores de permisos de se4uridad de la base de datos especi"icada en antiguabasededatos a la base de datos especi"icada en nuevabasededatos. !i utili)a el mtodo !om7act&ata%ase para convertir una base de datos versi+n =.x a una versi+n Q.@ o L.x, solamente las aplicaciones que utili)an las versiones de Gicroso"t bet Q.@ o L.x pueden abrir la base de datos convertida. Precaucin *ebido a que el mtodo !om7act&ata%ase no convertir7 objetos Gicroso"t 3ccess, no es recomendable utili)ar !om7act&ata%ase para convertir una base de datos que conten4a dic6os objetos. 1ara convertir una base de datos que conten4a objetos Gicroso"t 3ccess, en el menF @erramientas, elija Atilidades de la %ase de datos y despus 6a4a clic en !onvertir %ase de datos.

*'emplo de m5todo Compact+ata&ase


Este ejemplo utili)a el mtodo !om7act&ata%ase compactar la base de *atos %lientes.mdb. !ub %ompact*atabaseH() *BEn4ine.%ompact*atabase ,%lientes.mdb,, B%ompact.mdb, End !ub

$).> +elete 07&'eto Recordset1


3plicable a: 5bjeto <ecordset. 5bjetos Recordset: elimina el re4istro activo de un objeto Recordset de tipo *ynaset o Table. 1ara espacios de trabajo 5*B%*irect, el tipo de controlador determina si los objetos Recordset se pueden actuali)ar y, por tanto, admiten el mtodo &elete.

'inta0is recordset.&elete (a sintaxis del mtodo &elete utili)a los si4uientes ar4umentos. Ar:umentos &escri7cin recordset Una variable de objeto que identi"ica un objeto Recordset de tipo *ynaset o Table abierto, que contiene el re4istro que desea eliminar.

Comentarios
1uede utili)ar el mtodo &elete para eliminar un re4istro activo de un objeto Recordset. Recordsets Un objeto Recordset debe contener un re4istro activo antes de que utilice el mtodo &elete9 en caso contrario se produce un error en tiempo de ejecuci+n. En objetos Recordset, &elete elimina el re4istro activo y lo 6ace inaccesible. 3unque no pueda modi"icarlo o utili)arlo, el re4istro eliminado permanecer7 activo. !in embar4o, una ve) que se desplace a otro re4istro no podr7 volver a convertir en activo el re4istro eliminado. (as re"erencias subsi4uientes a un re4istro eliminado en un Recordset no son v7lidas y producen un error.

!i la tabla base es la tabla principal en una relaci+n de eliminaci+n de cascada, al eliminar el re4istro activo tambin se eliminar7n uno o m7s re4istros de una tabla externa. (ota 1ara a4re4ar, modi"icar o eliminar un re4istro, debe tener un ndice Fnico en el re4istro en el ori4en de datos de base. !i no es as , se producir7 un error ,1ermiso dene4ado, en la llamada al mtodo Add(e<, &elete o -dit en un espacio de trabajo Gicroso"t bet.

*'emplo de m5todo +elete


!e necesitan borrar todos los re4istros de la tabla 34enda (dentro de la base de datos %lientes) cuyos c+di4os de %lientes sean menores a =>. 1rivate !ub cmd34re4arA%lic2 () *im $sp as #or2!pace ^*imensiono las variables *im Base as *atabase *im 34enda as <ecordset !et $sp ; *bEn4ine.#or2spaces(>) ^!eteo el espacio de trabajo !et Base ; $sp.5pen*atabase (B%lientes.mdbC) ^3bro la base de *atos !et 34enda ; Basede*atos.5pen<ecordset(B!E(E%T [ &<5G 34enda #-E<E 34enda.%odi4o ] =>C) ^3bro el <ecordset ?" Dot 34enda.E5& 34enda.Gove&irst *o #6ile Dot 34enda.E5& 34enda.*elete 34enda.GoveDext (oop End ?" 34enda.%lose Base.%lose #sp.%lose End !ub ^si encontr al4Fn re4istro ^me muevo al primer re4istro ^mientras no sea "in de arc6ivo ^elimino el re4istro ^me despla)o al si4uiente re4istro

^%ierro el <ecordset ^%ierro la base de *atos ^%ierro el espacio de trabajo

$).? *dit 07&'eto Recordset1


3plicable a : 5bjeto <ecordset. %opia el re4istro activo de un objeto Recordset al bF"er de copia para su posterior edici+n. 'inta0is recordset.-dit El recordset representa el nombre de un objeto Recordset abierto y que se puede actuali)ar que contiene el re4istro que desea modi"icar.

Comentarios
Una ve) que utili)a el mtodo -dit, los cambios reali)ados en los campos del re4istro activo son copiados al bF"er de copia. *espus de reali)ar los cambios deseados en el re4istro, utilice el mtodo A7date para 4uardar los cambios. El re4istro activo permanece activo despus de utili)ar el mtodo -dit.

Precaucin !i modi"ica un re4istro y a continuaci+n pasa a otro re4istro sin utili)ar antes A7date, los cambios se perder7n sin previo aviso. 3dem7s, si cierra recordset o "inali)a el procedimiento que declara el Recordset o el objeto &ata%ase o !onnection, el re4istro modi"icado se descarta sin previo aviso. (a utili)aci+n de -dit produce un error bajo las si4uientes condiciones: Do 6ay nin4Fn re4istro activo.

El objeto &ata%ase o Recordset se abri+ de s+lo lectura. Do 6ay campos que se pueden actuali)ar en el re4istro. El objeto &ata%ase o Recordset se abri+ para uso en modo exclusivo por otro usuario (espacio de trabajo Gicroso"t bet).

(ota 1ara a4re4ar, modi"icar o eliminar un re4istro, debe tener un ndice Fnico en el re4istro en el ori4en de datos de base. !i no es as , se producir7 un error ,1ermiso dene4ado, en la llamada al mtodo Add(e<, &elete o -dit en un espacio de trabajo Gicroso"t bet, o se producir7 un error ,3r4umento no v7lido, el la llamada al mtodo A7date en un espacio de trabajo 5*B%*irect.

*'emplo de m5todo *dit


!e necesita asi4nar la )ona = a todos los re4istros de la tabla 34enda (dentro de la base de datos %lientes) cuyos c+di4os de %lientes sean menores a Q>. 1rivate !ub cmd34re4arA%lic2 () *im $sp as #or2!pace ^*imensiono las variables *im Base as *atabase *im 34enda as <ecordset !et $sp ; *bEn4ine.#or2spaces(>) ^!eteo el espacio de trabajo !et Base ; $sp.5pen*atabase (B%lientes.mdbC) ^3bro la base de *atos !et 34enda ; Basede*atos.5pen<ecordset(B!E(E%T [ &<5G 34enda #-E<E 34enda.%odi4o ] Q>C) ^3bro el <ecordset ?" Dot 34enda.E5& ^si encontr al4Fn re4istro 34enda.Gove&irst ^me muevo al primer re4istro *o #6ile Dot 34enda.E5& ^mientras no sea "in de arc6ivo 34enda.Edit ^Edito el re4istro 34endafaona ; = 34enda.Update 34enda.GoveDext ^me despla)o al si4uiente re4istro (oop End ?" 34enda.%lose ^%ierro el <ecordset Base.%lose ^%ierro la base de *atos #sp.%lose ^%ierro el espacio de trabajo End !ub

$).$A Fide
3plicable a: 5bjeto &orm. 5culta un objeto Form pero no lo descar4a. 'inta0is ob)eto.@ide

El marcador de posici+n ob)eto representa una expresi+n de objeto cuyo resultado es un objeto de la lista 3plicable a. !i se omite ob)eto, se supone que ob)eto es el "ormulario que ten4a el en"oque.

Comentarios
%uando se oculta un "ormulario, se quita de la pantalla y su propiedad 3isi%le queda establecida a False. (os controles de un "ormulario oculto no son accesibles para el usuario, pero est7n disponibles para la aplicaci+n de 0isual Basic en ejecuci+n y para otros procesos que se estn comunicando con la aplicaci+n mediante **E, as como para los eventos del control +imer. %uando se oculta un "ormulario, el usuario no puede interactuar con la aplicaci+n 6asta que el c+di4o del procedimiento de evento que 6a provocado la ocultaci+n del "ormulario 6aya terminado de ejecutarse. !i el "ormulario no est7 car4ado cuando se llama al mtodo @ide, el mtodo @ide car4a el "ormulario pero no lo presenta. -2em7lo del mJtodo @ide Este ejemplo utili)a el mtodo @ide para ocultar un "ormulario. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario, y despus presione &@ y 6a4a clic en el "ormulario. 1rivate !ub &ormA%lic2 () *im Gs4 Z *eclara variable. -ide Z 5culta el "ormulario. Gs4 ; ,-a4a clic en 3ceptar para que vuelva a aparecer el "ormulario., Gs4Box Gs4 Z Guestra el mensaje. !6o$ Z Guestra de nuevo el "ormulario. End !ub

$).$$ Mo!e-irst Mo!eLast Mo!eNeDt 3 Mo!e%re!ious 07&'eto Recordset1


3plicable a: 5bjeto <ecordset. Gueven al re4istro primero, Fltimo, si4uiente o anterior de un objeto Recordset y lo convierten en el re4istro activo.

"intaDis
recordset.gMoveFirst h Move6ast Wd%RunAs5ncX h Move(e0t h MovePreviousi El marcador de posici+n recordset es una variable de objeto que representa un objeto Recordset abierto.

Comentarios
Precaucin !i modi"ica el re4istro activo, utilice el mtodo A7date para 4uardar los cambios antes de ir a otro re4istro. !i va a otro re4istro sin actuali)ar, los cambios se perder7n sin previo aviso. 3l abrir un Recordset, el primer re4istro est7 activo y la propiedad 4,F es False. !i el Recordset no contiene re4istros la propiedad 4,F es +rue y no 6abr7 nin4Fn re4istro activo. !i el primer o el Fltimo re4istro est7 activo cuando utili)a MoveFirst o Move6ast, el re4istro activo no cambia.

!i utili)a MovePrevious cuando el primer re4istro est7 activo, la propiedad 4,F es +rue y no 6abr7 nin4Fn re4istro activo. !i vuelve a utili)ar MovePrevious se producir7 un error y 4,F ser7 +rue. !i utili)a Move(e0t cuando el Fltimo re4istro est7 activo, la propiedad -,F es +rue y no 6abr7 nin4Fn re4istro activo. !i vuelve a utili)ar Move(e0t se producir7 un error y -,F ser7 +rue. !i recordset 6ace re"erencia a un objeto Recordset de tipo Table (s+lo espacios de trabajo Gicroso"t bet), el movimiento se4uir7 el ndice activo. 1uede establecer el ndice activo utili)ando la propiedad Inde0. !i no establece el ndice activo, el orden de los re4istros devueltos no estar7 de"inido. Im7ortante 1uede utili)ar el mtodo Move6ast para llenar completamente un objeto Recordset de tipo *ynaset o !naps6ot para obtener el nFmero de re4istros activos en el Recordset. !in embar4o, si utili)a Move6ast puede 6acer m7s lentas sus aplicaciones. !+lo debe utili)ar Move6ast para obtener un total de re4istros si es absolutamente necesario obtener un total exacto en un Recordset abierto recientemente. Do puede utili)ar los mtodos MoveFirst, Move6ast y MovePrevious en un Recordset de tipo &or$ard.only. 1ara mover la posici+n del re4istro activo en un objeto Recordset un nFmero espec "ico de re4istros 6acia adelante o 6acia atr7s, utilice el mtodo Move. -2em7lo de mJtodos MoveFirst? Move6ast? Move(e0t? MovePrevious 1ara un ejemplo de uso de los mtodos MoveFirst y Move(e0t, mire el ejemplo del mtodo -dit. !e necesita asi4nar la )ona = a todos los re4istros de la tabla 34enda (dentro de la base de datos %lientes) cuyos c+di4os de %lientes sean menores a Q>. Es necesario recorrer la tabla de atr7s 6acia adelante. 1rivate !ub cmd34re4arA%lic2 () *im $sp as #or2!pace ^*imensiono las variables *im Base as *atabase *im 34enda as <ecordset !et $sp ; *bEn4ine.#or2spaces(>) ^!eteo el espacio de trabajo !et Base ; $sp.5pen*atabase (B%lientes.mdbC) ^3bro la base de *atos !et 34enda ; Basede*atos.5pen<ecordset(B!E(E%T [ &<5G 34enda #-E<E 34enda.%odi4o ] Q>C) ^3bro el <ecordset ?" Dot 34enda.E5& ^si encontr al4Fn re4istro 34enda.Gove(ast ^me muevo al Fltimo re4istro *o #6ile Dot 34enda.B5& ^mientras no sea principio de arc6ivo 34enda.Edit ^Edito el re4istro 34endafaona ; = 34enda.Update 34enda.Gove1revious ^me despla)o al re4istro anterior (oop End ?" 34enda.%lose ^%ierro el <ecordset Base.%lose ^%ierro la base de *atos #sp.%lose ^%ierro el espacio de trabajo End !ub

$).$, 7pen+ata&ase 07&'eto Eor;space1


3plicable a: 5bjeto *BEn4ine, 5bjeto #or2space. 3bre una base de datos especi"icada en un objeto 8or;s7ace y devuelve una re"erencia al objeto &ata%ase que la representa. 'inta0is

'et basededatos ; espaciodetraba)o.,7en&ata%ase Enombrebasededatos? opciones? slolectura? conexinF (a sintaxis del mtodo ,7en&ata%ase consta de las si4uientes partes. Ar:umento &escri7cin basededatos Una variable de objeto que representa el objeto &ata%ase que va a abrir. espaciodetraba)o 5pcional. Una variable de objeto que representa el objeto 8or;s7ace existente que contendr7 la base de datos. !i no incluye un valor para espaciodetraba)o, ,7en&ata%ase utili)a el espacio de trabajo predeterminado. .ombrebasededatos Un tipo de datos 'trin: que es el nombre de un arc6ivo de base de datos Gicroso"t bet existente o el nombre del ori4en de datos (*!D) de un ori4en de datos 5*B% existente. opciones 5pcional. Un tipo de datos 3ariant que establece varias opciones para la base de datos, como se especi"ica en 0alores. slolectura 5pcional. Un valor de tipo de datos 3ariant (subtipo 4oolean) que es +rue si desea abrir la base de datos con acceso de s+lo lectura o False (predeterminado) si desea abrir la base de datos con acceso de lecturaOescritura. conexin 5pcional. Un tipo de datos 3ariant (subtipo 'trin:) que especi"ica in"ormaci+n variada sobre la conexi+n, incluyendo las contrase8as. 3alores 1ara los espacios de trabajo Gicroso"t bet, puede utili)ar los si4uientes valores para el ar4umento opciones: 3alor &escri7cin +rue 3bre la base de datos en modo exclusivo. False (1redeterminado) 3bre la base de datos en modo compartido. !omentarios %uando abre una base de datos, autom7ticamente se a4re4a a la colecci+n &ata%ases. Estas son al4unas consideraciones que debe aplicar cuando utilice nombrebasededatos: !i 6ace re"erencia a una base de datos que ya est7 abierta para acceso en modo exclusivo por otro usuario, se produce un error. !i no 6ace re"erencia a una base de datos existente, se produce un error. El ar4umento conexin se expresa en dos partes: el tipo de base de datos, se4uido por punto y coma (9) y los ar4umentos opcionales. 1rimero debe proporcionar el tipo de base de datos, como ,5*B%9, o ,&ox1ro Q.@9,. 3 continuaci+n, os ar4umentos opcionales sin un orden concreto, separados por punto y coma. Uno de los par7metros puede ser la contrase8a (si 6ay al4una asi4nada). 1or ejemplo: ,&ox1ro Q.@9 p$d;micontrase8a, 1ara cerrar una base de datos y, de este modo, quitar el objeto &ata%ase de la colecci+n &ata%ases, utilice el mtodo !lose en el objeto . -2em7lo mJtodo ,7en&ata%ase Es v7lido el mismo ejemplo utili)ado para los mtodos MoveFirst? Move6ast? Move(e0t? MovePrevious.

$).$( 7penRecordset 07&'eto +ata&ase1

3plicable a: 5bjeto *atabase. %rea un nuevo objeto Recordset y lo a8ade a la colecci+n Recordsets. 'inta0is 'et variable ; ob)eto.,7enRecordset Eorigen? tipo? opciones? bloquearmodificacionesF (a sintaxis del mtodo ,7enRecordset consta de las si4uientes partes. Ar:umento &escri7cin variable Una variable de objeto que representa el objeto Recordset que desea abrir. &b)eto Una variable de objeto que representa un objeto existente desde el que desea crear el objeto Recordset nuevo. &rigen Un tipo de datos 'trin: que especi"ica el ori4en de los re4istros para el nuevo Recordset. El ori4en puede ser un nombre de tabla, un nombre de consulta o una instrucci+n !\( que devuelve re4istros. #ipo 5pcional. Una constante que indica el tipo de objeto Recordset a abrir, como se especi"ica en 0alores. &pciones 5pcional. Una combinaci+n de constantes que especi"ican las caracter sticas del objeto Recordset nuevo, como se especi"ica en 0alores. $loquearmodificaciones 5pcional. Una constante que determina el bloqueo para el objeto Recordset, como se especi"ica en 0alores. 3alores 1uede utili)ar una de las si4uientes constantes para el ar4umento tipo. !onstante &escri7cin d%,7en+a%le 3bre un objeto Recordset de tipo Table (s+lo espacios de trabajo Gicroso"t bet). d%,7en&5naset 3bre un objeto Recordset de tipo *ynaset (actuali)able). &%,7en'na7shot 3bre un objeto Recordset de tipo !naps6ot (s+lo lectura) &%,7enFor<ard,nl5 3bre un objeto Recordset de tipo &or$ard.only. (ota !i abre un objeto Recordset en un espacio de trabajo Gicroso"t bet y no especi"ica un tipo, el mtodo ,7enRecordset crea una objeto Recordset de tipo Table, si es posible. !i especi"ica una tabla vinculada o una consulta, el mtodo ,7enRecordset crea un objeto Recordset.de tipo *ynaset. 1uede utili)ar una combinaci+n de las si4uientes constantes para el ar4umento opciones: -&%A77end,nl5* 1ermite al usuario anexar re4istros nuevos al objeto Recordset, pero impide la modi"icaci+n o eliminaci+n de re4istros existentes (s+lo objetos Recordset de tipo *ynaset de Gicroso"t bet). -&%'ee!han:es* :enera un error en tiempo de ejecuci+n si otro usuario est7 cambiando los datos que usted est7 modi"icando.(!+lo en objetos Recordset de tipo !naps6ot de Gicroso"t bet). Esto es Ftil en aplicaciones donde varios usuarios tiene acceso de lecturaOescritura simult7neo a los mismos datos. -&%&en58rite* 1reviene que otros usuarios puedan modi"icar o a4re4ar re4istros (s+lo objetos Recordset de Gicroso"t bet). -&%&en5Read* 1reviene que otros usuarios puedan leer datos de una tabla (s+lo objetos Recordset de tipo Table de Gicroso"t bet). -&%For<ard,nl5* %rea un objeto Recordset de tipo &or$ard.only (s+lo objetos Recordset de tipo !naps6ot de Gicroso"t bet). !e proporciona s+lo para compatibilidad con versiones anteriores y debe utili)ar la constante d%,7enFor<ard,nl5 en el ar4umento tipo en ve) de utili)ar esta opci+n. -&%Read,nl5 : 1reviene que otros usuarios puedan 6acer cambios el objeto Recordset (s+lo Gicroso"t bet). (a constante d%Read,nl5 en el ar4umento bloquearmodificaciones reempla)a esta opci+n, la cual se proporciona para compatibilidad con versiones anteriores.

-d%Inconsistent : 1ermite actuali)aciones inconsistentes (s+lo objetos Recordset de tipo *ynaset de Gicroso"t bet). -&%!onsistent : 1ermite s+lo actuali)aciones consistentes (s+lo objetos Recordset de tipo *ynaset de Gicroso"t bet). (ota (as constantes d%!onsistent y d%Inconsistent se excluyen mutuamente y el uso de ambos produce un error. 1roporcionar un ar4umento bloquearmodificaciones cuando el ar4umento opciones utili)a la constante d%Read,nl5 tambin produce un error. 1uede utili)ar las si4uientes constantes para el ar4umento bloquearmodificaciones:. -d%Read,nl5* 1reviene que los usuarios 6a4an cambios al Recordset. 1uede utili)ar d%Read,nl5 en el ar4umento opciones o en el ar4umento bloquearmodificaciones, pero nunca en ambos. !i lo utili)a en ambos ar4umentos, se produce un error en tiempo de ejecuci+n. -&%Pessimistic* Utili)a el bloqueo pesimista para determinar c+mo se pueden 6acer cambios al objeto Recordset en un entorno multiusuario. (a p74ina que contiene el re4istro que est7 modi"icando est7 bloqueada mientras utili)a el mtodo -dit (predeterminado en espacios de trabajo Gicroso"t bet). -&%,7timistic* Utili)a el bloqueo optimista para determinar c+mo se pueden 6acer cambios al objeto Recordset en un entorno multiusuario. (a p74ina que contiene el re4istro que est7 modi"icando est7 bloqueada mientras se ejecuta el mtodo A7date. !omentarios En un espacio de trabajo Gicroso"t bet, si ob)eto 6ace re"erencia a un objeto Cuer5&e1 o Recordset de tipo *ynaset o !naps6ot o si origen 6ace re"erencia a una instrucci+n !\( o un +a%le&e1 que representa una tabla adjunta, no podr7 utili)ar d%,7en+a%le para el ar4umento tipo y si lo 6ace, se producir7 un error interceptable. !i ob)eto 6ace re"erencia a un Recordset de tipo *ynaset o !naps6ot, el Recordset nuevo es del mismo tipo ob)eto. !i ob)eto 6ace re"erencia a un objeto Recordset de tipo Table, el tipo del objeto nuevo es un objeto Recordset de tipo *ynaset. Do puede abrir objetos Recordset nuevos desde objetos Recordset de tipo &or$ard.only. Utilice la constante d%'ee!han:es en espacio de trabajo Gicroso"t bet si desea captar los cambios reali)ados mientras dos o m7s usuarios est7n modi"icando o eliminando el mismo re4istro. 1or ejemplo, si dos usuarios empie)an a modi"icar el mismo re4istro, el primer usuario que ejecute el mtodo A7date consi4ue reali)ar la operaci+n. %uando el se4undo usuario ejecute el mtodo A7date ocurre un error de tiempo de ejecuci+n. *el mismo modo, si el se4undo usuario intenta utili)ar el mtodo &elete para eliminar un re4istro y el primer usuario 6a cambiado ya el mismo, se produce un error de tiempo de ejecuci+n. En 4eneral, si al usuario se le presenta este error mientras est7 actuali)ando, su c+di4o debe actuali)ar el contenido de los campos y leer los valores recientemente modi"icados. !i se produce el error durante el proceso de eliminaci+n, el c+di4o puede mostrar al usuario los nuevos datos del re4istro junto con un mensaje que indica que se 6an modi"icado recientemente los datos. En este momento, el c+di4o puede solicitar una con"irmaci+n de que el usuario desea aFn eliminar el re4istro. 3l cerrar un Recordset utili)ando el mtodo !lose, se eliminar7 autom7ticamente de la colecci+n Recordsets.

*'emplo del m5todo 7penRecordset


Es v7lido el mismo ejemplo utili)ado para los mtodos MoveFirst? Move6ast? Move(e0t? MovePrevious.

$).$) Remo!e2tem
3plicable a: %ontrol %omboBox, %ontrol (istBox. \uita un elemento de un control 6ist4o0 o !om%o4o0. Do acepta ar4umentos con nombre.

'inta0is ob)eto.RemoveItem *ndice (a sintaxis del mtodo RemoveItem consta de las si4uientes partes: Parte &escri7cin ob)eto <equerido. Una expresi+n de objeto cuyo resultado es un objeto de la lista 3plicable a. *ndice <equerido. Un entero que especi"ica la posici+n dentro del objeto del elemento o la "ila que se va a quitar. 1ara los primeros elementos de los controles 6ist4o0 o !om%o4o0, *ndice es >. !omentarios (os controles 6ist4o0 o !om%o4o0 que est7n enla)ados a un control &ata no aceptan el mtodo RemoveItem. -2em7lo del mJtodo RemoveItem Este ejemplo utili)a el mtodo RemoveItem para quitar entradas de un cuadro de lista. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario que conten4a un control 6ist4o0 llamado (ist=, y despus presione &@ y 6a4a clic en el "ormulario. 1rivate !ub &ormA%lic2 () *im Entry, ?, Gs4 Z *eclara variables. Gs4 ; ,-a4a clic en 3ceptar para a4re4ar =>> elementos al cuadro de lista., Gs4Box Gs4 Z Guestra el mensaje. &or ? ; = To =>> Z %uenta de = a =>>. Entry ; ,Entrada , c ? Z %rea la entrada. (ist=.3dd?tem Entry Z 34re4a la entrada. Dext ? Gs4 ; ,-a4a clic en 3ceptar para quitar una de cada dos entradas., Gs4Box Gs4 Z Guestra el mensaje. &or ? ; = To @> Z *etermina c+mo quitar (ist=.<emove?tem ? Z uno de cada dos Dext ? Z elementos. Gs4 ; ,-a4a clic en 3ceptar para quitar todos los elementos del cuadro de lista., Gs4Box Gs4 Z Guestra el mensaje. (ist=.%lear Z Borra el cuadro de lista. End !ub

$).$8 Repair+ata&ase 07&'eto +B*ngine1


3plicable a: 5bjeto *BEn4ine. ?ntenta reparar una base de datos da8ada que accede a base de datos Gicroso"t bet. 'inta0is &4-n:ine.Re7air&ata%ase nombrebasededatos El ar4umento nombrebasededatos representa un tipo de datos 'trin: que es la ruta de acceso y el nombre de un arc6ivo de base de datos del motor Gicroso"t bet existente. !i se omite la ruta, s+lo se buscar7 en el directorio activo. !omentarios

*ebe cerrar la base de datos especi"icada por nombrebasededatos antes de repararla. En un entorno multiusuario, los dem7s usuarios no podr7n tener abierto nombrebasededatos mientras usted la repara. !i no est7 cerrado nombrebasededatos o no est7 disponible para uso exclusivo, se producir7 un error. Este mtodo intenta reparar una base de datos marcada como posiblemente da8ada por una operaci+n de escritura incompleta. Esto puede ocurrir si una aplicaci+n que utili)a el motor de base de datos Gicroso"t bet termina inesperadamente debido a un corte en el suministro elctrico o un problema de 6ard$are. (a base de datos no se marcar7 como posiblemente da8ada si utili)a el mtodo !lose o si sale de la aplicaci+n de una manera normal. El mtodo Re7air&ata%ase tambin intenta validar todas las tablas del sistema y todos los ndices. !e descartan los datos que no se puedan reparar. !i no se puede reparar la base de datos, se produce un error interceptable. %uando intente abrir o compactar una base de datos da8ada, normalmente se producir7 un error interceptable. En al4unas situaciones, sin embar4o, puede que no se detecte una base de datos da8ada y no se produ)ca nin4Fn error. Es conveniente o"recer a los usuarios un mtodo de ejecutar el mtodo Re7air&ata%ase en su aplicaci+n, si la base de datos se comporta de manera impredecible. 3l4unos tipos de bases de datos se pueden da8ar si un usuario termina una aplicaci+n sin cerrar los objetos &ata%ase o Recordset y el motor de base de datos Gicroso"t bet, Gicroso"t #indo$s no tienen la oportunidad de vaciar las memorias de cac6 de datos. 1ara evitar que se da8en las bases de datos, estable)ca procedimientos para cerrar las aplicaciones y apa4ar los sistemas que ase4uren que todas las p74inas de la memoria cac6 est7n 4uardadas en la base de datos. En al4unos casos, puede que sean necesarias "uentes de alimentaci+n ininterrumpida para evitar prdidas de datos por las "luctuaciones del suministro elctrico. (ota *espus de reparar una base de datos, tambin es conveniente compactar la misma utili)ando el mtodo !om7act&ata%ase para de"ra4mentar el arc6ivo y recuperar espacio en disco.

*'emplo del m5todo Repair+ata&ase


Este ejemplo intenta reparar la base de datos llamada Deptuno.mdb. !ub <epair*atabaseH() *im errBucle 3s Error ?" Gs4Box(,U*esea reparar la base de datos DeptunoV,, vbIesDo) ; vbIes T6en *BEn4ine.<epair*atabase ,Deptuno.mdb, Gs4Box ,j&in del procedimiento repararf, End ?" End !ub

$).$9 "et-ocus
3plicable a %ontrol %6ec2Box, %ontrol %omboBox, %ontrol %ommandButton, 5bjeto &orm %ontroles -!crollBar y 0!crollBar, %ontrol (istBox%ontrol 5ptionButton, %ontrol 1ictureBox, %ontrol TextBox. Gueve el en1oIue al control o "ormulario especi"icado.

"intaDis
ob)eto.'etFocus El marcador de posici+n ob)eto representa una e07resin de o%2eto que da como resultado un objeto de la lista 3plicable a. !omentarios El objeto debe ser un objeto Form o un control que pueda recibir el en"oque. *espus de invocar el mtodo 'etFocus, cualquier entrada del usuario se diri4e al "ormulario o al control especi"icado.

El en"oque s+lo se puede mover a un "ormulario o un control visible. %omo un "ormulario y los controles de un "ormulario no son visibles 6asta que el evento (oad del "ormulario 6a terminado, no puede usar en su propio evento (oad el mtodo 'etFocus para mover el en"oque al "ormulario que se est7 car4ando a menos que use primero el mtodo 'ho< para mostrar el "ormulario antes de que el procedimiento de evento &ormA(oad 6aya terminado. Tampoco puede mover el en"oque a un "ormulario o un control si su propiedad -na%led es False. !i la propiedad -na%led se 6a establecido a False en tiem7o de diseLo, primero debe establecerla a +rue antes de poder recibir el en"oque mediante el mtodo 'etFocus.

*'emplo del m5todo "et-ocus


3l 6acer clic2 en un bot+n de comando, setea el "oco a la caja de texto txt%odi4o 1rivate !ub cmd=A%lic2() Txt%odi4o.!et"ocus End !ub

$).$= "how
3plicable a: 5bjeto &orm. 'inta0is ob)eto.'ho< estilo/ formulario_propietario (a sintaxis del mtodo 'ho< consta de las si4uientes partes: Parte &escri7cin ob)eto 5pcional. Una expresi+n de objeto cuyo resultado es un objeto de la lista 3plicable a. !i se omite ob)eto, se supone que ob)eto es el "ormulario asociado con el m+dulo de "ormulario activo. estilo 5pcional. Un entero que determina si el "ormulario es modal o no modal. !i estilo es >, el "ormulario es no modal9 si estilo es =, el "ormulario es modal. formulario_propietario 5pcional. Una expresi+n de cadena que especi"ica el componente que ,posee, el "ormulario que se muestra. 1ara los "ormularios est7ndar de 0isual Basic, utilice la palabra clave Me. !omentarios !i el "ormulario especi"icado no est7 car4ado cuando se invoca el mtodo 'ho<, 0isual Basic lo car4a autom7ticamente. %uando 'ho< presenta un "ormulario no modal, continFa con la ejecuci+n del c+di4o que 6aya a continuaci+n. %uando 'ho< presenta un "ormulario modal, el c+di4o que 6ay a continuaci+n no se ejecuta 6asta que el "ormulario se oculta o se descar4a. %uando 'ho< presenta un "ormulario modal, no 6ay entradas (de teclado o del mouse) excepto sobre los objetos del "ormulario modal. El pro4rama debe ocultar o descar4ar los "ormularios modales (normalmente como respuesta a al4una acci+n del usuario) antes de que pueda producirse la entrada en otro "ormulario. 3unque los dem7s "ormularios de la aplicaci+n est7n des6abilitados cuando se presenta un "ormulario modal, los de las dem7s aplicaciones no lo est7n. El "ormulario inicial de una aplicaci+n se muestra autom7ticamente despus de invocar su evento (oad.

-2em7lo del mJtodo 'ho< Este ejemplo utili)a el mtodo 'ho< para mostrar un "ormulario oculto. 1ara probar este ejemplo, pe4ue el c+di4o en la secci+n *eclaraciones de un "ormulario y despus presione &@ y 6a4a clic en el "ormulario. 1rivate !ub &ormA%lic2 () *im Gs4 Z *eclara variable. -ide Z 5culta el "ormulario. Gs4 ; ,-a4a clic en 3ceptar para que vuelva a aparecer el "ormulario., Gs4Box Gs4 Z Guestra el mensaje. !6o$ Z Guestra de nuevo el "ormulario. End !ub

$).$> @pdate 07&'eto recordset1


3plicable a 5bjeto <ecordset. :uarda el contenido del bF"er de copia en un objeto Recordset de tipo *ynaset o Table especi"icado.

"intaDis
recordset.A7date Etipo, obligar F (a sintaxis del mtodo A7date tiene las si4uientes partes. Parte &escri7cin 0ecordset Una variable de objeto que representa un objeto Recordset abierto que se puede actuali)ar. #ipo 5pcional. Una constante que indica el tipo de actuali)aci+n, como se especi"ica en 0alores (s+lo espacios de trabajo 5*B%*irect). &bligar 5pcional. Un valor de tipo 4oolean que indica si se pueden o no obli4ar los cambios en la base de datos, sin tener en cuenta si los datos base se 6an cambiado por otro usuario desde la llamada al mtodo Add(e<, &elete o -dit. !i es +rue, los cambios se "uer)an y los cambios 6ec6os por otros usuarios se sobrescriben. !i es False (predeterminado), los cambios 6ec6os por otros usuarios mientras la actuali)aci+n est7 pendiente provocar7n que "alle la actuali)aci+n para aquellos cambios con"lictivos.

Comentarios
Utilice A7date para 4uardar el re4istro activo y los cambios que 6aya e"ectuado en l. Precaucin (os cambios reali)ados en el re4istro activo se perder7n si: Utili)a el mtodo -dit o Add(e< y a continuaci+n, pasa a otro re4istro sin actuali)arlo previamente mediante A7date. Utili)a -dit o Add(e< y, a continuaci+n, vuelve a usar -dit o Add(e< sin utili)ar previamente A7date. %ierra el conjunto de re4istros a los que 6ace re"erencia recordset sin utili)ar primero A7date.

%ancela la operaci+n -dit utili)ando el mtodo !ancelA7date.

1ara modi"icar un re4istro, utilice el mtodo -dit para copiar el contenido del re4istro activo al bF"er de copia. !i no utili)a -dit en primer lu4ar, se producir7 un error cuando utilice A7date o intente cambiar el valor de un campo. En un espacio de trabajo Gicroso"t bet, cuando el objeto Recordset de la propiedad 6oc;-dits establecida como +rue (bloqueo pesimista) en un entorno multiusuario, el re4istro permanecer7 bloqueado desde el momento en que se utili)a -dit 6asta que se ejecuta el mtodo A7date o se cancele la edici+n. !i la con"i4uraci+n de la propiedad 6oc;-dits es False (bloqueo optimista), el re4istro se bloquea y se compara con el re4istro previamente modi"icado justo antes de se actuali)ado en la base de datos. !i 6a cambiado el re4istro desde que utili)+ el mtodo -dit, la operaci+n A7date "alla.. 1ara que la operaci+n A7date continFe con los cambios, utilice de nuevo el mtodo A7date. 1ara volver al re4istro, tal como lo cambi+ el otro usuario, actualice el re4istro activo usando los mtodos Gove >. (ota 1ara a4re4ar, modi"icar o eliminar un re4istro, debe 6aber un ndice Fnico en el re4istro del ori4en de datos base. !e obtiene no lo 6ay, se producir7 un error ,1ermiso dene4ado, en la llamada al mtodo Add(e<, &elete o -dit en un espacio de trabajo Gicroso"t bet, se producir7 un error ,3r4umento no v7lido, en la llamada al mtodo A7date en un espacio de trabajo 5*B%*irect. -2em7lo del mJtodo A7date Es v7lido el ejemplo del mtodo Add(e<.

También podría gustarte