2014-10-27 16 views
1

[上一個活動]工作,我有以下的代碼創建一個按鈕:getfield命令不適用於按鈕控制

Dim B As New Button 
    B.Parent = Me 
    B.Location = New Point(50, 50) 

    AddHandler B.Click, Sub() 
          MsgBox("Hi") 
         End Sub 

    'I try to get the field info for the click event inorder to get the event handler and remove it 
    Dim FieldInfo As FieldInfo = B.GetType.GetField("Click", BindingFlags.[Static] Or BindingFlags.NonPublic Or BindingFlags.Public) 

    Dim obj As Object = FieldInfo.GetValue(Obj_) 
    Dim EI As EventInfo = Obj_.GetType.GetEvent(EventName) 
    EI.RemoveEventHandler(Obj_, obj) 

但字段信息是不斷空。我嘗試了許多事件名稱ClickEvent,EventClick ...但他們都沒有讓我得到結果。

有人知道我的代碼中缺少什麼嗎?

預先感謝您。

回答

0

您需要使用GetEvent()而不是GetField()。

參見http://msdn.microsoft.com/en-us/library/50943xt0(v=vs.110).aspx

Dim myEventInfo As EventInfo = B.GetType.GetEvent("Click", BindingFlags.[Static] Or BindingFlags.NonPublic Or BindingFlags.Public) 

也可以使用一般的GetMember方法,它返回一個(陣列)的MethodInfo它是(字段信息,EventInfo)等的類的超類時,它返回一個數組,因爲可能有幾個匹配(即重載的方法等)。

+0

謝謝您的回答。其實我試圖動態地刪除一個事件處理程序。你知道這是否可能不使用GetField? (我更新了這篇文章) – 2014-10-27 11:11:41

+0

這是對你原來的問題的完整答案。第二個問題應該是第二個問題!無論如何@Niranjan Kala的答案似乎涵蓋了你所要求的所有信息,http://dkowalski.com/blog/archive/2009/12/22/how-to-get-event-handlers-list -using-reflection.aspx具體。請接受任一答案。 – tolanj 2014-10-27 12:20:38

1

我建議你去通過這個 - How to: Hook Up a Delegate Using Reflection

獲取表示事件的EventInfo對象,並使用 EventHandlerType屬性來獲取用於處理 事件委託的類型。在以下代碼中,Click事件的EventInfo爲 。

代碼片段:

Dim evClick As EventInfo = tExForm.GetEvent("Click") 
    Dim tDelegate As Type = evClick.EventHandlerType 

你可以很容易地得到他們的名單(type.GetEvents()),添加另一個處理器(EventInfo.AddEventHandler())或刪除處理程序(EventInfo.RemoveEventHandler())。要獲得所附代表的名單,你必須做更多的事情。

參考文獻:
Removing Event Handlers using Reflection
How to get event handlers list using reflection
Raise an event via reflection in c#
Getting event via reflection

+0

謝謝你的回答。其實我試圖動態地刪除一個事件處理程序。你知道這是否可能不使用GetField? (更新後的帖子) – 2014-10-27 11:12:26

+0

檢查第一個參考鏈接..這可能會幫助你.. @ThomasCarlton – 2014-10-27 11:18:11

+0

@ThomasCarlton:檢查MSDN參考中的第4點..在哪裏你可以得到處理事件的方法。如果你知道那個.. – 2014-10-27 11:19:40