La solución es más sencilla de lo que imaginamos, por ejemplo en Visual Basic.NET seria:
'En nuestro evento Page Load crearemos un control dinámico
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Creamos la instancia de un control de tipo Button
Dim boton As New Button
boton.Text = "Presionar boton"
'Aquí esta la gracia, AddHandler es el evento que nosotros queremos gatillar en este control dinámico
'la instrucción AddresOf nos dice que función va a controlar el evento, en este caso Button_Click la cual debe 'estar debidamente creada.
AddHandler boton.Click, AddressOf Button_Click
'Añadimos el control al formulario
form1.Controls.Add(boton)
End Sub
'Creamos la función que va a controlar el evento
Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
lbMuestra.Text = "Boton dinamico presionado"
End Sub
Espero que haya sido claro, les adjunto un archivo de prueba. Descargar archivo
3 comentarios:
Esto funciona bien pero si los objetos son dinamicos como lo solucionas?
ejemplo recorres un directorio buscando archivos txt ok
generas un checkbox por cada objeto ok
a los checkbox les agregas eventos ok
pero al momento de seleccionar el checbok deberia de mostrarte el nombre del file ok
como lo haces?
te adjunto parte de un codigo que estoy trabajando a ver si puedes solucionarlo.
Public Function cuenta() As Integer ' cuenta las imagenes en un directorio
For Each num As String In Directory.GetFiles(ruta, "*.tif", SearchOption.TopDirectoryOnly)
' creacion de checkbox
Dim u As New CheckBox ' nombre del checkbox
u.Text = num ' es la ruta de la imagen
AddHandler u.Click, AddressOf u_click ' eveto que agrego
u.Location = New Point(20, a) 'posicion de los check
u.Size = New Size(40, 40) ' tamaño de ños check
nombre_item = u.Text 'variable para usar en un msg para saber cuando seleciono el check
u.Parent = Me
Next
End Function
evento
Private Sub u_click(ByVal sender As Object, ByVal e As System.EventArgs)
MsgBox(nombre_item)
End Sub
ahora mediando un boton llamo a mi funcion
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
cuenta()
End Sub
Estimado anonimo :P
Mira estuve revisando lo que me enviaste y creo haber entendido lo que querias. Que problema encontre en tu codigo. Tu variable nombre_item, se iba a reescribiendo cada vez que hacia un vuelta en el ciclo el For Each y al mostrarla siempre te salia el ultimo item. Asi que lo que hice fue mostrar el texto del checkbox que era lo que necesitabas haciendo un cast a quien llamaba al metodo y obteniendo su propiedad text.
Espero haber entendido. Abajo te dejo el codigo.
Private ruta As String = "Ruta de consulta"
Public Function cuenta() As Integer ' cuenta las imagenes en un directorio
Dim a = 0
For Each num As String In Directory.GetFiles(ruta, "*.jpeg", SearchOption.TopDirectoryOnly)
a = a + 50
' creacion de checkbox
Dim u As New CheckBox ' nombre del checkbox
u.Text = num
AddHandler u.Click, AddressOf u_click ' evento que agrego
u.Location = New Point(20, a) 'posicion de los check
u.Size = New Size(400, 40) ' tamaño de los check
u.Parent = Me
Next
End Function
'evento
Private Sub u_click(ByVal sender As Object, ByVal e As System.EventArgs)
MsgBox(DirectCast(sender, CheckBox).Text)
End Sub
'ahora mediando un boton llamo a mi funcion
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
cuenta()
End Sub
End Class
Revisa mi codigo, me presente como anonimo
http://conocuicavb.blogspot.com/
Publicar un comentario