日期:2014-05-18  浏览次数:20826 次

如何把加到控件事件队列中的所有事件清除?
如何把加到控件事件队列中的所有事件清除?
在C#中,可以用+=把自定义事件添加到控件事件队列中,也可以用-=把队列中事件删除,但要把事件显式的写出来,有没有办法可以不用知道事件队列中的事件名称,直接把事件队列清空呢?

例如:我在TextBox1.KeyPress中加了两个事件
txtbox1.KeyPress   +=   new   TextBox.KeyPress(txtbox2_KeyPress);
txtbox1.KeyPress   +=   new   TextBox.KeyPress(txtbox3_KeyPress);
现在我不想用下面的两个语句来删除,有什么办法呢?
txtbox1.KeyPress   -=   new   TextBox.KeyPress(txtbox3_KeyPress);
txtbox1.KeyPress   -=   new   TextBox.KeyPress(txtbox2_KeyPress);
原因是我添加进去的事件不确定的,操作不同就会添加不同的事件进去!

------解决方案--------------------
应该不可以,不过楼主可以不使用+=New的形式直接注册事件,而是把要注册的事件都可以添加到一个集合中,然后通过集合循环依次把所有事件-=掉.
------解决方案--------------------
不可以,如果是自定义类,可以参考:


public delegate void dele();
class Demo
{
public static int Main(string[] args)
{

T t=new T();
dele d=new dele(t_ev);
t.ev+=d;
t.ev+=d;
t.test();
t.RemoveEv();
t.test();
return 1;
}

private static void t_ev()
{
System.Console.WriteLine( "abc ");
}
private static void t_ev1()
{
System.Console.WriteLine( "abc1 ");
}
}
class T
{

public event dele ev;
public void test()
{
if (ev!=null)
ev();

}
public void RemoveEv()
{
ev=null;
}

}


除了在定义事件本身的类里面,对事件只能使用+=和-=操作符的
自定义的类很好做到,就像上面的例子。如果你是使用别人的类
那最好的办法就是自定义控件,比如写一个
MyPanel:Panel
{
public void RemovePaintEvent()
{
Paint =null;
}

}

------解决方案--------------------
如果自定义TextBox类的话应该时可以的
Eri(NULL)的方法就可以