Login | Register   
RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: VB7
Expertise: Intermediate
Dec 2, 2002

Dynamically setting an event handler for a class' event via reflection

Here it is some code that shows how to use reflection to dynamically set an event handler for a class' event.

Sub TestSub()
    ' create a Person 
    Dim pe As New Person()
    ' get a reference to the EventInfo for this object
    Dim peEv As EventInfo = pe.GetType.GetEvent("PropertyChanged")
    ' create a delegate to the local procedure
    Dim peDel As [Delegate] = [Delegate].CreateDelegate(peEv.EventHandlerType, _
        Me, "PropertyChanged")
    ' make the local procedure a handler for the event
    peEv.AddEventHandler(pe, peDel)
    ' set a propety via reflection to prove that it works
    ' note how you can create the array of arguments on the fly
    pe.GetType.InvokeMember("Name", BindingFlags.SetProperty, Nothing, pe, _
        New Object() {"John"})
    ' (always remove event handlers)
    peEv.RemoveEventHandler(pe, peDel)
End Sub
Private Sub PropertyChanged(ByVal propertyName As String, _
    ByVal newValue As Object)
    MessageBox.Show("Property " & propertyName & _
        " has changed. The new value is " & newValue.ToString)
End Sub
Class Person
    Event PropertyChanged(ByVal propertyName As String, _
        ByVal newValue As Object)
    Dim m_Name As String
    Property Name() As String
            Return m_Name
        End Get
        Set(ByVal Value As String)
            If Value <> m_Name Then
                m_Name = Value
                RaiseEvent PropertyChanged("Name", m_Name)
            End If
        End Set
    End Property
End Class
Francesco Balena
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date