Login | Register   
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
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
        Get
            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.

 

 

Sitemap