Visual Basic.NET - Eventos de controles dinamicos

   
Vista:

Eventos de controles dinamicos

Publicado por Skatu (4 intervenciones) el 11/08/2011 16:58:23
Hola que tal
Estoy intentando crear una aplicacion que al leer un fichero (de texto), por cada linea, en tiempo de ejecucion, va generando varios controles para mostrar el contenido y añade dos botones de comando para que al pulsarlos pueda guardarlo en otro fichero y eliminarlo del primero (la linea) o simplemente eliminarlo del primero. En el formulario queda asi.

Nombre1 Texto1A Texto1B Boton1A Boton1B
Nombre2 Texto2A Texto2B Boton2A Boton2B
Nombre3 Texto3A Texto3B Boton3A Boton3B
-
-
Lo que intento hacer es que al pulsar el boton Boton1A (boton eliminar) obtengo el contenido de Nombre1.text, Texto1A.text y Texto1B.text, busco en el fichero la linea que contiene esos datos y lo elimino.
He conseguido crear los controles. Tambien puedo generar codigo para que elimine una determinada linea del fichero, esto lo hago con la llamada a un procedimiento (llamemosle ELIMINAR) que le envia como parametro el nombre del boton pulsado. Los controles estan generados de tal forma que con el nombre de un boton (Boton1A, Boton1B, …) puedo acceder al texto de los controles que pertenecen a esa linea.
Ahora viene lo que no consigo realizar.
Que al pulsar cualquier BotonXY capturar el evento que salta para obtener el nombre del boton que lo ha lanzado y llamar al procedimiento ELIMINAR con el nombre del boton.
Con VB6 y el array de controles era muy sencillo hacerlo en tiempo de diseno pero ahora como los botones se crean dinamicamente no soy capaz de crear un procedimiento con el “Handler” de dicho boton
Resumiendo, despues de todo esta parrafada, lo que no se hacer es capturar un evento lanzado por un control generado dinámicamente (tambien capturar el nombre del control que lo lanza) que de antemano no se que nombre tendra.
Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de fracisco

Eventos de controles dinamicos

Publicado por fracisco (162 intervenciones) el 14/08/2011 15:56:00
al pular el boton crea un select case dentro del evento.clic


select case sender.tipename

case "boton1"


case "boton2"


case "boton3"


end select
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eventos de controles dinamicos

Publicado por Reca (1 intervención) el 15/08/2011 22:56:19
Lo que quieres es añadir un manejador de evento asociado a un botón que aún no existe. Para ello, no puedes añadir Handles Buttonx.Click, porque como tú dices, no sabes aún el nombre que tendrá el botón, pero sí puedes añadir el manejador dinámicamente del siguiente modo:

Habrás declarado en algún lugar un botón:
Dim bt as New Button()

Y le habrás cambiado sus propiedades. Después lo habrás agregado a un formulario o a un Layout, por ejemplo:

Me.add(bt)

Pues bien, ahora debes también agregarle un controlador de evento:

AddHandler bt.Click, AddressOf miEvento

Donde he puesto bt.Click puedes poner cualquier evento asociado a un botón. Tras AddressOf deberás poner un método que hayas declarado y al que quires remitir cuando se lance el evento. En mi caso:

Private Sub miEvento (ByVal sender As System.Object, ByVal e As EventArgs)
>Lo que quieras que suceda
End Sub

En cuanto a lo de poder interpretar el nombre del botón que ha lanzado el evento, aprovechamos el objeto sender del método anterior.

Primero lo convertimos en botón para poder acceder a sus propiedades:

1
2
3
4
5
6
Dim a = TryCast(sender, Button)
  'Y después y podemos obtener su nombre, texto, y todas sus otras propiedades.
  'En este caso mostraría un mensaje con el texto de ese botón que antes habías añadido.
        If a IsNot Nothing Then
            MessageBox.Show(a.Text)
        End If
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Eventos de controles dinamicos

Publicado por omar (1 intervención) el 21/11/2013 17:44:26
Gracias Reca por compartir tu codigo me sirvio mucho,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eventos de controles dinamicos

Publicado por Guillermo (1 intervención) el 26/05/2015 00:25:59
Gracias Reca. Me sirvió mucho tu aporte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eventos de controles dinamicos

Publicado por Skatu (4 intervenciones) el 15/08/2011 22:58:48
Si, gracias por tu respuesta. Ademas he estado mirando por ahi y se pueden hacer mas cosas.
Para empezar y como he visto por este foro el boton cuando se declara hay que hacerlo con "WithEvents".

Private Witheventes cmdNombreBoton As Button

Cuando se crea y se le asignan propiedades al boton tambien hay que anadir la linea

AddHandler Me.cmdNombreBoton.Click, AddressOf NombreProcedimiento (que lo habia llamado ELIMINAR)

El procedimiento eliminar devera ser de la forma

Private Sub ELIMINAR(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim Boton As Button

Boton = Sender
'para obtener el nombre del control que ha lanzado el evento
Boton.Name
.
.
.
End sub

Se podra mejorar, pero funciona.
Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eventos de controles dinamicos

Publicado por cesarvmg (1 intervención) el 09/02/2013 18:08:41
Muchas gracias Reca, seguí tus indicaciones y funciona al 100% gracias por compartir!!

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eventos de controles dinamicos

Publicado por javi (1 intervención) el 06/08/2014 13:56:02
grandísimo aporte, perfecto, muchísimas gracias a todos los que sabes programar bien que nos ayudais mucho con estas cosas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar