我們經常為遇到這中情況,單擊某一個控件,根據不同的情況,激發不同的事件。因此,就要處理多事件綁定的問題。由於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]; } } }