C# 中删除控件的事件的方法类
- 方法一:
- 代码
- /// <summary>
- /// 删除指定控件的指定事件
- /// </summary>
- /// <param name="control"></param>
- /// <param name="eventname"></param>
- public void ClearEvent(System.Windows.Forms.Control control, string eventname)
- {
- if (control == null) return;
- if (string.IsNullOrEmpty(eventname)) return;
- BindingFlags mPropertyFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic;
- BindingFlags mFieldFlags = BindingFlags.Static | BindingFlags.NonPublic;
- Type controlType = typeof(System.Windows.Forms.Control);
- PropertyInfo propertyInfo = controlType.GetProperty("Events", mPropertyFlags);
- EventHandlerList eventHandlerList = (EventHandlerList)propertyInfo.GetValue(control, null);
- FieldInfo fieldInfo = (typeof(System.Windows.Forms.Control)).GetField("Event" + eventname, mFieldFlags);
- Delegate d = eventHandlerList[fieldInfo.GetValue(control)];
- if (d == null) return;
- EventInfo eventInfo = controlType.GetEvent(eventname);
- foreach (Delegate dx in d.GetInvocationList())
- eventInfo.RemoveEventHandler(control, dx);
- }
- 调用:ClearEvent(button1,"Click");//就会清除button1对象的Click事件的所有挂接事件。
- 方法二,写一个操作类,记录添加的事件列表,删除时从事件列表中读取出来然后删除.
- 代码
- class MyEventManager:IDisposable
- {
- EventHandlerList eventList = new EventHandlerList();
- Hashtable eventObjectList = new Hashtable();
- public void AddEvent(Control control, string eventname, EventHandler eventhandler)
- {
- string keystr = control.Name + eventname;
- if (!eventObjectList.Contains(keystr)) eventObjectList.Add(keystr, new object());
- object eventObject = eventObjectList[keystr];
- switch (eventname)
- {
- case "Click":
- control.Click += eventhandler;
- break;
- case "Enter":
- control.Enter += eventhandler;
- break;
- //...
- //这里可以添加更多的事件支持,这都是因为C# 不支持宏替换而采用的无奈之举
- //当然用反射也可以,不过用反射就没必要用这种方法了。
- }
- eventList.AddHandler(eventObject, eventhandler);
- }
- public void DelEvent(Control control, string eventname)
- {
- string keystr = control.Name + eventname;
- object eventObject = eventObjectList[keystr];
- Delegate d = eventList[eventObject];
- if (d == null) return;
- foreach (Delegate dd in d.GetInvocationList())
- {
- switch (eventname)
- {
- case "Click":
- control.Click -= (EventHandler)dd;
- break;
- case "Enter":
- control.Enter -= (EventHandler)dd;
- break;
- //...
- //这里可以添加更多的事件支持,这都是因为C# 不支持宏替换而采用的无奈之举
- //当然用反射也可以,不过用反射就没必要用这种方法了。
- }
- }
- eventList.RemoveHandler(eventObject, d);
- eventObjectList.Remove(eventObject);
- }
- }
C# 中删除控件的事件的方法类的更多相关文章
- [转] WinForm实现移除控件某个事件的方法
原文 WinForm实现移除控件某个事件的方法 本文实例讲述了WinForm实现移除控件某个事件的方法,供大家参考借鉴一下.具体功能代码如下: 主要功能部分代码如下: /// <summary& ...
- VB中WinSock控件的属性、方法、事件及应用
一.WinSock简介 Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX操作系统开发的网络通信接口,随着UNIX的广泛使用,Socket成为当前最流行的 ...
- android中ListView控件&&onItemClick事件中获取listView传递的数据
http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...
- 在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标的解决方法
在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标,空白一片.将面板窗口拉大,发现那些图标在很下面的位置,X轴的排列与正常状态一致. 软件环境 ...
- 《转》在win7,boa-constructor 0.6.1 的palette面板中没有控件图标的解决方法
原地址:http://blog.csdn.net/rickleo/article/details/6532595 在win7-64bit环境下,boa-constructor 0.6.1 的palet ...
- 母版页改变被嵌套的页面中的控件ID的解决方法
使用过模板页的朋友都会很纳闷,怎么页面的用js通过getElementById(“id”):找不到对象.查看了页面源代码才发现,原来控件的ID变了,这是母版页导致的.因为母版页怕母版页本身页面中的控件 ...
- Android View中的控件和监听方法...
PS:居然三天没写博客了...今天补上...东西虽多,但是都是一些基础...代码多了一些,有人可能会这样问,粘这么多代码有毛用..其实对于一个Android的初学者来说,一个完整的代码是最容易帮助理解 ...
- 关于EasyUI中DataGrid控件的一些使用方法总结
一,DataGrid 控件的工作流程 1,通过JavaScript将一个空白的div美化成一个空白的Datagrid模板 2,Datagrid模板通过制定的Url发送请求,获取数据 ...
- winfrom中pictureBox控件的部分使用方法
一.后台属性 1.pictureBox1.Image显示图片 2.pictureBox1.ImageLocation存储和提取图片路径 二.面板属性 1.Picturebox控件SizeMode属性 ...
随机推荐
- Bootstrap 时间控件datetimepicker与timepicker
一.datetimepicker 首先,我们看看点击选择时间的时候的展示页面吧 年 月 ...
- Debian & CentOS建立本地iso源
在宿舍搞开发的时候经常遇到有些工具需要安装,没有网络,这时候只能靠mount本地的iso镜像来搞,结果像Debian有3张安装光盘,CentOS有2张光盘,有时候安装包不在第一张光盘里,而在第二张光盘 ...
- 2018-2019 前期任务(一):资料阅读&Python入门
2018-2019 前期任务(一):资料阅读&Python入门 资料原文地址:Dumbcoin - An educational python implementation of a bitc ...
- 基于URL的权限管理(三)
思路:先创建一个专门的类ActiveUser用于存储用户登录的信息,主要用于存储用户id,账户,名称,菜单,权限. 认证拦截器主要是查看用户是否已登陆,如果没有转发到登陆界面,用户用账户跟密码登录时候 ...
- Principal components analysis(PCA):主元分析
在因子分析(Factor analysis)中,介绍了一种降维概率模型,用EM算法(EM算法原理详解)估计参数.在这里讨论另外一种降维方法:主元分析法(PCA),这种算法更加直接,只需要进行特征向量的 ...
- Three.js基础探寻二——正交投影照相机
本篇主要介绍照相机中的正交投影照相机. 第一篇传送门:Three.js基础探寻一 1.照相机 图形学中的照相机定义了三维空间到二维屏幕的投影方式. 针对投影方式照相机分为正交投影照相机和透视投影照相机 ...
- Java 集合系列0、概述
概述: Collection 框架中 从最上层的核心主干可以看到:Iterator.Collection.Map 三个接口(拓展思考1)1.Collection 接口:主要包括了集合中的一些常用操作, ...
- C# 关于用7zip压缩文件提示win32exception 系统找不到文件解决方案(win7 x64)
网上已经很多这方面的资料了,我就简单的说下好了 为了方便以后的查看 --------------------- 1.需要下载7zSharp:http://7zsharp.codeplex.com/re ...
- SKlearn库学习曲线
思想: # 1.现将所有样本用交叉验证方法或者(随机抽样方法) 得到 K对 训练集-验证集# 2.依次对K个训练集,拿出数量不断增加的子集如m个,并在这些K*m个子集上训练模型.# 3.依次在对应训练 ...
- PYTHON-基本数据类型-数字类型,字符串类型,列表类型-练习
# 字符串练习# 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)# name = " aleX"# # 1) 移除 name 变量对应的值两边的空格,并输 ...