這並不容易。在一個類中聲明的事件僅向該類的用戶公開add
和remove
。只能從類內部訪問事件的調用列表。
所以,你可以做到這一點的一種方式是繼承自己MyButton
類是這樣的:
public class MyButton : Button
{
private event EventHandler MyClick;
public new event EventHandler Click
{
add
{
MyClick += value;
base.Click += value;
}
remove
{
MyClick -= value;
base.Click -= value;
}
}
public Delegate[] GetClickHandlers()
{
return MyClick?.GetInvocationList();
}
}
所以我創建了一個新的Click
事件封裝了base.Click
事件,並存儲在一個額外的事件調用列表。
可以比得到的相關處理程序的名稱是這樣的:
Console.WriteLine(
string.Join(Environment.NewLine,
button1.GetClickHandlers().Select(h => h.Method.Name)));
但現在,我看到這個代碼,你很可能存儲/刪除value
秒後,以add
和remove
在一個單獨的列表而不是使用MyClick
,但這個想法是一樣的。
您的主要問題是,您不能致電 GetInvocationList()
。
它不是一個確切的DUP(http://stackoverflow.com/questions/136975/has - 事件處理程序已被添加) - 但有答案 - 谷歌是你的朋友 – BugFinder