Curso de Visual Basic Parte 1
Curso de Visual Basic Parte 1
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%
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%
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
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
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 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 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.
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.
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 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:
,., 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%
'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%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...
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% 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)
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.
*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
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#.../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.
%ase = %opy3ctive%ontrol %ase Q %lear3ctive%ontrol %ase L 1aste3ctive%ontrol %ase Else "rm&ind.!6o$ End !elect End !ub
5bserve que la estructura 'elect !ase evalFa una expresi+n cada ve) al principio de la estructura.
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.
(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:
# -$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.
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.
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.
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
Eventos Gouse*o$n y GouseUp Evento GouseGove Evento 5(E%omplete*ra4 Evento 5(E*ra4*rop Evento 5(E*ra45ver
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:
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
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?*
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.
$,.$ -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.
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
$,.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
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
+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.
$(., 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.
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
$(.) <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
$(.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.
$(.= 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
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.
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
&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.
!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.
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
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
(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
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
"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.
'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.
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.
$).$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
"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
'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.
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.
$).$) 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
*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.
$).$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.
$).$= "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
"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.
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<.