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:
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:
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.
indice%: El valor de índice del control dentro de la matriz.
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:
| Objeto | Propiedad | Valor |
| Form1 | Caption | Ejemplo de matriz de controles |
| Option1 | Name | optButton |
| Index | 0 | |
| Option2 | Name | optButton |
| Index | 1 | |
| Primer botón de comando | Name | cmdAgregar |
| Caption | &Agregar | |
| Segundo botón de comando | Name | cmdEliminar |
| 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
No hay comentarios:
Publicar un comentario