2012-04-27 224 views
1

我想有條件地取消掛鉤事件處理程序。這是做正確的方式:以編程方式取消掛鉤事件處理程序

tb.TextChanged -= textBoxIntName_TextChanged; 

這似乎是明智的,因爲它鉤住了必需的:

tb.TextChanged += textBoxIntName_TextChanged; 

...但它也似乎有什麼對應於「德爾福的方式」讓儘可能多或更多的意義(但很可惜,它不編譯):

tb.TextChanged = nil; 
+0

' - ='應該適合你。 – dwerner 2012-04-27 22:04:50

回答

5

不能分配事件 - 只重視(+ =)和刪除( - =)操作可用於客戶端。

閱讀更多關於事件here

另外C#規範says

由於+ =和 - =是被允許在聲明瞭事件的類型外的事件 ,唯一的操作,外部碼可以添加和 移除處理程序用於事件,但不能以任何其他方式獲取或修改事件處理程序的基礎列表。

+0

我們必須在這裏談論語義,因爲從我的角度來看,我的事件分配正在工作(使用+ =)。 – 2012-04-27 22:10:28

+0

@ClayShannon nope,實際上這增加了另一個事件處理程序到底層事件處理程序列表(在你的情況下這個列表存儲在TextBox中)。 .Net中的事件就像Observer模式。主題(TextBox)包含觀察者(事件處理程序)的集合,並在事件發生時通知它們。您只能將觀察者添加到收藏中,或者將其從收藏中刪除。但是你無法獲得收藏 - 它的主題的內部部分。 – 2012-04-27 22:14:52

+0

我實現了Observer模式,或者發佈和訂閱,在這裏工作,但它仍然在使用+ =是做什麼我期望/想要它做的情況。如果它不是字面上的assigend,我真的不在乎,因爲它的行爲就好像它。 – 2012-04-27 23:00:59

相關問題