如何判断某个事件已经绑定了某个事件处理程序?
2010-04-17 12:10
627 查看
//为Button1绑定一个事件处理程序
Button btn = new Button();
btn.Click += new EventHandler(button2_Click);
//获取Button类定义的所有事件的信息
PropertyInfo pi = (typeof(Button)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
//获取Button对象btn的事件处理程序列表
EventHandlerList ehl = (EventHandlerList)pi.GetValue(btn, null);
//获取Control类Click事件的字段信息
FieldInfo fieldInfo = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
//用获取的Click事件的字段信息,去匹配btn对象的事件处理程序列表,获取btn对象Click事件的委托对象
//事件使用委托定义的,C#中的委托时多播委托,可以绑定多个事件处理程序,当事件发生时,这些事件处理程序被依次执行
//因此Delegate对象,有一个GetInvocationList方法,用来获取这个委托已经绑定的所有事件处理程序
Delegate d = ehl[fieldInfo.GetValue(null)];
foreach (Delegate del in d.GetInvocationList())
{
//判断一下某个事件处理程序是否已经被绑定到Click事件上
Console.WriteLine(del.Method.Name == "button1_Click");
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello,button1_Click");
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello,button2_Click");
}
Button btn = new Button();
btn.Click += new EventHandler(button2_Click);
//获取Button类定义的所有事件的信息
PropertyInfo pi = (typeof(Button)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
//获取Button对象btn的事件处理程序列表
EventHandlerList ehl = (EventHandlerList)pi.GetValue(btn, null);
//获取Control类Click事件的字段信息
FieldInfo fieldInfo = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
//用获取的Click事件的字段信息,去匹配btn对象的事件处理程序列表,获取btn对象Click事件的委托对象
//事件使用委托定义的,C#中的委托时多播委托,可以绑定多个事件处理程序,当事件发生时,这些事件处理程序被依次执行
//因此Delegate对象,有一个GetInvocationList方法,用来获取这个委托已经绑定的所有事件处理程序
Delegate d = ehl[fieldInfo.GetValue(null)];
foreach (Delegate del in d.GetInvocationList())
{
//判断一下某个事件处理程序是否已经被绑定到Click事件上
Console.WriteLine(del.Method.Name == "button1_Click");
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello,button1_Click");
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello,button2_Click");
}
相关文章推荐
- 如何判断某个事件已经绑定了某个事件处理程序?
- 如何判断某个事件已经绑定了某个事件处理程序?
- 如何取得某个菜单所绑定的所有事件处理程序
- 如何取得某个菜单所绑定的所有事件处理程序
- 如何:在 ASP.NET 网页中对事件处理程序进行运行时动态绑定
- JS事件详解(二) —— 事件处理程序(事件的绑定)
- c#如何取得事件注册的方法 或者说 如何判断事件已经被注册过? ... ..
- ios 动态添加了按钮,绑定同一个点击事件,如何判断点击的是哪个?
- 如何使用Visual Studio Tools for Office创建事件处理程序
- 如何安全删除基于对话框的MFC中控件的事件处理程序
- off() 方法 与 unbind() 方法移除绑定事件的处理程序。one()函数用于为每个匹配元素的一个或多个事件绑定一次性事件处理函数
- C#如何判断程序已经启动
- 微信小程序 动态绑定数据及动态事件处理
- #646 – 在按键按下事件处理程序中判断按键开关状态(Detecting a Key’s Toggle State in a Keypress Handler)
- JQuery1.8版本如何判断是否绑定事件
- DHTML_____如何编写事件处理程序
- javascript的事件流、绑定事件处理程序以及阻止事件流
- 利用反射绑定事件处理程序(C#)
- IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素
- ios 动态添加了按钮,绑定同一个点击事件,如何判断点击的是哪个?