![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| andrx |
|
|||
![]() Андрей ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 16.12.2005 Где: Киев Репутация: 1 Всего: 4 |
Добрый день!
Подскажите, кто знает, каким образом можно изменить порядок вызовов обоработчиков событий. В частности, имеется контрол с несколькими событиями Click. Предпринимается попытка добавить в этот контрол новый обработчик на событие Click. Каким образом сделать так, что бы этот последний добавленный обработчик выполнялся первым из всех имеющихся в списке таких обработчиков. заранее благодарен ! --------------------
Лучше скажи мало, но хорошо. (Козьма Прутков) |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Единственный возможный способ изменить порядок вызова обработчиков событий - это ДО того как будет выполнен первый из обработчиков, вклиниться в порядок - взять делегат и отсортировать в массиве обработчиков вызовы по своим собственным правилам, после чего запихнуть массив обработчиков обратно в делегат события. -------------------- ![]() |
|||
|
||||
| arilou |
|
||||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: нет Всего: 61 |
FYI, это нарушает один из основных принципов работы с событиями - обработчики не должны зависеть от порядка, в котором они вызываются. Если возникает такая взаимосвязь, то это означает, что либо присутствует ошибка в архитектуре, либо выбраный способ решения (события) не подходит для задачи. andrx, было бы неплохо, если бы ты сказал, зачем это надо... |
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
З.Ы, если уж говорить об ООП, то для возможности как-то воздействовать на порядок обработки событий, во всех "нормальных" контролах (да и обычных классах с событиями тоже) заводят методы с именем OnXXXX, где XXXX - имя события. Метод OnXXXX генерирует событие (предварительно проверив, не равно ли поле с событием null). Этот метод специально делается protected virtual, чтобы в производных классах можно было перекрыть его и добавить собственную логику. Тогда в любом классе из цепочки наследования можно сгенерировать событие вызвав метод OnXXXX, и при этом будут соблюдён принцип ООП (полиморфизм), по которому вызывается реализация метода именно того класса, с экземпляром которого мы имеем дело, и событие будет сгенерировано именно до/после необходимых действий, закодированных во всех классах цепочки наследования.
Пример - метод OnLoad у форм, и другие. -------------------- ![]() |
|||
|
||||
| andrx |
|
|||
![]() Андрей ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 16.12.2005 Где: Киев Репутация: 1 Всего: 4 |
arilou
описывая Вам свою проблему, пришел к выводу, что действительно есть недоработка в построении пограммы mr.DUDA - спасибо! Ваша помощь нашла применение Это сообщение отредактировал(а) andrx - 28.2.2006, 21:50 --------------------
Лучше скажи мало, но хорошо. (Козьма Прутков) |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: нет Всего: 61 |
Не-не-не, это тут совершенно ни при чем. Речь идет о том, что обработчики события не должны никоим образом зависеть друг от друга, и от порядка, в котором они прицеплены.
И вот не поверите, в 95% случаев это помогает всем |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |