MATRICES DE CONTROLES

Una matriz de controles en un grupo de controles que comparten el mismo nombre y el mismo tipo. También comparten los mismos procedimientos de evento. Las matrices de controles tienen al menos un elemento y pueden crecer hasta contener tantos elementos como permitan los recursos y la memoria del sistema; su tamaño dependen también de la memoria y de los recursos de Windows requeridos por cada control. El índice máximo que puede usar en una matriz de controles es 32 767. Los elementos de una misma matriz de controles tienen sus propio valor de propiedades. Entre los mas usados están los controles de menú y las agrupaciones de botones de opción.


¿Por qué usar matrices de controles?

Al agregar controles mediante matrices de controles se utilizan menos recursos que si simplemente se agregan al formulario múltiples controles del mismo tipo en tiempo de diseño. Las matrices de controles también son útiles cuando quiere que varios controles compartan código. Por ejemplo, si crea tres botones de opción como una matriz de controles, se ejecuta el mismo código independiente del botón en el que haga clic.

Si desea crear una instancia nueva de un control en tiempo de ejecución, dicho control tiene que ser miembro de una matriz de controles. En una matriz, los nuevos elementos heredan los procedimientos de evento comunes de toda la matriz.
Mediante el mecanismo de las matrices de controles, cada nuevo control hereda los procedimientos de eventos comunes escritos para la matriz. Por ejemplo, si el formulario tiene varios cuadros de texto que reciben valores de fechas, puede definir una matriz de controles para que todos los cuadros de texto compartan el mismo código de validación.

Cuando crea una matriz de controles los valores de la propiedad Index de dicho control se agrega al momento de agregar los elementos de la matriz. Es la propiedad Index la que distingue cada elemento de otro dentro de la matriz de controles.

Cuando un elementos de la matriz reconoce un evento, Visual Basic llama a un procedimiento de evento común y pasa el argumento (el valor de la propiedad Index) para identificar qué control reconoce realmente el evento. Por ejemplo:
Private Opciones_Click (Index as Integer)
     Select Case
     Case 0
          ... instrucciones para el primer elemento
     Case 1
          ... instrucciones para el segundo elemento
     End Select
End Sub
Agregar, eliminar un elemento de una matriz de controles en tiempo de ejecución
Puede agregar o quitar controles de una matriz de controles en tiempo de ejecución mediante las instrucciones Load y Unload. sin embargo, el control que va a agregar tiene que ser un elemento de una matriz de controles existente. Debe crear un control en tiempo de diseño con la propiedad Index establecida en la mayor parte de los casos a 0.
Después, en tiempo de ejecución, utilice la siguiente sintaxis:
Load objeto(indice%)
Unload objeto(indice%)
Donde:
objeto: Nombre del control que va a agregar o eliminar de la matriz de controles.
indice%: El valor de índice del control dentro de la matriz.

Puede utilizar Unload para quitar cualquier control creado con Load. Sin embargo, no puede usar Unload para quitar controles creados en tiempo de diseño, independientemente de si forman parte o no de una matriz de controles.

Ejemplo:
En este ejemplo se permite al usuario agregar controles que cambian el color de fondo de la ventana. Agrege un formulario y despúes dibuje dos botones de opciones y dos botones de comando, como se ilustra en la tabla siguiente:
ObjetoPropiedadValor
Form1CaptionEjemplo de matriz de controles
Option1NameoptButton
Index0
Option2NameoptButton
Index1
Primer botón de comandoNamecmdAgregar
Caption&Agregar
Segundo botón de comandoNamecmdEliminar
Caption&Eliminar

Ahora copie el siguiente código y ejecute el proyecto para ver como funciona:
Option Explicit
Dim MaxID As Integer

Private Sub cmdAgregar_Click()
     MaxID = optButton.Count - 1   'Establece el total de botones existentes
     If MaxID > 3 Then Exit Sub       'Sólo se permiten 5 botones
     MaxID = MaxID + 1
   
     Load optButton(MaxID)            'Crea un nuevo control   
     optButton(0).SetFocus               'Enfoque al primer botón
   
     'Colocar el nuevo control debajo del último control
     optButton(MaxID).Left = optButton(MaxID - 1).Left
     optButton(MaxID).Top = optButton(MaxID - 1).Top + _
     optButton(MaxID - 1).Height + 100
     optButton(MaxID).Visible = True  'Mostrar el nuevo control
   
     'Texto en el nuevo botón
     optButton(MaxID).Caption = "Opción " & MaxID + 1
End Sub

Private Sub cmdEliminar_Click()
     If MaxID <= 1 Then Exit Sub    'No podrá eliminar los dos primeros botones
   
     Unload optButton(MaxID)        'Elimina el último botón
   
     MaxID = MaxID - 1                   'Establece el recuento de botones
   
     optButton(0).SetFocus               'Reestablece la selección del botón
End Sub
Private Sub optButton_Click(Index As Integer)
    Form1.BackColor = QBColor(Index + 1)
End Sub



VER LIBRO( PROFUNDIZAR DESDE LA PAGINA 78)

No hay comentarios:

Publicar un comentario