2012-04-27 3 views
1

Я хочу условно отцепить обработчик события. Правильно ли это делается:Программно отключить обработчик событий

tb.TextChanged -= textBoxIntName_TextChanged; 

?

Это кажется разумным, так как закреплять его требуемое:

tb.TextChanged += textBoxIntName_TextChanged; 

... но это также кажется, что соответствует «Delphi пути» делает столько же или больше смысла (но, увы, это не компилируется):

tb.TextChanged = nil; 
+0

'- =' должно работать на вас. – dwerner

ответ

5

Вы не можете назначить события - только прикрепить (+ =) и удаления (- =) операции доступны для клиентов.

Подробнее о событиях here.

Кроме C спецификация # says:

С + = и - = единственными операциями, которые разрешены на событии вне типа, который объявляет событие, внешний код может добавлять и удалить обработчик для событие, но не может каким-либо другим способом получить или изменить базовый список обработчиков событий.

+0

Здесь мы должны говорить семантику, потому что, с моей точки зрения, мое назначение событий работает (используя + =). –

+0

@ClayShannon nope, на самом деле это добавляет еще один обработчик события в базовый список обработчиков событий (в вашем случае этот список хранится в TextBox). События в .Net - это что-то вроде шаблона Observer. Subject (TextBox) содержит коллекцию наблюдателей (обработчиков событий) и уведомляет их о возникновении события. Вы можете добавить наблюдателя в коллекцию или удалить его из коллекции. Но у вас нет доступа к коллекции - ее внутренней части Subject. –

+0

Я понимаю, что шаблон Observer, или публикация и подписка, здесь работает, но все равно, что использование + = делает то, что я ожидаю/хочу, чтобы он делал. Если это не буквально порицание, мне все равно, потому что он действует так, как будто это так. –

 Смежные вопросы

  • Нет связанных вопросов^_^