添加處理器檢查事件處理程序連接到與事件
if(!ClickHandled)
this.Click += (s, e) =>{ }
刪除處理程序:
if(ClickHandled)
this.Click -= (s, e) =>{ }
有沒有辦法知道是否已經有連接到事件處理程序控制(並可能獲取它們的列表,例如獲取點擊事件的事件處理程序列表)?
添加處理器檢查事件處理程序連接到與事件
if(!ClickHandled)
this.Click += (s, e) =>{ }
刪除處理程序:
if(ClickHandled)
this.Click -= (s, e) =>{ }
有沒有辦法知道是否已經有連接到事件處理程序控制(並可能獲取它們的列表,例如獲取點擊事件的事件處理程序列表)?
您可以實現從EventHandler繼承的類。對於這個類,你可以實現你想要的任何額外的行爲。例如,您可以創建一個將保存對象事件映射的集合,並且可以實現搜索給定對或模式的方法。
你可以這樣做,假設你有權訪問類的源。謹防這種方式,你放棄了何時將所有代表召集給班上的客戶的控制,這不是一個好主意。如果您沒有查找eventhandler的列表,但只想知道是否訂閱了事件。或許您可以使用另一種方法,該方法僅告知是否任何人訂閱了點擊事件。
class MyButton
{
delegate void ClickHandler(object o ,EventArgs e);
public event ClickHandler Click;
......
public List<ClickHandler> ClickHandlerList
{
get
{
return ClickHandler.GetInovationList().Cast<ClickHandler>().ToList();
}
}
public bool IsClickEventSubcribed
{
get
{
return ClickHandler.GetInovationList().Cast<ClickHandler>().Any();
}
}
}
如果這樣做的目的是停止向事件監聽器發送信號,那麼通過支票來發送信號是不是更容易?
if (NotifyingEnabled)
{
SomeEvent.Raise(this);
}
如果您有權訪問暴露事件的那個類的源,那麼您可以使用委託來獲取所有事件處理程序....但是如果您想要使用內置控件執行此操作...那麼上面提到的反射鏈接可以使用 – Viru
可能是XY問題。爲什麼你需要知道處理程序的數量?事件是一種發出信號的方式,如果有用戶或沒有用戶,它應該沒有關係。 – Sinatr
以及我有權訪問類的來源 –