【发布时间】:2012-03-15 03:26:15
【问题描述】:
可能重复: How would that be possible to remove all event handlers of the Click event of a Button?
我想从按钮中删除所有单击事件处理程序。我在 Stack Overflow 问题 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年写的。
这个方法有最新版本吗?
【问题讨论】:
-
我对为什么返回 null 无能为力,但 @JonSkeet 在 stackoverflow.com/questions/6828054/… 上有一个很好的答案,说明为什么不经过反思就不可能做到这一点。也许您需要以不同的方式解决问题。
-
您要解决的根本问题/您要实现的目标是什么?
-
您意识到您正在尝试将 WinForms 代码应用于 WPF?
-
查看答案“动态删除事件处理程序的解决方案(使用反射)。有更好的方法吗?” stackoverflow.com/questions/11031149/…
标签: c# .net wpf event-handling