![](/img/trans.png)
[英]Tridion : How can I find out if a page has been published to a particular publication target using the business connector?
[英]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.