我們經常為遇到這中情況,單擊某一個控件,根據不同的情況,激發不同的事件。因此,就要處理多事件綁定的問題。由於c#的事件是一種多播委托。當綁定多個事件時,事件會依次觸發。而如果我們只希望只觸發最后一次綁定的事件,那么之前的事件綁定應被解除。在不知道前一個方法名稱的情況下,如果解除綁定,就是一個問題。網上用到了反射的方式,確實也是一種解決之道。不過我更希望用如下的方式。即把方法存入一個List<>中,每次事件綁定時,遍歷List<>中的委托,刪除所有綁定事件,然后再次綁定控件。
代碼如下:
public delegate void sayHelloHandle(string pMessage);
public class TestEvent
{
public TestEvent()
{
_HandleList = new List<sayHelloHandle>();
}
private List<sayHelloHandle> _HandleList;
private event sayHelloHandle _sayHello;
public event sayHelloHandle sayHello
{
add
{
ClearEvent();
_sayHello += value;
_HandleList.Add(value);
}
remove
{
_sayHello -= value;
}
}
private void ClearEvent()
{
for (int i = 0; i < this._HandleList.Count;i++ )
{
_sayHello -= this._HandleList[i];
}
}
}