Académique Documents
Professionnel Documents
Culture Documents
4
CONTROLES PARA MOSTRAR IMGENES
CREAR CONTROLES EN TIEMPO DE EJECUCIN
EL EXAMINADOR DE OBJETOS
_________________________________________________________________
Una imagen representa una figura, bien natural (tipo fotografa) o sinttica. Para presentar una
imagen es necesario hacerlo sobre un objeto que la admita. Los objetos que admiten una imagen
son:
Formularios
PictureBox
Image
Existen mas controles grficos que se irn viendo a lo largo del curso. Estos tres son los mas
usados y con los que comenzaremos a trabajar.
Para mostrar una imagen en cualquiera de estos objetos, es necesario especificarlo en su
propiedad Picture. La forma de especificarle al objeto la imagen que debe presentar puede
hacerse de dos formas:
Por ejemplo, si tenemos un formulario llamado Form1 y queremos rellenarlo con una imagen
contenida en el fichero de Windows metafile DOLLAR.WMF que se encuentra en el directorio
C:\VB\METAFILE\BUSINESS, deberemos ejecutar la instruccin:
Form1.Picture = LoadPicture (C:\VB\METAFILE\BUSINESS\DOLLAR.WMF)
Para "descargar" esa imagen de ese formulario, basta con ejecutar la misma instruccin sin
fichero alguno:
Form1.Picture = LoadPicture ( )
Tambin pueden tomar la imagen desde otro control de imagen, mediante un procedimiento de
Intercambio Dinmico de Datos (DDE) (Solo el PictureBox)
Puede tambin meter una imagen en una variable, y luego poner en uno de los controles citados
anteriormente la imagen guardada en la variable. Este mtodo es muy rpido, ya que no necesita
acceder al disco para buscar una imagen, pero emplea mucha memoria RAM, ya que la variable )
o variables conteniendo la(s) imgenes estn en la RAM.
Para ello debemos declarar una o varias variables tipo Picture, y meter en ellas una imagen
mediante el mtodo LoadPicture. Vea en el capitulo 7 (Mtodos Grficos - Mtodo LoadPicture) un
ejemplo muy ilustrativo.
EL FORMULARIO
Ya hemos visto lo que es el Formulario. Simplemente podemos aadir a lo ya dicho, que un
formulario tiene la propiedad Picture, con lo que podemos poner como fondo un bit-map, un
fichero de icono ( .ICO) o un Metarchivo (.WMF). Un fondo grfico sobre el Formulario puede
LSB
Captulo 4
Pgina 1
convertir una aplicacin de buena a excelente. No intente nunca mejorar una aplicacin mediocre
con un fondo artstico en un Formulario.
Adems de presentar imgenes, se puede escribir texto en un formulario. Para ello se utiliza el
mtodo grfico Print que veremos en el captulo de mtodos grficos
CONTROL PICTURE BOX
Este objeto se encuentra en la caja de herramientas estndar:
Este objeto permite presentar todo tipo de ficheros grficos (.BMP, WMF, .ICO, .CUR)
Las dimensiones del PictureBox se establecen en el diseo o mediante programa, variando las
propiedades Height y Width. Tambin puede cambiarse su posicin mediante las propiedades Top
y Left. Dispone de una propiedad, Align que permite colocarlo adosado en la parte superior.
Inferior o a uno de los lados del formulario que lo contiene.
El Control PictureBox puede ser destino de los datos de un enlace DDE. (Los datos sern,
lgicamente, grficos. Por ello, tiene las propiedades LinkMode, LinkItem, LinkTimeout y
LinkTopic.
Tambin puede tomar el dato del grfico de una Base de Datos. (A travs de un control Data o un
objeto Recordset o rdoResultset)
Las propiedades de un PictureBox son:
Align
ClipControls
DrawWidth
ForeColor
LinkMode
Negotiate
ScaleWidth
WhatThisHelp
Appearance
DataField
Enabled
Height
LinkTimeout
Picture
TabIndex
Width
Autoredraw
Autosize
DataSource
DragIcon
FillColor
FiilStyle
HelpContextID Index
LinkTopic
MouseIcon
ScaleHeight ScaleLeft
TabStop
Tag
Backcolor
DragMode
Font
Left
MousePointer
ScaleMode
Top
BorderStyle
DrawStile
Fontransparent
LinkItem
Name
ScaleTop
Visible
Change
KeyPress
DblClick
DragDrop
DragOver
GotFocus
Al igual que en el formulario, se puede escribir texto en un PictureBox, utilizando el mtodo Print.
El control Picture puede ser contenedor de otros controles. Esto quiere decir que puede poner otros
controles dentro del picture, y esos controles tendrn un comportamiento especial en ciertos casos.
(Ver ms adelante el control Option)
CONTROL IMAGE
LSB
Captulo 4
Pgina 2
Este control permite presentar todo tipo de ficheros grficos (.BMP, WMF, .ICO, .CUR)
El control Image no puede ser destino de una comunicacin DDE. Puede tomar la imagen de una
base de datos, bien a travs de un control Data o a travs de un objeto Recordset.
El control Image utiliza menos recursos del sistema y repinta con ms rapidez que un control
PictureBox, pero slo admite una parte de las propiedades, los eventos y los mtodos de
PictureBox. Use la propiedad Stretch para determinar si el grfico se escala para que se ajuste al
control o viceversa. Poniendo esta propiedad a True el grfico se adaptar a las dimensiones del
control Image. Si se pone a False, el control Image tomar las medidas del grfico que contenga.
Si el grfico es un bit-map (Fichero .BMP), con la propiedad Stretch a True podemos variar el
tamao del bit-map, variando las propiedades Width y Height del control Image, propiedades que
se pueden cambiar en tiempo de ejecucin. Si esta propiedad est a False, el tamao del bit-map
no cambiar, presentndose solamente una porcin del bit-map, caso que el control Image sea
menor que el tamao del bit-map, o sobrar espacio en el control, en caso contrario.
Un Image es transparente, es decir, deja ver el fondo del formulario en las partes no ocupadas por
su grfico. Por lo tanto, no tendran sentido en este control propiedades como Backcolor,
FillColor, o FillStyle.
Las propiedades de un Image son:
Appearance
Enabled
Name
WhatThisHelp
BorderStyle
Height
Picture
Width
Datafield
Index
Stretch
DataSource
Left
Tag
DragIcon
MouseIcon
Top
DragMode
MousePointer
Visible
GotFocus
MouseDown
DblClick
DragDrop
MouseUp
DragOver
(PictureBox solamente)
Permite colocar el control en el borde superior (Align Top), en el inferior (Align
Bottom), en el izquierdo (Align Left) o en el derecho (Align Right) del formulario que
lo contiene. Para no alinearlo con ningn borde basta con poner la propiedad Align a
0-None.
Cuando se adosa a uno de los bordes, el tamao del control se ajusta
automticamente a la anchura o altura del formulario.
LSB
Captulo 4
Pgina 3
Sintaxis
NombrePictureBox.Align [= nmero]
nmero
0-None
1-Top
2-Bottom
3-Left
4-Right
Se puede usar propiedad Align para crear rpidamente una barra de herramientas o
una barra de estado en la parte superior o inferior de un formulario. Cuando un usuario
cambie el tamao del formulario, un control con la propiedad Align establecida a 1 2
modificar su tamao de forma automtica para ajustarse a la anchura del formulario.
De la misma forma se puede crear barras de herramientas a los lados izquierdo o
derecho de un formulario. Si en un formulario hay dos barras de herramientas, una en
la parte superior (o inferior) y otra en un lateral, la de la parte superior o inferior es la
que se extiende hasta la esquina, teniendo preferencia sobre las colocadas
verticalmente a la izquierda o a la derecha.
Al ser el PictureBox un contenedor, puede poner un PictureBox en la parte superior
de un Formulario, y colocar en este PictureBox varios controles Image, a los que se
les puede poner un icono. De esta forma realizamos una barra de herramientas.
Negotiate
(PictureBox solamente)
Esta propiedad le permite mostrar o no mostrar el PictureBox dentro de un formulario
donde tiene una barra de herramientas. No est disponible en tiempo de ejecucin.
Esta propiedad no es muy usual, por lo que omitimos una mayor explicacin. Recurra
a la ayuda para obtener mas detalles
Appearance
Autoredraw
(PictureBox solamente)
Permite que el Formulario o PictureBox (El control Image no tiene esta propiedad),
mantenga siempre la imagen o el texto presente. Si Autoredraw est a False, el control
no presentar las imgenes o texto que no se hayan dibujado realmente (caso por
ejemplo de un formulario minimizado) o que se hayan borrado por haber sido puestas
tras otro control.
Autosize
LSB
(PictureBox solamente)
Captulo 4
Pgina 4
(PictureBox solamente)
Color de fondo. Igual que otros controles
BorderStyle
(PictureBox e Image)
Tipo de borde. Ninguno o fijo. Igual que otros controles.
ClipControls
(PictureBox solamente)
Devuelve o establece un valor que determina si los mtodos grficos en eventos Paint
vuelven a dibujar el objeto entero o solamente las reas ltimamente expuestas. Si
esta propiedad es True, un mtodo grfico repintar todo el Picture. Si es False,
solamente repintar la zona de la imagen que ha variado.
DataField
DataSource
(PictureBox e Image)
(PictureBox e Image)
Ver con mas detalles estas propiedades cuando estudie los Objetos enlazados a
Datos. Le van a permitir presentar una imagen desde una base de datos. Le permitir
tambin introducirla de una forma muy sencilla en la base de datos.
DragIcon
DragMode
(PictureBox e Image)
DrawMode
DrawStyle
DrawWidth
(PictureBox solamente)
(PictureBox solamente)
(PictureBox solamente)
Enabled
(PictureBox e Image)
(PictureBox solamente)
Index
(PictureBox e Image)
(PictureBox solamente)
LSB
Captulo 4
Pgina 5
MouseIcon, MousePointer
(PictureBox e Image)
donde :
objeto
Nombre del objeto PictureBox o Image
ruta
Expresin de cadena que especifica la ruta y el nombre del archivo que
contiene el icono personalizado. As podemos cargar un icono de los existentes en el
disco. Ej. Image1.MouseIcon = LoadPicture("C:\vb\icons\computer\disk05.ico")
imagen
Propiedad Picture de un objeto Form, de un control PictureBox o de un
control Image, o nombre de una variable tipo Picture. De esta forma podemos cargar
como un icono el grfico que tengamos en otro objeto o en una variable tipo Picture.
Ej. Image1.MouseIcon = Picture1.picture
La propiedad MouseIcon proporciona un icono de mouse personalizado que se utiliza
cuando el valor de la propiedad MousePointer es 99.
MousePointer. Establece el tipo de puntero de mouse que aparece cuando se pasa el
puntero del ratn por encima de un objeto en tiempo de ejecucin.
Sintaxis
objeto.MousePointer [= valor]
objeto
Nombre del objeto PictureBox o Image
valor
Nmero entero que especifica el tipo de puntero de mouse que aparece,
segn se describe mas adelante.
Las opciones para valor son:
0 (Predeterminado) Forma que determine el objeto.
1 Flecha.
2 Cruz (puntero en forma de cruz).
3 Forma de I.
4 Icono (pequeo cuadrado dentro de otro cuadrado).
5 Tamao (flecha de cuatro puntas: norte, sur, este y oeste).
6 Tamao NE SO (flecha doble apuntando al nordeste y al sudoeste).
7 Tamao N S (flecha doble apuntando al norte y al sur).
8 Tamao NO SE (flecha doble apuntando al noroeste y al sudeste).
9 Tamao O E (flecha doble apuntando al oeste y al este).
10 Flecha hacia arriba.
11 Reloj de arena (espera).
12 No soltar.
13 Flecha y reloj de arena.
14 Flecha e interrogacin.
15 Tamao de todo (personalizable en Microsoft Windows NT 3.51)
99 Icono personalizado especificado en la propiedad MouseIcon
anteriormente.
LSB
Captulo 4
explicada
Pgina 6
Name
(PictureBox e Image)
Picture
(PictureBox e Image)
objeto.ScaleHeight [= valor]
objeto.ScaleWidth [= valor]
objeto
valor
objeto.ScaleMode [= valor]
LSB
Captulo 4
Pgina 7
5 Pulgada.
6 Milmetro.
7 Centmetro.
Utilizando las propiedades relacionadas ScaleHeight, ScaleWidth, ScaleLeft y
ScaleTop, puede configurar un sistema de coordenadas completo, con coordenadas
positivas y negativas. Estas cuatro propiedades de escala se relacionan con la
propiedad ScaleMode de la siguiente forma:
Al establecer un valor en cualquier otra propiedad de escala, en ScaleMode se
establece automticamente 0.
Al establecer en ScaleMode un nmero mayor que 0, ScaleHeight y ScaleWidth
cambian a la nueva unidad de medida, y en ScaleLeft y ScaleTop se establece 0.
Adems, los valores de CurrentX y CurrentY cambian para reflejar las nuevas
coordenadas del punto actual.
Stretch
objeto.Stretch [= lgico]
objeto
Nombre del control Image
lgico
Expresin booleana que especifica si el grfico adapta su tamao, segn
se describe a continuacin.
True
False
Si Stretch tiene el valor True, al cambiar el tamao del control tambin se cambiar el
del grfico que contenga. Cuando aumenta el tamao del control, mantiene las nuevas
medidas aunque se le introduzca un grfico de menor tamao. Debe controlarse por
programa el tamao del mismo.
TabIndex, TabStop
LSB
Captulo 4
Pgina 8
IMAGE LIST
Lo ver mucho mas ampliamente en un captulo posterior. Se incluye en este captulo para que lo
pueda ir usando.
Este control no est normalmente en la caja de herramientas. Hay que introducirlo mediante los
Proyecto | Componentes y pertenece al grupo Microsoft Windows Common Controls
(COMCTL32.OCX) (Vea Nota 1)
Este control nos permite almacenar varias imgenes. Es, tal como indica su nombre, como un
ListBox pero que en vez de contener textos, contiene imgenes.
La utilidad de este control es para almacenar en l distintas imgenes, y servirlas desde l a otro
control, un PictureBox o un control Image, sin necesidad de tener que acceder a leerlas en el
disco, que conllevara una importante prdida de tiempo si el cambio de imgenes debe ser rpido.
Este control es necesario para almacenar las imgenes que se mostrarn en los iconos de la barra
de herramientas. Ver mas adelante como se realiza una barra de herramientas (La barra de
herramientas solo est disponible para la versin de 32 Bits)
Un ImageList permite tener varias imgenes dentro de l, pero este control no las presenta.
Solamente sirve de almacn para pasarlas rpidamente a otro control (PictureBox, p.e.) que ser
el que las presenta en pantalla.
En la siguiente figura, pueden verse las propiedades de un ImageList con varias imgenes
cargadas.
LSB
Captulo 4
Pgina 9
Para introducir imgenes en el control ImageList deberemos acceder a sus propiedades, bien
mediante F4 y luego haciendo click sobre Personalizado, bien pulsando el botn derecho del ratn
sobre el icono del control. Aparecer un cuadro donde podemos insertar imgenes
Captulo 4
Pgina 10
LSB
Captulo 4
Pgina 11
Puede ver que en el cuadro ImageList aparece el nombre de un ImageList. Al desplegar la lista
aparecern todos los ImageList que existan en el formulario. El ImageList debe estar en el mismo
formulario que el Toolbar. Deber elegirse el ImageList que contenga las imgenes de los iconos
que queremos introducir en el Toolbar.
Este cuadro nos permite tambin introducir la forma que adoptar el puntero del ratn cuando
entre en el Toolbar (MousePointer), si el Toolbar aparece por defecto habilitado o deshabilitado
(Enabled) y si muestra o no un rtulo programable al pasar el ratn por encima de cada botn del
Toolbar. (ShowTips). (El uso de estos pequeos rtulos pueden hacer una aplicacin muy bonita)
La propiedad AllowCustomize permite, si es True, cambiar el orden de los botones e introducir
separadores (vea evento DobleClick).
En el cuadro botones podemos introducir los datos deseados para cada uno de los botones que
compondrn la coleccin Buttons.
Para insertar un nuevo botn hay que hacer click sobre Insertar botn e insertar un nuevo botn
inmediatamente despus del que figura en la propiedad Index (en la figura del ejemplo, lo
LSB
Captulo 4
Pgina 12
insertara en segundo lugar, no en el ltimo lugar como podra creerse). Tambin podemos
eliminar un botn haciendo click sobre Eliminar botn.
El Caption (opcional) es la palabra que figurar debajo del icono del botn.
Un botn se identifica por su ndice. ( Toolbar1.buttons(1) )
La propiedad Key es un nombre que se puede aadir a cada botn. Esta propiedad sirve para
identificar el botn que se ha pulsado, pero no para nombrar al botn.
La propiedad Value es el valor por defecto, con el que aparecer el botn al comienzo de la
aplicacin. (Unpressed, no pulsado, Pressed, pulsado).
La propiedad Style define el tipo de botn :
0 - Default
1 - Check
2 - Button Group
3 - Separator
4 - PlaceHolder
ToolTipText es el texto que aparecer al lado del botn cada vez que se ponga el cursor del ratn
sobre el botn. Para que aparezca debe estar habilitada la propiedad ShowTips.
Image es el nmero de la imagen en el ImageList.
El control Toolbar tambin puede realizarse en tiempo de ejecucin. Para introducir u botn en el
Toolbar hay que crear el botn y aadirlo a la coleccin Buttons de Toolbar. Podemos hacerlo en
una sola instruccin :
Set NombreBotn = NombreToolbar.Buttons.add ( [Indice], [Key], [Caption], [Style], [Imagen])
NombreBotn puede ser cualquier nombre (es el nombre del objeto botn)
NombreToolbar es el nombre del Toolbar
Indice es el nmero de orden de ese botn dentro del Toolbar
Key es el valor de la propiedad Key del botn. Este valor debe ser nico para cada botn.
Style es un nmero del 0 al 4 con el tipo de botn. Vea lista mas arriba
Imagen es el nmero de la imagen para ese botn, dentro del ImageList que las contiene.
Los botones pueden habilitarse y deshabilitarse usando la propiedad Enabled (True / False).
Recuerde que los botones se identifican por su ndice :
Toolbar1.Buttons(Indice).Enabled = False
Para saber que botn se ha pulsado, puede leerse la propiedad Key :
Text1.Text = Button.Key
Con la lectura de la propiedad Key, y la sentencia Case o If ... Then podemos iniciar la parte de la
aplicacin asociada a cada botn.
LSB
Captulo 4
Pgina 13
LSB
Captulo 4
Pgina 14
Este control es muy parecido a la barra de herramientas, y suele usarse, colocndolo en la parte
inferior de la ventana, para indicar el proceso que est en curso en la aplicacin. La barra de
estado, control StatusBar se introduce en la caja de herramientas al mismo tiempo que el control
Toolbar, mediante el control personalizado mltiple Microsoft Windows Common Controls
(COMCTL32.OCX).
La barra de estado puede albergar hasta 16 paneles, que pueden contener texto o grficos.
Tambin pueden contener informacin del Hardware, tal como el estado de la tecla Bloqueo de
Maysculas, Bloqueo del teclado numrico, tecla Insert activada, tecla Scroll Lock activada,
o mostrar la fecha y la hora
La barra de estado puede configurarse como de un solo panel o de mltiples paneles. (Propiedad
Style. 0=mltiples paneles, 1= panel nico)
Las dimensiones de cada panel pueden configurarse como fijas o ajustadas al tamao del texto o
imagen que presentan.
Las propiedades pueden establecerse en tiempo de diseo, mediante el siguiente cuadro.
LSB
Captulo 4
Pgina 15
Donde PanelNuevo es el nombre con el que se va a conocer ese panel que acabamos de crear.
PanelNuevo debe declararse como variable objeto Panel donde sea necesario segn el mbito que
le queramos dar. De esta forma, una vez creado, nos podremos referir a ese panel simplemente
citndolo por su nombre (En este caso, PanelNuevo)
Los trminos [ndice],[key],[Text],[estilo],[grfico]
creacin del panel se explican a continuacin.
Set PanelNuevo = statusbar1.Panels.Add(pepe, "Contenido del Key " & Str(pepe), "Texto " &
Str(pepe), , LoadPicture("C:\vb\icons\comm\net09a.ico"))
Estos son los controles grficos mas importantes. Ver a lo largo del curso que existen otros, y ms
que podr encontrar entre diferentes suministradores de controles, ya que VB ha dejado una puerta
abierta para realizar controles a medida. Existen varias empresas de software dedicadas a la
fabricacin de controles personalizados, y en el aspecto de controles grficos, podr encontrar una
amplia gama de fabricantes y controles. Puede obtener muchos controles en el CD-ROM que
acompaa a varias revistas especializadas en programacin VB, y a travs de Internet.
LSB
Captulo 4
Pgina 16
Los ademdums se fueron introduciendo una vez que la Gua del Estudiante estuvo
casi terminada. Los temas tratados en los ademdums no constituyen en s mismos
materia suficiente para un nuevo captulo, ni se acoplan lgicamente a ninguno de los
captulos escritos. Por lo tanto, se ha decidido alojarlos en captulos que no eran
demasiado gruesos, aunque el contenido de los ademdums no encaje ni por su
contenido, ni por los conocimientos anteriores. No se preocupe que algunos
ademdums no los entienda. Posiblemente estemos usando un lenguaje que no se ha
visto todava en los captulos estudiados. Los podr repasar cuando lo considere
oportuno, una vez vaya avanzando en el curso.
Desde mis comienzos en la actividad educativa de esta asignatura, los alumnos siempre me
preguntaron por la posibilidad de crear controles en tiempo de ejecucin. Supongo que exista
alguna razn que yo desconozco para ello. Y digo esto porque no he tenido la necesidad de ello en
ninguno de mis proyectos, y no han sido precisamente pocos.
Quiero decir con esto que la creacin de controles en tiempo de ejecucin es algo muy llamativo,
pero de escaso sentido prctico. Sean los alumnos los que busquen utilidad a ello, y yo me limito a
mi obligacin de enserselo.
En anteriores versiones de VB era un proceso un poco tedioso. Haba que crear una matriz de
controles y aadir en tiempo de ejecucin tantos controles nuevos a esa matriz como necesitemos.
Era complicado. Haba que meter un control y ponerle Index = 0. Se le pone la propiedad Visible
= False y ya tenemos una matriz de controles. Una matriz de un solo control, pero al tener la
propiedad Index = 0 ya era una matriz. Ya en ejecucin, se utilizada el mtodo Load para crear los
controles que necesitamos. Los nuevos elementos de la matriz tendrn todas las propiedades del
elemento inicial, es decir, las del elemnto que tienen indice 0. Al ser una matriz, todos los controles
comparten el cdigo de sus procedimientos.
Para crear por ejejmplo, varios botones de comando, introduciremos primero uno con Index = 0
cmdBotonInicial(0) y cuando queramos crear un botn nuevo, invocamos el mtodo Load.
Recuerde que el nuevo botn tendr las mismas propiedades que el objeto inicial, por lo tanto sus
mismas propiedades Left y Top. Resultado: el nuevo botn queda completamente solapado con el
inicial, por lo que habr que cambiarle de posicin y coocarlo en las coordenadas deseadas.
Una de las propiedades que no se pasan al nuevo control es la propiedad Visible. Esta siempre
comienza a False. Por lo tanto tambin hay que ponerla a True para que veamos el nuevo control.
Este podra ser un cdigo para crear un botn de comando
Load cmdBotonInicial(1)
cmdBotonInicial(1).Visible = True
cmdBotonInicial(1).Left = cmdBotonInicial(0).Left + 1000
Es un poco complicado. Se suele hacer esto para que aparezca un control justamente donde
hacemos clic con el ratn sobre el formulario. Dejo al alumno la posibilidad de jugar con este
mtodo.
Veamos un mtodo ms sencillo.
LSB
Captulo 4
Pgina 17
Es la referencia del nuevo control devuelta por el mtodo Add. Debe ser
una variable tipo Control declarada previamente. Le recomiendo
variable tipo objeto tenga el mismo nombre que le va a dar al
parmetro Name. Le ahorrar muchas confusiones.
NombredelFormulario
ProgID
citado
Name
Es el nombre que va a tener el control. Le repito lo de ms atrs. Ponga
aqu la misma cadena que en NombredelControl.
Container
Es el nombre del contenedor de ese control si es que se quiere meter
dentro de un contenedor que a su vez est dentro del formulario. Un
contenedor de controles puede ser un PictureBox o un Frame. Aqu se
pondra el nombre del ese contenedor que debe existir en el formulario.
Vamos a ver como se puede declarar una variable tipo Control. Puede hacerlo segn estos tres
ejemplos, en el primero se declara que NuevoBoton es un control, (declaracin suficientemente
vlida ya que posteriormente al crearlo, le diremos que ese control es precisamente un
CommandButton) , en la segunda ya lo declaramos como objeto CommandButton, y la tercera es
la declaracin de un Objeto TextBox:
Dim NuevoBoton As Control
Dim NuevoBoton As CommandButton
Dim NuevoTextBox As TextBox
Esta declaracin es suficiente si no va a poner cdigo en los procedimientos de ese control. El
problema es que con esa declaracin no se puede introducir cdigo. Para ello debe declararse de
otra forma:
Private WithEvents NuevoBoton As CommandButton
Mediante esta declaracin (Que debe ponerse en la seccin de declaraciones del formulario), no
solamente estamos declarando que NuevoBoton es un CommandButton, sino que tendr los
mismos eventos (WithEvents) que un CommandButton.
El cdigo para crear estos dos controles es el siguiente:
(En el ejemplo se ha puesto en el procedimiento click de un botn de comando)
Set NuevoBoton = Me.Controls.Add("VB.CommandButton", "NuevoBoton1", Picture1)
Set NuevoTextBox = Me.Controls.Add("VB.TextBox", "NuevoTextBox", Picture1)
NuevoBoton.Visible = True
NuevoBoton.Left = 100
LSB
Captulo 4
Pgina 18
NuevoBoton.Top = 120
NuevoBoton.Caption = Soy un Botn
NuevoTextBox.Visible = True
NuevoTextBox.Left = 2000
NuevoTextBox.Top = 100
Ahora vamos a introducir el cdigo en el procedimiento Click del botn de comando. Para ello
vamos a Herramientas | Agregar Procedimiento y tecleamos el nombre del procedimiento:
NuevoBoton_Click. Continuamos escribiendo el cdigo deseado en ese nuevo procedimiento que
acabamos de crear.
MsgBox "Esto Funciona"
Ejecutamos el programa y vemos que efectivamente, una vez creado el botn, al hacer click sobre
l sale el Mensaje Box. Volvamos a ver el cdigo. Cuando introducimos un procedimiento nuevo
creado por nosotros, ese procedimiento aparece en el desplegable de la derecha de la ventana de
cdigo. En el desplegable de la parte izquierda aparecen solamente los nombres de los controles
existentes en el formulario. Pero Oh sorpresa!, el procedimiento NuevoBoton_Click no est en el
desplegable de la parte derecha. Est en la parte izquierda, y como si fuese un botn que
realmente existe en tiempo de diseo. Ya hemos introducido cdigo en el botn recin creado.
Para el TextBox no ha hecho falta declararlo con la segunda declaracin, ya que no va a contener
cdigo. Podemos cambiarle las propiedades, estre ellas su propiedad Text:
NuevoTextBox.Text = "Hola Mi Amor, yo soy tu Lobo"
Texto que aparecer en el TextBox como si se tratase de un TextBox introducido durante el diseo.
Lgicamente, si ejecutamos la linea anterior antes de crear el TextBox dar un error.
Hay formas ms complicadas de crear controles, pero creo que con esta le basta. E insisto que
nunca me he visto en la necesidad de crear controles (lo cual no demuestra nada, lo reconozco)
Quitar controles
Para quitar controles agregados dinmicamente, se utiliza el mtodo Remove. Solamente se
pueden quitar los controles agregados con el mtodo Add (a diferencia de los controles agregados
con la instruccin Load, que se quitan mediante Unload ).
El siguiente ejemplo quita el control NuevoTextBox agregado dinmicamente:
Me.Controls.Remove "NuevoTextBox"
LSB
Captulo 4
Pgina 19
Este es el analizador de objetos. Puede ver que tienen varias partes. Comencemos por arriba.
El desplegable donde pone Todas sirve para elegir una parte de todo lo que nos puede mostrar. En
este caso est mostrando todo lo que tienen el proyecto. Si observa la figura de la pgina siguiente
ver que est desplegado, mostrando todas las referencias y controles que tienen en ese
momento. Puede ver que tienen el MSCommDlg, porque a ese proyecto le habamos introducido
el CommonDialog. Si seleccionamos ese control, nos aparecen en la ventana Classes todas las
colecciones que tiene el CommonDialog, entre ellas el propio control, que si lo seleccionamos, en
la ventana de la derecha, (Miembros) aparecern todas la propiedades, los mtodos, y los eventos
(Claro que un CommonDialog no tienen eventos, pero s aparecern si mostramos cualquier otro
control)
Si le aadimos ahora una referencia (El acceso a una base de datos mediante DAO, por ejemplo)
aparecer esa referencia en la lista desplegable.
Los controles bsicos aparecen en la referencia VB. Aparecen concretamente los controles que
figuran en la barra de herramientas al abrir un nuevo proyecto. Si aadimos ms componentes
(Haciendo clic en la barra de men Proyecto | Componentes) veremos que aparecen nuevos
controles en el desplegable.
LSB
Captulo 4
Pgina 20
LSB
Captulo 4
Pgina 21