博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何判断某个事件已经绑定了某个事件处理程序?
阅读量:6819 次
发布时间:2019-06-26

本文共 1028 字,大约阅读时间需要 3 分钟。

 

 

//
为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
");
}

 

转载地址:http://arbzl.baihongyu.com/

你可能感兴趣的文章
(转)完整java开发中JDBC连接数据库代码和步骤
查看>>
Redis Lua脚本原理
查看>>
有时间测试dism
查看>>
/Users/alamps/AndroidStudioProjects/Demo10ScrollView
查看>>
【Swift】iOS UICollectionView 计算 Cell 大小的陷阱
查看>>
为什么我刚发表的文章变成了“待审核”,csdn有没有官方解释啊
查看>>
Android多线程源码详解一:handler、looper、message、messageQueue
查看>>
SaaS加速器II 能力中心:互利互补 共享商业红利
查看>>
病毒木马防御与分析实战
查看>>
分布式工作流任务调度系统Easy Scheduler正式开源
查看>>
Flutter实战(一)写一个天气查询的APP
查看>>
Python零基础学习笔记(十二)—— 字符串及其常用方法
查看>>
Webpack 和 Gulp 构建伪命令行项目
查看>>
在线面试, 前端, 提纲, 草稿
查看>>
hive_异常_01_ Terminal initialization failed; falling back to unsupported
查看>>
分布式事务键值数据库 TiKV 加入 CNCF 沙箱孵化器
查看>>
Vue - day1
查看>>
kvm.virsh常用命令篇
查看>>
[Hive]Hive使用指南四 客户端导入数据
查看>>
10.JUC线程高级-线程八锁
查看>>