博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何从一个event事件的委托列表上移除事件
阅读量:5754 次
发布时间:2019-06-18

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

     前些天有同事问我怎么从一个Button的Click事件中移除所有委托,我想了一下可以这样来做:

public
 
void
 RemoveEvent(Control c)
{
    PropertyInfo propertyInfo 
=
 (
typeof
(System.Windows.Forms.Button)).GetProperty(
"
Events
"
, BindingFlags.Instance 
|
 BindingFlags.NonPublic);
    EventHandlerList eventHandlerList 
=
 (EventHandlerList)propertyInfo.GetValue(c, 
null
);
    FieldInfo fieldInfo 
=
 (
typeof
(Control)).GetField(
"
EventClick
"
, BindingFlags.Static 
|
 BindingFlags.NonPublic);
    Delegate d 
=
 eventHandlerList[fieldInfo.GetValue(
null
)];
    
if
 (d 
!=
 
null
)
    {
        
foreach
 (Delegate temp 
in
 d.GetInvocationList())
        {
            c.Click 
-=
 (EventHandler)temp;
        }
     } 
}

 

 

      基本原理还是通过反射来做,获取字段的委托列表后再进行处理((EventHandlerList)propertyInfo.GetValue(c, null)可以获取委托列表),通过Reflector可以看到如下信息: 

 

     

转载于:https://www.cnblogs.com/vivounicorn/archive/2009/06/24/1510328.html

你可能感兴趣的文章
Mongodb启动命令mongod参数说明
查看>>
TCP&UDP压力测试工具
查看>>
oracle 导入数据
查看>>
首个5G智慧机场落地广州 速度是4G的50倍
查看>>
Android 最简单的自定义Dialog之一
查看>>
磨刀不误砍柴 - 配置适合工作学习的桌面环境
查看>>
Java笔记-反射机制(一)
查看>>
redux v3.7.2源码解读与学习之 applyMiddleware
查看>>
【React】为什么我不再使用setState?
查看>>
Git原理与高级使用(3)
查看>>
从JDK源码看Writer
查看>>
Express 结合 Webpack 实现HMRwi
查看>>
基于protobuf的RPC实现
查看>>
坚信每个人都能成为品牌
查看>>
JAVA的对象复制
查看>>
jquery要怎么写才能速度最快?(转)
查看>>
cisco设备IOS上传、备份、设置启动IOS
查看>>
打开Office报错
查看>>
我的友情链接
查看>>
AsyncTask简易使用
查看>>