可能重複: How would that be possible to remove all event handlers of the Click event of a Button?如何刪除所有Click事件處理程序?
我想從一個按鈕,刪除所有的單擊事件處理程序。我在堆棧溢出問題How to remove all event handlers from a control中發現此方法。
private void RemoveClickEvent(Button b)
{
FieldInfo f1 = typeof(Control).GetField("EventClick",
BindingFlags.Static |
BindingFlags.NonPublic);
object obj = f1.GetValue(b);
PropertyInfo pi = b.GetType().GetProperty("Events",
BindingFlags.NonPublic |
BindingFlags.Instance);
EventHandlerList list = (EventHandlerList)pi.GetValue(b, null);
list.RemoveHandler(obj, list[obj]);
}
,但此行總是返回null:
typeof(Control).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
而且這種方法寫於2006年
是否有此方法的任何最新版本?
我可以對於爲什麼返回空值沒有幫助,但@JonSkeet在http://stackoverflow.com/questions/6828054/how-would-that-be-possible-to-remove-all-event-handlers上有一個很好的答案。關於爲什麼不經過反思就無法實現這一點的事件。也許你需要以不同的方式解決問題。 – 2012-02-24 17:07:37
你試圖解決的根本問題是什麼?你試圖完成的目標是什麼? – RQDQ 2012-02-24 17:53:21
你意識到你正試圖將WinForms代碼應用於WPF? – Douglas 2012-02-24 19:07:27