例如有一个自定义的点击按钮的处理函数(CustomClick):
Private Sub CustomClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
MsgBox("Hello")
End Sub
将这个自定义函数绑定到特定的控件事件Button1.Click中,通常会用到的方法是:
AddHandler Button1.Click, AddressOf CustomClick
但有些特殊情况下,需要根据函数名,将控件事件跟函数绑定,那么使用到的方法如下:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim mEventInfo As Reflection.EventInfo
mEventInfo = GetType(Button).GetEvent("Click")
Dim mMethodInfo As Reflection.MethodInfo
mMethodInfo = Me.GetType.GetMethod("CustomClick", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
Dim mClick As [Delegate]
mClick = [Delegate].CreateDelegate(mEventInfo.EventHandlerType, Me, mMethodInfo)
mEventInfo.AddEventHandler(Me.Button1, mClick)
End Sub
后者这种方法当遇到委托时,非常实用,例如:
Public sub DoClick(byval funDelegate as DelegateType)
Dim mEventInfo As Reflection.EventInfo
mEventInfo = GetType(Button).GetEvent("Click")
Dim mMethodInfo As Reflection.MethodInfo
mMethodInfo = funDelegate .Method
Dim mClick As [Delegate]
mClick = [Delegate].CreateDelegate(mEventInfo.EventHandlerType, mMethodInfo)
mEventInfo.AddEventHandler(Me.Button1, mClick)
End Sub