Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > .NET для новичков > События компонента |
Автор: Unsane 14.3.2008, 13:34 | ||
Вот возник такой вопрос. На одно и тоже событие можно повесить несколько обработчиков. Например:
Можно ли получить список этих обработчиков и отключить, например, первый и третий? |
Автор: HAL707 14.3.2008, 17:14 | ||
|
Автор: CYBERDREAM 14.3.2008, 17:20 |
Думаю он не совсем это имел ввиду, а вывести к примеру список подключенных обработчиков.. |
Автор: Unsane 14.3.2008, 18:30 | ||
Именно так. ![]() |
Автор: vponomarov 14.3.2008, 18:43 |
Unsane, по-моему нет готового механизма для решения вашей задачи как вариант, можно при добавлении обработчика событий записывать его куда-нить и в случае необходимости удалять его оператором -= хотя конечно как-то некрасиво получается ![]() |
Автор: Ctrl 16.3.2008, 13:15 | ||
Тут все зависит от того является ли это событие собственным событием класса или это событие другого класса. Во втором случае простых решений нет, а вот в первом вполне можно кое чего сделать. Вот пример из которого становится ясна моя идея:
|
Автор: vponomarov 17.3.2008, 11:11 |
Ctrl, сорри за глупый вопрос, но почему нельзя вызвать GetInvocationList из класса формы для какого-нить события (например, MouseDown)? |
Автор: Ctrl 17.3.2008, 22:27 | ||||||
Вопрос не глупый, на самом деле в данной ситуации есть одна засада: Вот кусок кода:
А вот как он выглядит в IL:
Компилятор завернул все что надо в поле, которое поддерживает только 2 операции (+= -= ), и на любое действие со стороны он скажет следующее:
и будет прав ![]() Добавлено через 1 минуту и 23 секунды Так что, как я писал выше простых решений тут нет |
Автор: RedsAn 18.3.2008, 15:27 |
Спасибо Ctrl! Показательный пример. Только для тестирования надо атрибуты указать: [TestFixture] для Program и [Test] для TestIt() + сделать этот метод экземплярным. |
Автор: Ctrl 18.3.2008, 19:57 |
2RedsAn: с этими аттрибутами и с техникой юнит-тестирования я отлично знаком... Ну на самом деле целью было просто попользовать Assert, дабы не возникали при взгляде на код лишние вопросы "ЭЭЭЭЭ ... а как это работает?" |