可能重复: 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