La Web del Programador: Comunidad de Programadores
 
    Pregunta:  5026 - CONTROLES GENERADOS POR CODIGO
Autor:  Raquel Redondo
Hola:

Cuando generas un control por codigo con Controls.Add , como se hace para que se lanzen los eventos correspondientes de ese control...??

Por ejemplo:

Controls.Add("Vb.Label","milabel")
´... codigo para ese label

Controls.Add("VB.Label","miotrolabel")
´codigo para el otro label

En el formulario tengo ahora los dos labels... pero y ahora como hago por ejemplo para saber que ha hecho click en un label y no en el otro... o para saber que lo ha hecho sobre uno de los label??

Espero que con esta explicacion de mi duda sea suficiente para que se entienda lo que pregunto.
Muchas gracias.

  Respuesta:  Jose Reynaldo Chavarria Quiñonez
Raquelita:

Tenes dos opciones

1.- Declarar una variable tipo Label usando WithEvents la cual va a representar a cualquiera de los objetos (Label)
luego programaticamente puedo asignar el valor de la variable a cualquier Label en el formulario y puedo detectar los eventos (pero de uno a la vez)

Ejemplo:
'En el Formulario
Dim WithEvents lbl As Label

Private Sub Form_Load()
Set lbl = Controls.Add("vb.Label", "Label1")
With lbl
.Left = 1500
.Top = 500
.Caption = "Testing"
.Visible = True
End With
End Sub

Private Sub lbl_Click()
Select Case lbl.Name
Case "Label1"
'Codigo
MsgBox lbl.Name
Case "Label2"
'Codigo
MsgBox lbl.Tag
End Select
End Sub

2.- Utiliza un Arreglo de Controles y manejalos por el indice (Index) del control
En la forma en Diseño debe estar un Objeto con indice 0 (Es mas facil teniendo el cero) en este caso "Label1(0)" [este fue creado en "Design Time" cambiando la propiedad Index de "" a "0" (sin las comillas)].
Para crear mas objetos como este se debe usar "Load"
para eliminarlo se hace "Unload" (No se puede hacer Unload a el objeto creado en Design Time)

Ejemplo:

Private Sub Form_Load()
For i = 1 To 3
Load Label1(i)
With Label1(i)
.Left = Label1(i - 1).Left + Label1(i - 1).Width
.Visible = True
End With
Next
End Sub

Private Sub Label1_Click(Index As Integer%2