Visual Basic.NET - Cómo consumir eventos para controles creados dinám

 
Vista:

Cómo consumir eventos para controles creados dinám

Publicado por Fer (8 intervenciones) el 08/08/2005 17:49:48

En mi aplicación necesito crear elementos TextBox de forma dinámica, ya que su número está determinado por las operaciones de los usuarios.

Ahora bien, he conseguido crear esos objetos TextBox sin problema según necesite, con un código similar al siguiente:

-------
Dim Withevents Txt As TextBox
...
Private Sub s_NuevoTxt
'Crearle controles a esta página del tab
Static iY As Integer = 25

Txt = New TextBox

iY += 25
Txt.Location = New Point(25, iY)
Pg1.Controls.Add(Txt)
Txt.Name = "txtBol" & CStr(iY / 25)
Txt.Text = Txt.Name
End Sub
-----------

El problema lo tengo cuando pretendo controlar los eventos que generan esos TextBox, de forma que pueda saber EL OBJETO TextBox que generó el evento. Esto lo hago de una manera limitada con el siguiente handler:

---------
Private Sub txt_Clicked(ByVal sender As Object, ByVal e As EventArgs) Handles Txt.Click
MsgBox(Txt.Name)
End Sub
----------

Pero esto, evidentemente solo funciona para la última instancia del TextBox que he creado, no para las anteriores. En VB6 se resolvía este problema con la propiedad Index... pero dado que soy nuevo en VB.NET al parecer esto esto se tiene que hacer de otro modo...

COMO PUEDO CONTROLAR LOS EVENTOS QUE GENERA CADA TEXTBOX, CONOCIENDO CUAL DE TODOS ELLOS ES EL QUE PROVOCÓ EL EVENTO???????????

COMO GENERO UN HANDLER PARA CADA UNO DE ELLOS??? QUE NECESITO??? COMO LO HAGO???

Espero respuestas,
Gracias colegas
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

RE:Cómo consumir eventos para controles creados di

Publicado por Joan (3 intervenciones) el 09/08/2005 17:39:06
Para dirigir el evento a la funcion, has de utilizar el metodo AddHandler para assignar el manejador en tiempo de ejecucion de la forma:
...
Pg1.Controls.Add(Txt)
Txt.Name = "txtBol" & CStr(iY / 25)
Txt.Text = Txt.Name
AddHandler Txt.Click, AddressOf txt_Clicked
...
...
Private Sub txt_Clicked(ByVal sender As Object, ByVal e As EventArgs)
MsgBox(Txt.Name)
End Sub
...

Utilizando el AddHandler ya no hace falta poner el handles ... despues de la funcion.

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

RE:Cómo consumir eventos para controles creados di

Publicado por Joan (3 intervenciones) el 09/08/2005 17:45:35
Ah, que se me olvidaba. En la funcion

Private Sub txt_Clicked(ByVal sender As Object, ByVal e As EventArgs)
MsgBox(Txt.Name)
End Sub

El objeto sender es el objeto que ha originado el evento.

Asi que para tener la referencia al texbox que ha originado el evento, tan solo se ha de hacer:

Private Sub txt_Clicked(ByVal sender As Object, ByVal e As EventArgs)

Dim Txt As TextBox = CType(sender, TextBox)
MsgBox(Txt.Name)

End Sub

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

RE:Cómo consumir eventos para controles creados di

Publicado por Fer (8 intervenciones) el 09/08/2005 19:27:13


Gracias men, rascándole encontré lo del AddHandler... pero de cualquier forma me atoré ahi.. ya tengo lo necesario, deja lo pruebo ahora con un Control de Usuario que estoy armando. =)

Salu2

At'
Fer

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