C#中删除控件的事件的方法类.
2010-07-31 15:49
267 查看
方法一:
代码
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);
}
}
代码
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#中删除控件的事件的方法类.
- C# 001 --- 正确的删除一个控件的事件函数 --- 解决错误: “A”不包含“B”的定义,并且找不到可接受类型为“A”的第一个参数的扩展方法“B”(是否缺少 using 指令或程序集引用?)
- C#中删除控件的事件的方法
- C# 中删除控件的事件的方法类
- C# winform datagridview 无需点击两次即可编辑内嵌控件的方法和删除默认的空行的方法
- C#动态代码生成控件后其他事件不能获取该控件值的解决方法
- 【C#基础】之WinForm窗体常用控件的属性、方法及事件简介
- C#中combobox 控件属性、事件、方法
- C#中动态订阅控件中任意事件的方法
- Winform(C#)Flash控件 属性 方法 事件
- C# 委托之 事件 三枪控件2 2014-03-10 09:48 阅读(0) 评论(0) 编辑 删除
- C#中删除任意控件任意事件的事件列表的实现!
- asp.net(C#)中给控件添加客户端js事件的方法
- C#中combobox 控件属性、事件、方法
- c# ListView控件的常用屬性、方法及事件
- c# 事件方法与窗口或控件的绑定
- 【C#基础】之WinForm窗体常用控件的属性、方法及事件简介
- 转 C#中动态订阅控件中任意事件的方法
- asp.net(C#)中给控件添加客户端js事件的方法
- asp.net(C#)中给控件添加客户端js事件的方法