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