RaiseEvent o Delegates y porque ?

17/04/2006 - 20:28 por max | Informe spam
hola.
vengo con ustedes para resolver una inquietud mejor dicho una duda y que
me den un consejo... yo siempre para ejecutar un evento lo hacia mediante
RiseEvent y me funcionaba bien en Vb2003 pero en lo que he leido muchos hacen
referencia a que los delegados son mejores para eventos y controlar a los
mismos ya que en c# todo se maneja mediante delegados bueno eso he leido
casi no me he metido a ese lenguaje. cual seria su consejo. usar delegates ?


atte
max

Preguntas similare

Leer las respuestas

#1 Jesús López
17/04/2006 - 22:02 | Informe spam
Tanto en VB como en C# los eventos están basados en delegados, sin embargo
en VB el delegado asociado a un evento está oculto aunque puede accederse a
él si es necesario. Mi recomendación sería que para gestionar eventos en VB
se use la forma clásica.

De todas manera aquí tienes un ejemplo en el que se lanza el evento de la
forma clásica y de dos formas adicionales usando el delegado asociado al
evento. El delegado asociado al evento es un miembro de la clase cuyo nombre
es el nombre del evento + Event.

Public Class Form4
Inherits System.Windows.Forms.Form

Dim WithEvents MiObjeto As New MiClase

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
MiObjeto.LanzarEvento()
End Sub

Private Sub MiObjeto_MiEvento(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MiObjeto.MiEvento
MsgBox("Se produjo el evento")
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
MiObjeto.LanzarEvento2()
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
MiObjeto.LanzarEvento3()
End Sub
End Class


Public Class MiClase
Public Event MiEvento As EventHandler

Public Sub LanzarEvento()
RaiseEvent MiEvento(Me, EventArgs.Empty)
End Sub

Public Sub LanzarEvento2()
If Not Me.MiEventoEvent Is Nothing Then
Me.MiEventoEvent.Invoke(Me, EventArgs.Empty)
End If
End Sub

Public Sub LanzarEvento3()
Dim Delegado As EventHandler = Me.MiEventoEvent
If Delegado Is Nothing Then Return
For Each ProcedimientoEvento As EventHandler In
Delegado.GetInvocationList()
ProcedimientoEvento(Me, EventArgs.Empty)
Next
End Sub

End Class

Saludos:

Jesús López



"max" escribió en el mensaje
news:
hola.
vengo con ustedes para resolver una inquietud mejor dicho una duda y que
me den un consejo... yo siempre para ejecutar un evento lo hacia mediante
RiseEvent y me funcionaba bien en Vb2003 pero en lo que he leido muchos
hacen
referencia a que los delegados son mejores para eventos y controlar a los
mismos ya que en c# todo se maneja mediante delegados bueno eso he leido
casi no me he metido a ese lenguaje. cual seria su consejo. usar delegates
?


atte
max
Respuesta Responder a este mensaje
#2 Jesús López
17/04/2006 - 22:22 | Informe spam
Por cierto, este truco no está documentado, y es el tipo de cosas que se
descubre usando .NET Reflector.

Saludos:

Jesús López
Respuesta Responder a este mensaje
#3 max
18/04/2006 - 17:19 | Informe spam
Muchas gracias fue muy ilustrativo y demostrativo tu ejemplo ahorita estoy
analizando tu codigo muchas gracias..

"Jesús López" escribió:

Por cierto, este truco no está documentado, y es el tipo de cosas que se
descubre usando .NET Reflector.

Saludos:

Jesús López



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida