簡體   English   中英

如何確定某個特定代表是否已分配給某個活動?

[英]How do I find out if a particular delegate has already been assigned to an event?

我在winform上有一個命令按鈕。 所以,如果我有類似的東西:

myButton.Click += MyHandler1;
myButton.Click += MyHandler2;
myButton.Click += MyHandler3;

如何判斷是否已將任何特定的MyHandler添加到Click事件中,以便它不會再添加到我的代碼中的其他位置?

我已經閱讀了如何使用GetInvocationList()來獲取自己的事件信息。 但是在嘗試使用各種組合獲取命令按鈕的項目時出錯。 它說,

“事件'System.Windows.Forms.Control.Click'只能出現在+ =或 - =的左側。”

我錯過了什么?

[編輯] - 我想強調艾哈邁德指出的這個問題 這是一個kludge,應該更容易恕我直言,但看起來它可能只是工作。

如果您對已添加的處理程序有疑問,請將其刪除並重新添加。 如果您的處理程序未首先添加,則會忽略您的刪除。

myButton.Click -= MyHandler1;
myButton.Click += MyHandler1;

您還可以創建一個附加到事件的方法,並確保代碼只運行一次。

private bool handlersAdded;
private void AddHandlers()
{
    if (this.handlersAdded) return;
    myButton.Click += MyHandler1;
    this.handlersAdded = true;
}

GetIvocationList的使用只能在事件的所有者(在你的情況下是myButton)中完成,這是事件背后的一個想法(而不是委托)。

就像Slugster所說的那樣,你無法從myButton外部檢查調用列表,但是你可以在添加之前嘗試刪除MyHandler#。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM