Está en la página 1de 28

Visual Basic - Guía del Estudiante Cap.

16
CONTROLES AVANZADOS DE VISUAL BASIC

Este capítulo pretende ampliar el conocimiento de ciertos controles introducidos con la versión
6 de VB, que, aunque ya son de uso habitual en cualquier aplicación, se salen un poco de los
conceptos estudiados en los controles de los capítulos 1 y 2. Vienen generalmente como un
paquete OCX que contiene varios de ellos.

Se estudian algunos de los paquetes distribuidos por Microsoft, sean o no fabricados por esta
compañía. Sería interminable comentar los paquetes realizados por casas especializadas,
controles de gran calidad, normalmente caros y para aplicaciones específicas dentro del
ámbito comercial en el que se mueve la empresa que lo realiza. Existen también gran cantidad
de controles realizados por particulares, con la mejor intención, que se pueden encontrar en
Internet distribuidos de forma gratuita. Son desaconsejables. No porque no funcionen, sino
simplemente porque no ofrecen ningún tipo de garantía, están normalmente sin información de
funcionamiento, y en caso de problemas no se puede recurrir a nadie para resolverlos. Una
aplicación profesional nunca deberá llevar un control shareware.

Paquete MSCOMCTL.OCX

Este paquete se denomina Microsoft Windows Common Controls 6.0 Contiene los siguientes
controles:

TabStrip Es un control de pestañas. Pero este control no hace de contenedor de otros


controles, por lo que hay que introducir un control Frame o PictureBox por
cada una de las pestañas. No es práctico. Utilice en su lugar el SSTab.

Fig. 16.1 Aspecto del TabStrip

ToolBar Este es el control que presenta una barra de tareas. Es configurable,


pudiendo poner los botones que queramos con el icono apropiado. Es el
control que el alumno introduce por norma en sus primeras aplicaciones.
Luego se va dando cuenta de que hay cosas mejores y más simples. (Un
Picture Box con varios controles Image).Se coloca automáticamente en la
parte superior del formulario.

Fig. 16.2 ToolBar con cuatro botones

StatusBar Similar al anterior, pero para la barra de estado en la parte inferior del
formulario. Personalmente, creo que es más útil que el anterior. Puede
presentar automáticamente algunos parámetros del PC (Bloq. Mayúsculas,
Bloq. Números, Hora, Fecha) o el texto que se desee.
Fig. 16.3
StatusBar

ProgressBar Es la típica barra de progreso de Windows.

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 1


Fig. 16.4

Slider Es un control que permite introducir valores mediante un cursor

Fig. 16.5

Los controles anteriores se parecen a otros similares ya explicados en los capítulos anteriores,
y la profundización en sus propiedades y métodos no va a ser problema para el alumno sin
más explicaciones. Reservemos el tiempo de estudio para lo interesante, que es lo que viene
ahora

ImageList Es un almacén de imágenes. Este control es necesario para poder poner


imágenes en el resto de los controles de este paquete. Se pueden usar varios
controles ImageList dentro del mismo formulario, y con la propiedad ImageList
de cada control utilizar uno u otro en cada uno de los controles que se usen en
el mismo formulario. Ya se ha visto en un capítulo anterior, pero ampliaremos
aquí los detalles de su funcionamiento.

TreeView Es un control que permite presentar de forma gráfica datos estructurados de


forma jerárquica, pudiendo usar gráficos y textos para presentarlos.

ListView Es un control que permite presentar datos en una lista, utilizando para ello
gráficos y texto, con cuatro disposiciones distintas.

ImageCombo Es como un combo convencional, pero en este se pueden insertar también


gráficos y hacer sangrías independientes para cada elemento.

Estos cuatro últimos controles se explican a continuación con detalle.

Control ImageList
Es un almacén de imágenes. Se representa en la caja de herramientas de esta
forma: Fig. 16.6

En tiempo de ejecución no tiene presentación gráfica. No tiene eventos y solamente un


Método.
Como todos los controles de este paquete, tiene un cuadro de propiedades personalizado que
facilita la introducción de las mismas.
El cuadro de propiedades tiene tres pestañas, de las cuales solamente tienen importancia dos
de ellas: General e Imágenes. La tercera se refiere a los colores que en este caso no tienen
función alguna. Las pestañas pueden verse en las figuras 16.7 y 16.8

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 2


Fig. 16.7 Pestaña General.
En esta pestaña se elige el ancho y alto de la imagen. Es importante esto a la hora de
presentar los iconos sobre un ListView o TreeView, ya que el tamaño con el que aparecen en
estos controles es precisamente el elegido en esta pestaña. Mediante el uso de dos ImageList,
uno con imágenes de 32 x 32 y otro, con las mismas imágenes, pero de 16 x 16, podemos
cambiar el tamaño de los iconos en los controles ListView o TreeView. Este truco es la única
solución para poder poner iconos grandes o pequeños en el TreeView. Para cambiar el tamaño
es necesario que el ImageList no tenga cargada aún ninguna imagen.
Fig. 16.8 Pestaña de Imágenes

En esta se pueden introducir las imágenes que vamos a utilizar en los controles que tengan
asociado este ImageList. Es importante citar la propiedad Key de cada imagen, que sirve para
elegir la imagen. Una imagen de un ImageList se puede elegir mediante su índice (El índice va
de 1 a n, siendo n el número de imágenes), pero eso puede llevarnos a error, ya que dice muy

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 3


poco el número de la imagen dentro del ImageList, además de que ese número puede variar si
introducimos posteriormente una imagen nueva en una posición central. Podemos utilizar para
definir la imagen el texto que introduzcamos en la propiedad Key. Por ejemplo, en la figura
anterior, la imagen que presenta una interrogación tiene el valor Question, valor que expresa
de forma inconfundible el contenido de esa imagen, y que es inalterable sea cual sea la
posición que ocupa esa imagen en el ImageList. De esta forma, para poner esa imagen en el
nodo número 1 del TreeView1 basta con poner:
TreeView1.Nodes(1).Image = "Question"

Otras propiedades y métodos del control ImageList


Propiedad ListImages. Esta propiedad representa al conjunto de imágenes del control
ImageList. Pueden introducirse más imágenes en tiempo de ejecución, utilizando el método
Add sobre esta propiedad, cuya sintaxis es la siguiente:
ImageList.ListImages.Add Index, Key, Picture
Por ejemplo: ImageList1.ListImages.Add 6, "Imagen1TE", Picture1.Picture
(Se ha introducido en la colección ListImages la imagen que tienen el Picture1 como imagen
con Index = 6 y con Key = Imagen1TE)
También se puede vaciar un ImageList usando el método Clear:
ImageList1.ListImages.Clear

Propiedad MaskColor
Devuelve o establece el color que se usa para crear las máscaras de un control ImageList.

Sintaxis ImageList.MaskColor = color

Esta propiedad se usa en el método Overlay. La propiedad MaskColor determina qué color de
una imagen será transparente en el método Overlay. Sólo es aplicable cuando la imagen del
ImageList es un BMP

Método Overlay
Dibuja una imagen utilizando dos imágenes de la colección ListImages de un control
ImageList, y pone esa imagen dentro de un control

Sintaxis Control.Picture = ImageList.Overlay (índice1, índice2)

Donde Indice1 e Indice2 son la propiedad Index o la propiedad Key de la imagen que se va a
superponer (Indice1) y de la imagen sobre la que se va a superponer la primera (Indice2).
Control es un control capaz de contener una imagen (Picture, Image, Formulario)

Antes de utilizar el método Overlay deberemos poner un valor a la propiedad MaskColor. (La
transparencia de un color solamente va a funcionar cuando vamos a superponer dos imágenes
en formato BMP)

Control TreeView.

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 4


Es un control que permite presentar datos que están estructurados de forma jerárquica. Los
datos se pueden presentar como un texto, acompañados de un icono que determina el tipo de
dato. Puede por ejemplo presentar el organigrama de una empresa, mostrando los
departamentos que la componen, y dentro de estos, las personas que pertenecen a cada
departamento, y para cada persona, su número de teléfono, fax, E-Mail y domicilio, y todos
ellos,
representados con
un icono. Al hacer
doble clic sobre un
icono se
despliegan los
elementos que
existen bajo ese
icono. Volviendo a
hacer doble clic, se
ocultan. Es lo más
parecido al
funcionamiento del
explorador de
Windows.

Fig. 16.9 TreeView mostrando seis nodos, a la izquierda con iconos grandes y a la derecha
con iconos pequeños.
La vista de la Fig. 16.9 nos lleva a la primera idea acerca del TreeView: los Nodos. En
cualquier estructura jerárquica, un elemento tiene contenido en sí mismo, pero de él pueden
depender otros elementos. Esto nos lleva al concepto de Nodo. En el TreeView los datos se
presentan mediante nodos. El conjunto de todos los nodos es la colección Nodes. Esta
colección como cualquier colección en visual basic tiene sus propiedades y métodos.
Para empezar, la colección Nodes tiene el método Add. De esta forma ya podemos introducir
nodos en el TreeView. También tienen los método Remove, para eliminar uno de los nodos, y
Clear, para eliminar todos los nodos del TreeView.
El TreeView tiene varios estilos de presentación. Puede presentar los datos solamente con
textos, con texto y un icono, con un signo + ó – para indicar que ese nodo tiene elementos
bajo él, puede tener líneas o no. El estilo de presentación lo elegimos mediante la propiedad
Style del TreeView.
Propiedad Style.
Determina el estilo de presentación del TreeView. Es de lectura y escritura
Sintaxis NombredelTreeView.Style = Número (Establece el estilo)

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 5


Número = NombredelTreeView.Style (Devuelve el estilo)

El parámetro Número puede ser un número del 0 al 7. El estilo correspondienta a cada valor
es:

0 = Sólo Texto 1 = Imagen y Texto 2 = +/- y Texto 3 = +/- imagen y texto


4 = Líneas y texto 5 = Líneas, imagen y Texto 6 = Líneas, +/- y texto
7 = Líneas, +/-, Imagen y Texto (Valor predeterminado)

Con lo visto hasta ahora ya podemos ver cómo introducimos nodos en un TreeView. Para
poder introducir nodos con gráficos, es necesario poner en el mismo formulario, un control
ImageList con todas las imágenes que queremos poner en los nodos (Observe en la Fig. 16.8
que contiene todos los iconos que aparecen en la Fig. 16.9 Izda.) En ese ImageList hay que
poner a cada imagen un valor en su propiedad Key (En la Fig. 16.8, la imagen correspondiente
a la carpeta cerrada tiene en su propiedad Key la cadena “Cerrado”, la imagen con una carpeta
abierta, “Abierto”, la correspondiente al sobre tiene “Sobre” y la cara, “Cara”. Ya podemos
introducir los nodos mediante el método Add:

Método Add para la colección Nodes de un TreeView


Añade un nodo a la colección Nodes de un TreeView
Para añadir un nodo, primero debemos declarar una variable tipo Node. (Dim MiNodo As
Node)
A continuación ejecutar el método Add, que tiene la siguiente Sintaxis
Set VariableTipoNode =
NombredelTreeView.Nodes.Add (RelativoA, TipodeRelacion, Key, Texto, Imagen1, Imagen2)
Donde:
VariableTipoNode es la variable declarada como tipo Node (MiNodo en el ejemplo)
NombredelTreeView es el nombre del TreeView
RelativoA es el Key o el Index del nodo del cual dependerá este nodo que estamos
introduciendo. Si el nodo no va a pertenecer a ningún otro (caso del nodo Raiz) este valor se
deja en blanco, pero recuerde que debe poner la coma de separación. Lógicamente el nodo
indicado en este parámetro ya debe estar introducido antes de introducir este.
TipodeRelacion es un valor o constante que determina la situación del nodo respecto al nodo
indicado en el parámetro RelativoA. Vea más abajo los valores aceptados en este parámetro.
Key es una cadena de caracteres que define a este nodo. Esta cadena de caracteres debe ser
única, es decir, no se puede repetir en dos o más nodos. Debe empezar por letra, aunque
puede contener números.
Texto es el texto que va a figurar en el nodo. Es un parámetro obligado.
Imagen1 es la propiedad Index o Key de la imagen que queremos poner en el nodo. Este Index
o Key es el que tiene esa imagen en el control ImageList asociado a este TreeView. Imagen1
es la imagen que mostrará el TreeView para ese nodo cuando ese nodo NO está seleccionado.
Imagen2 es la propiedad Index o Key de la imagen que queremos que aparezca en ese nodo
cuando está seleccionado. Si no se pone este parámetro, la imagen del nodo cuando está
seleccionado, es la misma que cuando no lo está.
Los valores para TipoRelacion pueden ser:
Constante Valor Descripción

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 6


TvwFirst 0 Primero. El objeto Node se sitúa antes de todos los demás nodos al
mismo nivel que el especificado en RelativoA
TvwLast 1 Ultimo. El objeto Node se sitúa después de todos los demás nodos al
mismo nivel que el especificado en RelativoA. Los objetos
Node que se agregan secuencialmente se irán situando detrás del último
agregado.
TvwNext 2 (Predeterminado) Siguiente. El objeto Node se sitúa después del
especificado en RelativoA.
TvwPrevious 3 Anterior. El objeto Node se sitúa antes del especificado en RelativoA
TvwChild 4 Secundario. El objeto Node es secundario con respecto al
nodoespecificado en RelativoA.

El Index de la colección Nodes comienza a numerar por el 1. Cada vez que se añade un nodo,
el Index de ese nodo será el Index del último + 1, independientemente de la posición que va a
ocupar ese nodo dentro del TreeView. No controlamos directamente esta propiedad. Por eso,
es mucho más práctico definir a los nodos mediante su propiedad Key.

Ya estamos en condiciones de rellenar un TreeView con varios nodos. El código para colocar
los nodos de la figura 16.9 es: (El nombre del TreeView es TreeV1)
Dim MiNodo As Node ‘Declaramos la variable tipo Node
TreeV1.Style = 7 ‘Hacemos que el estilo sea Líneas, +/-, Imagen y Texto
Set MiNodo = TreeV1.Nodes.Add(, , "R", "Raíz") ‘No tienen parámetro RelativoA
‘Los siguientes nodos,dependen del nodo Raiz, que tiene Key = “R”
Set MiNodo = TreeV1.Nodes.Add("R", tvwChild, "C1", "Secundario 1", "Cerrado")
Set MiNodo = TreeV1.Nodes.Add("R", tvwChild, "C2", "Secundario 2", "Cerrado")
Set MiNodo = TreeV1.Nodes.Add("R", tvwChild, "C3", "Secundario 3", "Sobre")
Set MiNodo = TreeV1.Nodes.Add("R", tvwChild, "C4", "Secundario 4", "Cerrado")
‘El siguiente nodo depende de Secundario 4, que tienen Key = “C4”, y además tiene un
‘icono distinto (Question) para cuando está seleccionado.
Set MiNodo = TreeV1.Nodes.Add("C4", 4, "C4b", "Terciario C41" , "Cara", "Question")
‘Ahora se introduce una propiedad a cada uno de los nodos todavía no explicada: la
‘imagen que va a tener cuando ese nodo esté expandido, es decir, cuando se ven los
‘nodos que dependen de él. Vea que se le pone un valor a esta propiedad incluso a los
‘nodos que no tienen otros nodos que dependan de ellos.
TreeV1.Nodes(1).ExpandedImage = "Abierto"
TreeV1.Nodes(2).ExpandedImage = "Abierto"
TreeV1.Nodes(3).ExpandedImage = "Abierto"
TreeV1.Nodes(4).ExpandedImage = "Abierto"
TreeV1.Nodes(5).ExpandedImage =
"Abierto"
TreeV1.Nodes(6).ExpandedImage =
"Abierto"
‘Y ahora otra propiedad no explicada. Con esto
hacemos que se vean todos los nodos.
MiNodo.EnsureVisible
El resultado de este código es la Fig. 16.9. Y la
Fig. 16.10 es lo que pasa cuando se selecciona

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 7


el nodo cuyo texto es Terciario C41. Observe en el código que al introducir este nodo
habíamos puesto un parámetro más, precisamente, el de la imagen que tendrá cuando esté
seleccionado.

Fig. 16.10
Propiedades de la colección Nodes del TreeView
Propiedad ExpandedImage
Establece la imagen del nodo cuando está expandido, es decir, cuando se ven los nodos que
dependen de él. Es la propiedad Index o Key que tiene esa imagen en el control ImageList
asociado al TreeView.
Sintaxis NombredelTreeView.Nodes(Index).ExpandedImage = Valor
Donde Valor puede ser, o bien el Index o el Key de la imagen en el ImageList asociado al
TreeView.

Propiedad Expanded
Devuelve o establece un valor que determina si un objeto Node de un control TreeView se
encuentra expandido o contraído. Es una propiedad Booleana

Sintaxis NombredelTreeView.Nodes(Index).Expanded = True/False

Esta propiedad puede usarse para expandir por programa un objeto Node. Si un objeto Node
no tiene nodos secundarios, el valor de esta propiedad se pasa por alto.

Propiedad Children
Devuelve el número de objetos Node secundarios contenidos en un objeto Node. Esta
propiedad es solamente de lectura.

Sintaxis VariableNumerica = NombredelTreeView.Nodes(Index).Children

Propiedad FullPath
Devuelve la ruta completa de un objeto Node. El valor devuelto es una cadena de caracteres
que es el resultado de concatenar el texto de la propiedad Text del objeto Node referenciado
con los valores de las propiedades Text de todos sus predecesores. El valor de la propiedad
PathSeparator del TreeView determina el delimitador utilizado para separar el Text de uno y
otro nodo.

Sintaxis NombredelTreeView.Nodes(Index).FullPath

Esta propiedad puede usarse en el procedimiento NodeClick del TreeView, que ya pasa como
parámetro el nodo sobre el que hemos hecho click:

Private Sub TreeV1_NodeClick(ByVal Node As MSComctlLib.Node)


VariableTipoString = Node.FullPath
End Sub

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 8


Propiedad Count
Devuelve el número de elementos de la colección Nodes

Sintaxis VariableNumerica = NombredelTreeView.Nodes.Count

Propiedades Child, FirstSibling, LastSibling, Previous, Parent, Next y Root

Estas propiedades devuelven una referencia a otro objeto Node. Con esa referencia que nos
devuelve, podremos conocer los valores de las propiedades del nodo cuya referencia nos
devuelve (Text, Key, FullPath, etc)
Sintaxis NombredelTreeView.Nodes(Index).Xxxx

Donde Xxxx es la propiedad deseada de las mencionadas.

Dependiendo de la propiedad, nos devuelve la referencia de:

Child Primer elemento secundario


FirstSibling Primer nodo del mismo nivel
LastSibling Ultimo nodo del mismo nivel
Previous Nodo anterior del mismo nivel
Next Siguiente nodo del mismo nivel
Parent Nodo primario (Nodo del que depende)
Root Nodo Raiz

Propiedad Key
Esta propiedad establece o devuelve una cadena de caracteres que identifica unívocamente a
un nodo. Esta propiedad se le asigna normalmente durante la creación de ese nodo mediante
el método Add, pero puede cambiarse posteriormente por programa.
La propiedad Key puede usarse para nombrar al nodo, al tratarse de una cadena única. No
puede haber dos nodos con el mismo Key. Si la cadena no es única, se produce un error.

Sintaxis NombredelTreeView.Nodes(Index).Key = cadena

Es muy prudente usar la propiedad Key para "autodocumentar" su proyecto de Visual Basic si
asigna nombres significativos a los objetos de una colección.

Propiedad Sorted
Esta propiedad la tiene tanto el control TreeView como la colección Nodes. Si esta propiedad
está a True en el TreeView, se ordenan alfabéticamente los elementos de nivel superior de la
colección Nodes.

Cada elemento de la colección Nodes puede tener su propiedad Sorted a True. En este caso,
los nodos que dependen de ese nodo estarán ordenados por orden alfabético.

Puede tener nodos con la propiedad Sorted = True, y otros con esa propiedad = False.

Propiedad Image
Establece la imagen que presenta un nodo. El valor de esta propiedad es, o bien el Index de la
imagen dentro del ImageList asociado al TreeView, o su propiedad Key.

Sintaxis NombredelTreeView.Nodes(Index).Image= Valor

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 9


Propiedad SelectedImage
Es lo mismo que la propiedad anterior, pero en este caso se establece la imagen que presenta
el nodo cuando está seleccionado.

Recuerde que estas propiedades son de la colección Nodes del TreeView. Veremos ahora las
propiedades del TreeView.
Propiedades del Control TreeView
Ya se han visto algunas más atrás. Se comentan solamente aquellas propiedades que no son
comunes al resto de los controles.

Propiedad Checkboxes
Establece si se muestran las casillas de verificación. (True/False)

Sintaxis NombredelTreeView.Checkboxes = True/False

Estas casillas de verificación no se suelen usar en el TreeView porque no son precisamente


bonitas. Si esta propiedad está a True, es preciso usar una propiedad de la colección Nodes, la
propiedad Checked, que es también booleana. Si ese nodo tiene esa propiedad a True, su
casilla de verificación aparece marcada.

Propiedad FullRowSelect
Establece si al seleccionar un nodo se marca solamente el texto del nodo (False) o si se marca
toda la horizontal del mismo (True).

Propiedad HideSelection
Establece si el texto seleccionado aparece resaltado cuando un control pierde el enfoque.

Propiedad HotTracking
Determina si está activado el resalte sensible al puntero del ratón. Una línea por debajo del
texto cuando pasamos el ratón por encima.

Propiedad ImageList
Establece el control ImageList que está asociado al TreeView. El ImageList debe estar en el
mismo formulario que el TreeView al que se asocia, pero un mismo ImageList puede estar
asociado a más de un TreeView u otros controles.

El TreeView necesita un ImageList para tomar de él las imágenes que va a colocar en los
nodos. Esta propiedad se puede cambiar en tiempo de ejecución, y es este precisamente, el
truco que nos permite cambiar en el TreeView el tamaño de los iconos.

En la Fig. 16.9 (Página 5) puede ver el mismo TreeView con dos tipos de iconos. El TreeView
no nos permite cambiar de tipo de iconos, (tal como lo hace el ListView) por lo tanto hay que
inventar algo que permita cambiarlos y así obtener la misma estética que en el ListView. Esto
se logra colocando dos ImageList en el formulario con las mismas imágenes e idénticos Key
para ellas. En uno de ellos se pone la resolución de las imágenes a 32 x 32 y en el otro a 16 x
16 (Vea Fig. 16.7 Página 3) Cuando quiera usar iconos pequeños, se asocia al TreeView el
ImageList con la resolución de 16 x 16, mediante la sintaxis:
NombredelTreeView = ImageList1 ó Set NombredelTreeView = ImageList1
Y a continuación se añaden los nodos mediante el método Add. Si quiere cambiar los iconos
durante la ejecución del programa (es muy típico colocar en una línea del menú el tipo de
iconos a presentar) observará que al cambiar el ImageList desaparecen los iconos. No hay otro
remedio más que volver a cargarlos, usando los métodos de la colección Nodes Clear (para
vaciarla) y Add. Este es el código que he usado en el ejemplo que ilustra este capítulo:

Set TreeV1.ImageList = ImageList2

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 10


TreeV1.Nodes.Clear
cmdIntroducirNodos_Click ‘(cmdIntroducirNodos es un botón con el código para añadir los
‘nodos)
Propiedad Indentation
Establece el ancho de la sangría de los nodos. Afecta a todos los niveles de nodos. Puede
cambiarse en tiempo de ejecución.

Propiedad LabelEdit
Devuelve o establece un valor que determina si el usuario puede modificar la propiedad Text
de los objetos Node de un control TreeView.

Sintaxis NombredelTreeView.LabelEdit = entero

Donde entero puede ser:

Constante Valor Descripción


tvwAutomatic 0 Predeterminado) Automático. Se genera el evento
BeforeLabelEdit cuando el usuario hace clic en la etiqueta de
un nodo seleccionado.
TvwManual 1 Manual. El evento BeforeLabelEdit sólo se genera al invocar el
método StartLabelEdit.

La edición de la etiqueta de un objeto se inicia al hacer clic en un objeto seleccionado (si la


propiedad LabelEdit está establecida a Automatic). Es decir, el primer clic en un objeto lo
selecciona y un segundo clic (simple) inicia la operación de edición de la etiqueta.
La propiedad LabelEdit, junto con el método StartLabelEdit, permite determinar por
programa qué etiquetas se pueden modificar y cuándo hacerlo. Cuando LabelEdit tiene el
valor 1, no puede modificarse ninguna etiqueta, a menos que se invoque el método
StartLabelEdit.

Propiedad LineStyle
Establece el estilo de las líneas que aparecen entre los objetos Node.

Sintaxis NombredelTreeView.LineStyle = número

Acepta los valores 0 (tvwTreeLines) con lo que presentará solamente las líneas entre los nodos
de un mismo nivel y su nodo primario, y 1 (tvwRootLines) que presenta, además de las
anteriores, líneas entre los nodos raiz.
Propiedad Nodes
Devuelve una referencia a la colección de objetos Node de un control TreeView
Parent (Propiedad)
Devuelve una referencia al formulario que contiene un control u otro objeto o colección.

Propiedad PathSeparator
Establece el carácter delimitador utilizado en la ruta devuelta por la propiedad FullPath. El
carácter predeterminado es "\".

Scroll (Propiedad)
Devuelve o establece un valor que especifica si se muestran barras de desplazamiento.

SelectedItem (Propiedad, controles ActiveX)


Devuelve la referencia al objeto Node seleccionado.

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 11


Propiedad SingleSel
Establece si un nodo debe expandirse cuando se selecciona. Un nodo, con otros nodos
dependiendo de él, se expande al hacer doble clic sobre él, o al hacer clic sobre el + asociado
a ese nodo. Se contrae volviendo a realizar la misma operación. Si esta propiedad está a
True, se expande o contrae cuando se hace clic sobre él.

Propiedad Sorted
Ya explicada para la colección Nodes.

Métodos del TreeView.

Método GetVisibleCount
Devuelve el número de objetos Node que caben en el área interna de un control TreeView.

El número de objetos Node viene determinado por la cantidad de líneas que caben en una
ventana. El número total de líneas posibles lo determina el alto del control y la propiedad Size
del objeto Font. En este número se cuenta el elemento situado al final de la lista y que sólo es
visible parcialmente.
Puede usar la propiedad GetVisibleCount para asegurarse de que es visible un número
mínimo de líneas que permita al usuario hacerse una idea de la jerarquía. Si no es visible este
mínimo, puede restablecer el tamaño del control TreeView mediante la propiedad Height. Si
un determinado objeto Node debe ser visible, utilice el método EnsureVisible para desplazar
y expandir el control TreeView.

Método HitTest
Devuelve la referencia del objeto Node situado en las coordenadas x e y. Se utiliza sobre todo
en las operaciones de arrastrar y colocar para determinar si hay disponible en la ubicación
actual un elemento de destino de colocación. Si no hay ningún objeto en las coordenadas
especificadas, el método HitTest devuelve Nothing.
El método HitTest se utiliza casi siempre junto con la propiedad DropHighlight para resaltar
un objeto cuando se arrastra el mouse sobre él durante una operación de Drag & Drop. La
propiedad DropHighlight requiere una referencia a un objeto específico para resaltarlo. Para
determinar el objeto, se usa el método HitTest junto con un evento que devuelva las
coordenadas x e y, como DragOver, con el siguiente código:

Private Sub TreeV1_DragOver(Source As Control, x As Single, y As Single, State As Integer)


Set TreeV1.DropHighlight = TreeV1.HitTest(x, y)
End Sub

Método StartLabelEdit
Inicia el proceso de modificación de la propiedad Text de un nodo, cuando la propiedad
LabelEdit está puesta a 1 (Manual).

Sintaxis NombredelTreeView.StartLabelEdit

Cuando la propiedad LabelEdit está a 0 (Automático) la edición del texto comienza


automáticamente cuando se hace clic sobre un nodo ya seleccionado. Si esta propiedad está
en manual es cuando debemos forzar el inicio de la edición

Cuando se invoca el método StartLabelEdit para un objeto, también se genera el evento


BeforeLabelEdit.

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 12


Eventos del TreeView
Se mencionan solamente aquellos que no son comunes a otros controles ya estudiados.

Evento BeforeLabelEdit
Se produce cuando el usuario intenta modificar la etiqueta (Propiedad Text) de un Node.

Sintaxis Private Sub NombredelTreeView _BeforeLabelEdit(cancelar As


Integer)

Donde Cancelar es un entero que si no es 0, cancela la operación de edición.

El evento BeforeLabelEdit se produce después del evento Click estándar.

Los eventos AfterLabelEdit y BeforeLabelEdit sólo se generan si el valor de la propiedad


LabelEdit es 0 (Automática) o si se invoca el método StartLabelEdit.

Para comenzar a modificar una etiqueta, el usuario debe hacer clic primero en el objeto para
seleccionarlo y hacer clic una segunda vez para iniciar la operación. El evento BeforeLabelEdit
se produce después del segundo clic.
Para determinar a qué objeto pertenece la etiqueta que se va a modificar, utilice la propiedad
SelectedItem. En el ejemplo siguiente se comprueba el índice de un objeto Node antes de
permitir su edición. Si el índice es 1, se cancela la operación.
Private Sub TreeView1_BeforeLabelEdit(Cancel As Integer)
If TreeView1.SelectedItem.Index = 1 Then
Cancel = True ' Se cancela la operación
End If
End Sub

Evento AfterLabelEdit
Se produce cuando se termina de modificar la etiqueta (Propiedad Text) de un Node

Sintaxis
Private Sub NombredelTreeView_AfterLabelEdit(cancelar As Integer, nuevaCadena As String)

Donde cancelar es un entero que, si no es 0, se cancela la operación de edición, y


NuevaCadena es la cadena de caracteres que el usuario ha escrito en esa etiqueta, o Null si se
ha cancelado la operación de edición.

El evento AfterLabelEdit se genera después de que el usuario termina la operación de edición,


lo que ocurre cuando hace clic en otro objeto Node o cuando presiona la tecla ENTRAR.

Para cancelar una operación de edición de etiqueta, establezca True o cualquier valor distinto
de cero en cancelar. Al cancelar la operación, se restaurará la etiqueta existente
anteriormente.
El argumento nuevaCadena puede usarse para comprobar una condición antes de cancelar
una operación. Por ejemplo, el código siguiente cancela la operación si nuevaCadena es un
número:
Private Sub TreeView1_AfterLabelEdit(Cancel As Integer, NewString As String)
If IsNumeric(NewString) Then
MsgBox "No se permiten números"
Cancel = True
End If
End Sub

Los eventos AfterLabelEdit y BeforeLabelEdit sólo se generan si el valor de la propiedad


LabelEdit es 0 (Automática) o si se invoca el método StartLabelEdit.

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 13


Evento Collapse
Se genera al contraer cualquier objeto Node de un control TreeView, es decir, cuando sus
nodos secundarios se ocultan.

Sintaxis Private Sub NombredelTreeView _Collapse(ByVal nodo As Node)

El evento Collapse se produce antes del evento Click estándar.


Existen tres formas de contraer un objeto Node: establecer a False su propiedad Expanded,
hacer doble clic en un objeto Node y hacer clic en una imagen más/menos cuando la
propiedad Style del control TreeView se ha establecido a un estilo que incluye estas
imágenes. Todos estos métodos generan el evento Collapse.

Evento Expand
Se produce al expandir un objeto Node de un control TreeView, es decir, cuando sus nodos
secundarios se hacen visibles.

Sintaxis Private Sub NombredelTreeView _Expand(ByVal nodo As Node)

El evento Expand se produce después de los eventos Click y DblClick.


El evento Expand se puede generar de tres formas: cuando el usuario hace doble clic en un
objeto Node que tiene nodos secundarios, cuando se establece a True la propiedad Expanded
de un objeto Node y cuando se hace clic en la imagen más/menos.

Evento NodeClick
Se produce al hacer clic en un objeto Node.

Sintaxis Private Sub NombredelTreeView _NodeClick(ByVal nodo As Node)

Cuando el usuario hace clic en cualquier punto de un control TreeView, fuera de un objeto
nodo, se genera el evento Click estándar. El evento NodeClick se genera cuando el usuario
hace clic en un objeto Node determinado y devuelve una referencia al objeto Node que puede
usarse para validarlo antes de realizar alguna otra acción.
El evento NodeClick se produce antes del evento Click estándar.

Evento Validate
Ocurre cuando el foco cambia a otro control que tiene su propiedad CausesValidation
establecida a True. (Este evento es común a todos los controles ActiveX)

Sintaxis Private Sub NombredelTreeView _Validate(mantenerFoco As


Boolean)

Donde mantenerFoco es un Booleano que si es True, fuerza al TreeView a recuperar el foco.


Se emplea para evitar que un control pierda el foco hasta que se cumplan ciertas condiciones.

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 14


El control ListView
Este control es el complemento ideal para el TreeView. En el TreeView se presentaban datos
de forma jerárquica. Es el control ideal para presentar, por ejemplo, los departamentos de una
empresa u organismo.

Pero el TreeView solamente presenta un pequeño texto, acompañado generalmente de un


icono. Si seguimos hacia abajo por la estructura jerárquica del TreeView que muestra los
departamentos de un organismo, llegaremos al final a las personas. Y aquí ya será necesario
introducir más datos. Supongamos que estamos haciendo una lista de todas las personas, y
que la información de éstas será su nombre, puesto de trabajo, despacho que ocupa, teléfono,
etc. El TreeView no es control aconsejado para mostrar esa cantidad de datos. Estaría muy
bien poder mostrar todos los datos de esa persona en un control que también permita gráficos
y textos, de forma que el domicilio figure al lado de un icono con una casa, el teléfono al lado
de un icono con un teléfono, etc. Esto lo vamos a lograr mediante el TreeView.

El ListView puede presentar los datos de cuatro formas distintas:

- Iconos. Cada información se presenta con un icono y un texto. La posición de


los iconos puede cambiarse por el usuario. El texto puede editarse. Al
hacer clic sobre uno de los iconos, se produce el evento ItemClick en
el que podemos desencadenar otras operaciones tomando como dato el
icono sobre el que se ha hecho clic (presentar más datos, por ejemplo)
- SmallIcons (Iconos pequeños). Igual que el anterior, pero puede presentar más
iconos.
- Lista Presenta la información en líneas, acompañada de un icono. El texto
de cada línea puede editarse, pero no puede cambiarse el orden de las
líneas.
- Report (Informe) La información se divide en varios campos (SubItems) y se
presenta en columnas encabezadas por un texto indicativo.

Fig. 16.11 Las 4 formas de presentación del ListView: Iconos grandes, pequeños, Lista y
Report

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 15


Propiedades del ListView
Propiedades Icons y SmallIcons

El ListView necesita DOS ImageList para almacenar los iconos. Uno para los iconos grandes y
otro para los iconos pequeños. Las imágenes en cada uno de ellos pueden (deben) ser las
mismas, con el mismo truco explicado para el TreeView: el de los iconos grandes con una
resolución de 32 x 32
y el de los iconos
pequeños con una
resolución de 16 x 16.
Esta propiedad puede
establecerse en
tiempo de diseño,
mediante el cuadro de
propiedades
personalizado, o en
tiempo de ejecución
mediante las
propiedades Icons y
SmallIcons
Fig. 16.12 Página de
propiedades del ListView mostrando los ImageList

ListView1.Icons = IMList1
ListView1.SmallIcons = IMList2

Las propiedades Icons y SmallIcons deben estar puestas antes de añadir elementos a la
colección ListItems del ListView. Si no es así, dará un error que dice que es necesario
inicializarlas.

Propiedad ListItems (Colección ListItems)

Esta propiedad es la equivalente a la propiedad Nodes del TreeView. Pero en este caso, un
elemento de esta colección no solamente contiene un dato, sino que además puede tener
dentro de sí otra colección de datos. Por ejemplo, pensando en una agenda, un elemento de la
colección puede tener como propiedad Text el alias de una persona, y como subitems de ese
elemento, el nombre y apellidos de la persona a la que se refiere el alias, su teléfono y su
domicilio. Un elemento de la colección ListItems puede tener tantos subitems como queramos.

Los elementos de la colección ListItems se añaden mediante el método Add, con la siguiente
sintaxis

NombreDelListView.ListItems.Add(índice, clave, texto, icono, iconoPequeño)

Donde

NombreDelListView es el nombre del ListView al que pertenece la colección ListItems


Indice es el índice de ese elemento. Comienzan por 1. No es obligatorio poner este
parámetro, y en ese caso, pone el número siguiente al mayor Index que tenga.
Clave Es una cadena de caracteres por la que se puede nombrar a ese elemento. Esta
cadena es única para cada elemento de la colección. Puede contener números, pero el
primer carácter debe ser una letra
Texto Es el texto que se va a ver en el ListView, bien solo, bien acompañado de un icono
Icono Es una cadena de caracteres con la propiedad Key, dentro del ImageList destinado a
los iconos grandes, del icono que queremos poner en ese elemento, cuando el
ListView está en modo de presentación Iconos grandes. También podemos poner aquí
el número del índice de ese icono dentro del mismo ImageList.
IconoPequeño Idéntica a la anterior, pero referida al icono mostrado cuando el ListView está
en modo de presentación de iconos pequeños.

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 16


Propiedades de la colección ListItems
La colección ListItems también tiene sus propiedades. Se enumeran a continuación las más
importantes.

Propiedad ListSubItems (Propiedad de la colección ListItems)


Una colección ListSubItems pertenece a cada uno de los elementos de la colección
ListItems. Cada ListItem puede tener varios ListSubItems, que son los elementos de
información relativos al ListItem del que dependen. Los ListSubItems se añaden a la colección
mediante el método Add, con la suguiente sintaxis:

ListView1.ListItems(1).ListSubItems.Add (Index, Key, Texto, ReportIcon, TextToolTip

Donde

ListView1 Es el nombre del control ListView


ListItems(1) Significa que ese ListSubItem se agrega al ListItem con Index = 1
Index Es el índice dentro de la colección ListSubItems
Key Es una cadena de caracteres que define a este ListSubIndex. Esta cadena de
caracteres debe ser única para cada elemento.
Texto Es la información que contienen ese ListSubItem
ReportIcon Es el Key del icono (dentro del ImageList que contienen los SmallIcons) que
aparecerá al lado del texto cuando el ListView está con la forma de
presentación Report (Informe).
TextToolTip Es la información que presentará en una etiqueta cuando acerquemos el
puntero del ratón sobre la zona donde está el texto.

Propiedad Ghosted (Propiedad)


Devuelve o establece un valor Booleano que determina si el icono de un objeto ListItem de un
control ListView aparece atenuado. Esta propiedad no afecta al funcionamiento normal de ese
ListItem, solamente es un efecto gráfico.

Sintaxis ListView.ListItems(5).Ghosted = True


Propiedad Selected

Devuelve un valor que determina si un elemento ListItem está seleccionado. Es una propiedad
solamente de lectura, por lo que no puede usarse para seleccionar un elemento.

Métodos de la colección ListItems

Add

Agrega nuevos elemento a la colección ListItems.

Sintaxis NombreDelListView.ListItems.Add(índice, clave, texto, icono, iconoPequeño)

Clear
Quita todos los objetos que hay en una colección.

Sintaxis ListView1.ListItems.Clear
Remove
Quita un miembro específico de una colección.

Sintaxis NombredelListView.ListItems.Remove Indice

Indice puede ser un número con la propiedad Index del elemento a quitar, o una cadena de
caracteres con su propiedad Key

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 17


CreateDragImage
Crea una imagen de arrastre con una versión difuminada de la imagen asociada a un elemento
de la colección ListImages. Normalmente, esta imagen se utiliza como DragIcon en las
operaciones de arrastrar y colocar.

Sintaxis ListView1.DragIcon = ListView.SelectedItem.CreateDragImage

EnsureVisible
Asegura que el objeto ListItem especificado sea visible.

Propiedades del control ListView (Continuación)

Propiedad Arrange
Establece cómo se organizan los iconos en la vista Iconos o Iconos pequeños de un control
ListView.

Sintaxis NombredelListView.Arrange = valor

Valor puede tomar uno de los siguientes valores o constantes

Constante Valor Efecto


LvwNone 0 Ninguna. Los iconos pueden colocarse arrastrándolos con el
ratón en cualquier parte del ListView.
LvwAutoLeft 1 Izquierda. Los elementos se alinean automáticamente a lo
largo de la parte izquierda del control.
LvwAutoTop 2 Superior. Los elementos se alinean automáticamente a lo largo
de la parte superior del control.

Propiedad Checkboxes
Establece si se muestran las casillas de verificación.

Sintaxis NombredelListView.Checkboxes = True / False

Propiedad ColumnHeaderIcons
Es similar a la propiedad Icons o SmallIcons, pero ésta se refiere al ImageList que contiene los
iconos que se van a poner en las cabeceras de las columnas (cuando está en vista Report)

Sintaxis NombredelListView.ColumnHeaderIcons = NombredelImageList

Puede ponerse también en tiempo de diseño (Fig. 16.12) en la casilla Encabezado de


Columnas

Propiedad ColumnHeaders (Colección CulumnHeader del control ListView)


La colección ColumnHeaders representa las columnas que tiene el ListView en el modo de
presentación Informe

El número de columnas del ListView debe ser igual al número de ListSubItems de cada
elemento ListItems. De esta forma, cada ListSubItem se presentará en una columna. Para
añadir columnas al ListView se usa el método Add aplicado a la colección ColumnHeaders

Sintaxis

ListView1.ColumnHeaders.Add Index, Key, TextoCabecera, Ancho, Alineamiento, Icono

Index Indice de esa columna

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 18


Key Cadena de caracteres única que identifica esa columna
TextoCabecera Texto que figurará en la cabecera de la columna
Ancho Ancho de la columna en unidades del Formulario que contiene al ListView
Alineamiento 0 = izquierda, 1 = Derecha, 2 = Centrado
Icono Key del icono a introducir en la cabecera de la columna

La colección ColumnHeaders tienen también sus propiedades y métodos. Vamos a citar las
más destacables:

Propiedades de la colección ColumnHeaders

Propiedad Alignment

Establece la alineación del texto en la cabecera de un ColumnHeader. Acepta 3 valores:


0 = izquierda, 1 = Derecha, 2 = Centrado

Sintaxis ListView1.ColumnHeaders(Indice). Alignment = Valor

Propiedad Position
Devuelve o establece la posición de una columna.

Sintaxis ListView1.ColumnHeaders(Index) = entero

Donde entero es un número entre 1 y n (n = número de columnas) que especifica la posición


de esa columna. Index es, o bien el índice, o el Key de la columna. Utilice esta propiedad para
reorganizar el orden de las columnas.

El control ImageCombo
Este control es un combo en el que se pueden introducir elementos. Estos elementos forman
la colección ComboItems. Cada elemento ComboItem puede tener un texto y una imagen.
Este combo presenta una enorme ventaja sobre el combo normal visto en capítulos anteriores:
cada elemento tiene una propiedad Index o Key que le distingue de los demás elementos, y se
puede utilizar una de esas dos propiedades para actuar sobre el programa, dependiendo del
ComboItem seleccionado. Tienen la misma apariencia que un combo normal.

Fig. 16.13 ImageCombo

Los elementos ComboItem se añaden con el método Add, que hemos visto en los controles
TreeView y ListView, con una sintaxis idéntica. No va a ser difícil para el alumno trabajar con
este control, una vez conocida la forma de trabajar con los dos controles citados
anteriormente.

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 19


LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 20
Mas controles avanzados: El grupo de controles de Microsoft
Windows Common Controls-2 6.0 (SP3)
Estos son los controles integrados en el paquete Mscomct2.Ocx. Son cinco controles:

- MonthView
- Animation
- DTPicker
- UpDown
- FlatScrollBar

Control MonthView

El control MonthView permite crear aplicaciones donde los usuarios pueden elegir una fecha
mediante una interfaz parecida a un calendario.

Fig. 16.14 Control MonthView

Este control permite seleccionar de una forma muy sencilla


una fecha o un intervalo de fechas. Puede tener el aspecto
mostrado en la Fig. 16.14 o mostrar varios meses a la vez.
Esto puede lograrse mediante las propiedades MonthColumns
y MonthRows. Las fechas mínimas y máximas a presentar se
pueden establecer con las propiedades MinDate y MaxDate.

Este control está enlazado a datos. De esta forma puede


presentar un dato fecha hora existente en una base de datos.

Para permitir a los usuarios del programa seleccionar un intervalo continuo de fechas, asigne a
la propiedad MultiSelect el valor True y especifique con MaxSelProperty el número de días
que podrán seleccionar. Las propiedades SelStart y SelEnd devuelven las flechas del
principio y el final de una selección.
Existen muchas formas de personalizar la apariencia de un control MonthView. Existen varios
atributos de colores, como MonthBackColor, TitleBackColor, TitleForeColor y
TrailingForeColor, que le permiten crear combinaciones de colores exclusivas para el control.
Establezca las propiedades MonthRows y MonthColumns para mostrar más de un mes a la
vez (hasta 12 meses) en un control MonthView. El número total de propiedades MonthRows
y MonthColumns debe ser inferior o igual a 12.

Es un control enlazado a datos, por lo que puede presentar o introducir una fecha de una base
de datos a través de este control, previamente enlazado a la base de datos mediante un
control Data.

Propiedades del control MonthView


Propiedad Day
Devuelve o establece un valor numérico que especifica el número del día actual.

Sintaxis NombredelMonthView.Day = número


ó Variable = NombredelMonthView.Day

La propiedad Day puede tomar cualquier valor entero entre 1 y 31.

Propiedad DayBold
Devuelve o establece un valor Booleano que determina si la fecha indicada se muestra en
negrita

Sintaxis NombredelMonthView.DayBold(fecha) = True/False

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 21


La propiedad DayBold es una matriz que corresponde a la propiedad VisibleDays. Cada
elemento booleano indica si la fecha correspondiente debe mostrarse o no en negrita.
Son válidas únicamente las fechas mostradas actualmente. Las fechas válidas pueden
buscarse en la propiedad VisibleDays.
A medida que pasa de un mes a otro, no se conserva la información de la propiedad.

Propiedad DayOfWeek
Devuelve o establece un valor que especifica el día de la semana actual.

Sintaxis objeto.DayOfWeek = número

Los valores admitidos para número son:


Constante Valor Descripción
mvwSunday 1 (Predeterminado) Domingo
mvwMonday 2 Lunes
mvwTuesday 3 Martes
mvwWednesday 4 Miércoles
mvwThursday 5 Jueves
mvwFriday 6 Viernes
mvwSaturday 7 Sábado

La propiedad DayOfWeek puede tomar cualquier valor entero entre 1 y 7.

Propiedaddes MaxDate, MinDate


Devuelve o establece la primera y la última fecha permitida por el calendario.
Sintaxis objeto.MaxDate = fecha
objeto.MinDate = fecha

La propiedades MaxDate y MinDate sirven para definir los límites superior e inferior del
calendario.

Propiedad MaxSelCount
Devuelve o establece el número máximo de días consecutivos que se pueden seleccionar de
una vez.

Sintaxis objeto.MaxSelCount = número

Obviamente esta propiedad solamente tiene sentido cuando la propiedad MultiSelect tiene el
valor True. Además, el valor asignado a la propiedad MaxSelCount debe ser superior a la
diferencia entre las propiedades SelStart y SelEnd. Por ejemplo, si selecciona el periodo del
15/9 al 18/9, MonthView.SelEnd - MonthView.SelStart = 3. Sin embargo, son cuatro los días
seleccionados realmente, por lo que MaxSelCount debe tener asignado el valor 4.
El valor predeterminado de la propiedad es una semana (7 días).

Propiedad Month
Devuelve o establece un valor que especifica el mes actual.

Sintaxis objeto.Month = número

Valores admitidos.

La propiedad Month puede tomar cualquier valor o constante de las expresadas en la tabla
siguiente:
Los valores admitidos para número son:
Constante Valor Descripción
mvwJanuary 1 Enero
mvwFebruary 2 Febrero

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 22


mvwMarch 3 Marzo
mvwApril 4 Abril
mvwMay 5 Mayo
mvwJune 6 Junio
mvwJuly 7 Julio
mvwAugust 8 Agosto
mvwSeptember 9 Septiembre
mvwOctober 10 Octubre
mvwNovember 11 Noviembre
mvwDecember 12 Diciembre

Propiedad MonthBackColor
Devuelve o establece un valor que especifica el color de fondo mostrado para un mes.

Sintaxis objeto.MonthBackColor = color

Color es una variable numérica Long comprendida entre el entre 0 y 16.777.215, o la


expresión del color mediante el esquema de color RGB.

Propiedades MonthColumns, MonthRows


Devuelve o establece un valor que especifica el número de meses que se muestran en sentido
horizontal o vertical.

Sintaxis objeto.MonthColumns = número


objeto.MonthRows = número

El control puede mostrar hasta doce meses.

Proiedad MultiSelect
Devuelve o establece un valor que determina si es posible realizar una selección múltiple de
fechas.

Sintaxis objeto.MultiSelect = booleano

Los valores admitidos para booleano son:


True: Permite seleccionar múltiples días (Predeterminado)
False: permite seleccionar solamente un día

Propiedad Parent
Devuelve el formulario, objeto o colección que contiene un control u otro objeto o colección.

Sintaxis objeto.Parent

Utilice la propiedad Parent para tener acceso a las propiedades, los métodos o los controles
del primario de un objeto. Por ejemplo:
MiBotón.Parent.MousePointer = 4

Propiedad ScrollRate
Devuelve o establece un valor que especifica el número de meses que se desplazará cuando
el usuario haga clic en uno de los botones de desplazamiento. La propiedad ScrollRate
permite al usuario realizar desplazamientos de más de un mes cada vez.

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 23


Propiedad ShowToday
Devuelve o establece un valor Booleano que determina si se muestra la fecha actual en la
parte inferior del control.

Propiedades SelEnd, SelStart


Devuelve o establece los límites inferior y superior del intervalo de fechas seleccionado.

Sintaxis objeto.SelEnd = fecha


objeto.SelStart = fecha

Las propiedades SelStart y SelEnd definen el límite inferior y superior del intervalo de fechas
seleccionado. El intervalo de fechas seleccionado puede abarcar varios meses. Es posible
incluir fechas que no están visibles actualmente.
Para que la selección múltiple de fechas funcione correctamente, asigne a la propiedad
MaxSelCount un valor superior a la diferencia de los valores de las propiedades SelStart y
SelEnd.
Los valores SelStart y SelEnd sólo son válidos cuando la propiedad MultiSelect tiene el valor
True.

Propiedad ShowWeekNumbers
Devuelve o establece un valor que determina si los números de semana aparecen junto a la
semana.

Sintaxis objeto.ShowWeekNumbers = booleano

Propiedad StartOfWeek
Devuelve o establece un valor que especifica el primer día de la semana.

Sintaxis objeto.StartOfWeek = entero

Los valores admitidos para entero son iguales que para la propiedad DayOfWeek

Propiedades TitleBackColor, TitleForeColor


Devuelven o establecen valores que especifican los colores de fondo y primer plano del área
de título del control.

Sintaxis objeto.TitleBackColor = color


objeto.TitleForeColor = color

Utilice las propiedades TitleBackColor y TitleForeColor con las propiedades


MonthBackColor y TrailingForeColor para personalizar los colores del control.

Propiedad TrailingForeColor
Devuelve o establece un valor que especifica el color de primer plano de las fechas restantes
visibles actualmente.

Sintaxis objeto.TrailingForeColor = color

Propiedad Value
Devuelve o establece la fecha que se muestra actualmente. El valor devuelto es de tipo Date

Sintaxis objeto.Value = fecha


VariableTipoDate = Objeto.Value

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 24


La propiedad Value es la propiedad por defecto.

Propiedad Week
Devuelve o establece un valor que especifica el número de la semana actual.

VariableNumerica = NombredelControl.Week
NombredelControl.Week = VariableNumerica

La propiedad Week puede tomar cualquier valor entero entre 1 y 52.

Propiedad Year
Devuelve o establece un valor que especifica un año de calendario.

VariableNumerica = NombredelControl.Year
NombredelControl.Year = VariableNumerica

Es posible asignar a la propiedad Year cualquier entero comprendido entre 1601 y 9999.

DataBindings, DataChanged, DataField, DataFormat, DataMember, DataSource,

Métodos del control MonthView


Método ComputeControlSize
Devuelve el ancho y el alto de un control MonthView para un número determinado de filas y
columnas.

Sintaxis objeto.ComputeControlSize(Rows, Columns, Width, Height)


Este método se utiliza antes de cambiar el tamaño del control MonthView restableciendo sus
propiedades MonthColumns o MonthRows, para ajustar el tamaño del formulario si fuese
necesario.
Para usar el método ComputeControlSize, declare primero dos variable con tipo Single. A
continuación, llame al método pasando como argumentos las variables Width y Height. Una
vez ejecutado el método podrá obtener el ancho y el alto del control leyendo estas variables.

Método HitTest
Devuelve la fecha ubicada en conjunto de coordenadas determinado. Se suele usar en
operaciones de arrastrar y colocar para determinar si existe un elemento en la ubicación de
destino de la operación.

Sintaxis objeto.HitTest(x as Single, y As Single, Date As Date)

Mediante el método HitTest puede obtener una fecha del control MonthView simplemente
haciendo clik encima de ella. El método HitTest devuelve Null si no existe ninguna fecha en
las coordenadas especificadas.

Private Sub MonthView1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As


Single)
Dim FechaElegida As Date
MonthView1.HitTest X, Y, FechaElegida
LabelFecha = FechaElegida
End Sub

Eventos del control MonthView

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 25


DateClick (Evento)
Ocurre cuando se hace clic en una fecha del control.

Private Sub objeto_DateClick([Index As Integer], DateClicked As Date)

Se utiliza este evento para determinar la fecha en la que se hizo clic.

Private Sub MonthView1_DateClick(ByVal DateClicked As Date)


LabelFecha = MonthView1.Value
End Sub

Private Sub MonthView1_DateClick(ByVal DateClicked As Date)


LabelFecha = DateClicked
End Sub

DateDblClick (Evento)
Ocurre cuando el usuario hace doble clic en una fecha del control.

Private Sub objeto_DateDblClick([Index As Integer], DateDblClicked As Date)

Tiene la misma aplicación que la anterior, pero esta vez haciendo doble click

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 26


Control DTPicker1
Este control es una especie de ComboBox, pero en vez de mostrar cuando está expandido una
lista, muestra el control MonthView. Funciona de forma análoga al MonthView, y cuando
seleccionamos una fecha en el calendario, deposita la fecha en la casilla desplegable y se
cierra. Este control nos permite ahorrar un buen espacio en el formulario sin perder
prestaciones. Estas son las formas de presentarse recogido y ampliado.

Se deja al alumno el estudio exahustivo de este control, que no se separa mucho del
MonthView visto anteriormente.

Control Animation
Este control nos permite introducir en nuestra aplicación un elemento muy elegante:
visualización de ficheros .avi Existen en Windows muchos fichero .avi aplicados para
distintas funciones: copiar ficheros, bajar ficheros de Internet, y otros empleados como
elemento tranquilizador en procesos lentos. Veamos un par de ejemplos:

Para probar este control basta con poner un controlen el formulario, un CommonDialog (CD1)
y dos botones, uno para arrancar y otro para parar la presentación del fichero avi. El tamaño
que se le de en el formulario debe ser suficientemente grande para que quepa la presentación
en su tamaño real. No acepta zoom.

En el procedimiento click del botón de arrancar basta con poner este código:

CD1.Filter = "avi (*.avi)|*.avi"


CD1.ShowOpen
With Animation1
.Open CD1.FileName
.Play
End With

Para parar la ejecución:

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 27


Animation1.Stop

El control Animation tienen pocas propiedades distintas de los demás controles. Podemos citar
estas:

Propiedad Center
Establece si el fichero .avi se presenta en el centro del control (Center = True) o si se presenta
en las coordenadas 0,0 del mismo (Center = False)

Propiedad AutoPlay
Devuelve o establece un valor que determina si el control Animation empezará a reproducir
un archivo .avi cuando éste se cargue en el control.

Métodos del control Animation

Play Ejecuta la animación.


Stop Detiene la animación. No se puede ejecutar este método si la propiedad AutoPlay está
a True.

Control UpDown
Este control sirve para introducir saltos de un paso en otros controles o en cualquier
parte del código de la aplicación.

Este control es tan sencillo que no se va a explicar. Solamente citar que sus dos
procedimientos más importantes son el DownClick y el UpClick

Control FlatScrollBar

Es un control de scroll. Tiene como todos los controles de este tipo, una propiedad Max para
darle el valor máximo, Min para ajustar el valor mínimo, SmallChange y LargeChange para
fijar las variaciones al hacer click en la fkecha o en el cuerpo respectivamente, y unna
propiedad Value para leer el valor actual.

Solamente tienen el procedimiento Scroll que se produce al variar la posición del cursor.

Dejamos aquí el estudio de controles avanzados. No es que no haya más, sino que el curso
debe tener un final. Para conocer a fondo los controles lo mejor es tomar un control de la
lista que sale del menú de VB Proyecto | Componentes, y ponerse con el. No voy a decir
que sea más fácil que estudiarlos con la ayuda de la Guía del Estudiante. Eso sí, le va a
resultar bastante más divertido. Le recomiendo que si estudia a fondo algún control
interesante para Vd. apunte todo lo que vaya aprendiendo de él. Por experiencia puedo
decirle que se olvida. Créese su propia Guía del Estudiante. A final de cuentas esta comenzó
así y ya va bastante adelantada.

LSB Visual Basic Guía del Estudiante Capitulo 16 Pág. 28