Modificar manejador de eventos es tiempo de ejecución

25/11/2006 - 18:16 por Carlos Gómez | Informe spam
A ver si me explico:

Tengo un formulario, con una función que devuelve un boton listo para
ser usado.

Cuando llamo a esta función, le doy los parametros necesarios que
necesita: location, size,...

Lo que deseo es poder pasarle también el nombre del procedimiento que
manejará el evento click.

En resumen, la funcion que deseo sería:

Private Function CrearBoton (ByVal posicion As Point, _
ByVal tamaño As Size, _
...
ByVal NombreProcedimiento As ? )

Dim Boton as New Button()
Boton.Location = posicion
Boton.Size = tamaño
...
AddHandler Boton.Click, AddressOf NombreProcedimiento
Return
End Function

He provado con Delegados:
Definicion:
Delegate Sub Boton_Click(ByVal sender As Object, ByVal e As
System.EventArgs)

En el procedimiento de llamada:
Dim ProcedimientoEventoClick As Boton_Click = AddressOf
BotonTipoA_Click


y en la firma de la funcion el parametro lo pongo de tipo Delegate:
Private Function CrearBoton (ByVal posicion As Point, _
ByVal tamaño As Size, _
...
ByVal NombreProcedimiento As [DELEGATE] )
, pero falla en tiempo de ejecucion dando el siguiente error:

InvalidCastException
No se puede convertir un objeto de tipo 'Boton_Click' al tipo
'System.EventHandler'.

Bueno, alguien me puede ayudar
 

Leer las respuestas

#1 Carlos Gómez
25/11/2006 - 20:14 | Informe spam
Private Sub CrearBoton(ByVal posicion as Point, _
ByVal tamaño As Size, _
ByVal ProcedimientoManejador As
EventHadler)
Dim b as New Button()
b.Location = posicion
b.Size = tamaño
AddHandler b.Click, ProcedimientoManejador
Me.Controls.Add(b)
End Sub

Private Sub ProcedimientoA (ByVal sender As Object, ByVal e As
EventArgs)
msgbox ("Saludos desde A")
End Sub

Private Sub ProcedimietoB (ByVal sender As Object, ByVal e As
EventArgs)
msgbox ("Saludos desde B")
End Sub

Private Sub CreadorDeBotonConManejadorA
Dim posicion As Point = New Point (10, 10)
Dim tamaño As Size = New Size (60, 60)
Dim Manejador As New EventHandler(AddressOf ProcedimientoA)
CrearBoton(posicion, tamaño, manejador)
End Sub

Private Sub CreadorDeBotonConManejadorB
Dim posicion As Point = New Point (10, 100)
Dim tamaño As Size = New Size (60, 60)
Dim Manejador As New EventHandler(AddressOf ProcedimientoB)
CrearBoton(posicion, tamaño, manejador)
End Sub

Preguntas similares