Controles dinámicos y eventos dinámicos

ASP.NET Dejar un comentario

Todos no hemos encontrado con la necesidad de crear algún control de manera dinámica para agregarlo a un contenedor de controles en una página web. Pero ¿qué sucede cuando necesito que ese control me genere un evento?

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

Compartir:
  • Facebook
  • Twitter
  • LinkedIn
  • email
  • Add to favorites

3 Respuestas en “Controles dinámicos y eventos dinámicos”

  1. Anonymous Dijo:

    >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

  2. Leonardo Dijo:

    >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

  3. conocuica Dijo:

    >Revisa mi codigo, me presente como anonimo

    http://conocuicavb.blogspot.com/

Deja un comentario


WP Tema.
Traducido por Autos
Entradas RSS Comentarios RSS Iniciar sesión