如何取得某个菜单所绑定的所有事件处理程序
2009-06-06 07:23
549 查看
ToolStripItem item = sender as ToolStripItem;
PropertyInfo propertyInfo = (typeof(ToolStripItem)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
EventHandlerList eventHandlerList = (EventHandlerList)propertyInfo.GetValue(item, null);
FieldInfo fieldInfo = (typeof(ToolStripItem)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
Delegate d = eventHandlerList[fieldInfo.GetValue(null)];
if (d != null)
{
foreach (Delegate temp in d.GetInvocationList())
{
//这里已经取得了所有Click事件绑定的处理程序,可以做一些事情。例如下面的代码是撤销所有的事件注册
item.Click -= temp as EventHandler;
}
}
PropertyInfo propertyInfo = (typeof(ToolStripItem)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
EventHandlerList eventHandlerList = (EventHandlerList)propertyInfo.GetValue(item, null);
FieldInfo fieldInfo = (typeof(ToolStripItem)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
Delegate d = eventHandlerList[fieldInfo.GetValue(null)];
if (d != null)
{
foreach (Delegate temp in d.GetInvocationList())
{
//这里已经取得了所有Click事件绑定的处理程序,可以做一些事情。例如下面的代码是撤销所有的事件注册
item.Click -= temp as EventHandler;
}
}
相关文章推荐
- 如何取得某个菜单所绑定的所有事件处理程序
- 如何判断某个事件已经绑定了某个事件处理程序?
- 如何判断某个事件已经绑定了某个事件处理程序?
- trigger 根据绑定到匹配元素的给定的事件类型执行所有的处理程序和行为。
- 如何判断某个事件已经绑定了某个事件处理程序?
- 如何:在 ASP.NET 网页中对事件处理程序进行运行时动态绑定
- off() 方法 与 unbind() 方法移除绑定事件的处理程序。one()函数用于为每个匹配元素的一个或多个事件绑定一次性事件处理函数
- 事件绑定(事件处理程序)
- jQuery -- 如何为动态添加的元素绑定事件处理函数
- jquery之jquery事件处理模型(利用jquery绑定事件处理程序)
- js使用函数绑定技术改变事件处理程序的作用域
- head first C#学习笔记:如何创建事件以及事件处理程序
- 如何使用Visual Studio Tools for Office创建事件处理程序
- 小程序的事件处理参数不能取得
- 如何用JS获取元素某一事件上绑定的所有Listener
- 删除事件处理程序如何解决
- EA&UML日拱一卒-0基础学习微信小程序(8)-事件处理和数据绑定
- javascript的事件流、绑定事件处理程序以及阻止事件流
- 如何:将多个事件连接到 ASP.NET 网页中的单个事件处理程序
- WPF 获取绑定的事件处理程序绑定全局资源