Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как изменить порядок вызовов обработчиков событий 
V
    Опции темы
andrx
Дата 23.2.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 16.12.2005
Где: Киев

Репутация: 1
Всего: 4



Добрый день!
Подскажите, кто знает, каким образом можно изменить порядок вызовов обоработчиков событий.

В частности, имеется контрол с несколькими событиями Click. Предпринимается попытка добавить в этот контрол новый обработчик на событие Click. Каким образом сделать так, что бы этот последний добавленный обработчик выполнялся первым из всех имеющихся в списке таких обработчиков.

заранее благодарен !
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
mr.DUDA
Дата 23.2.2006, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Цитата(andrx @ 23.2.2006, 17:25 Найти цитируемый пост)
Каким образом сделать так, что бы этот последний добавленный обработчик выполнялся первым из всех имеющихся в списке таких обработчиков.

Единственный возможный способ изменить порядок вызова обработчиков событий - это ДО того как будет выполнен первый из обработчиков, вклиниться в порядок - взять делегат и отсортировать в массиве обработчиков вызовы по своим собственным правилам, после чего запихнуть массив обработчиков обратно в делегат события.


--------------------
user posted image
PM MAIL WWW   Вверх
arilou
Дата 28.2.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: нет
Всего: 61



Цитата(andrx @ 23.2.2006, 18:25 Найти цитируемый пост)
Подскажите, кто знает, каким образом можно изменить порядок вызовов обоработчиков событий.

Цитата(mr.DUDA @ 23.2.2006, 22:16 Найти цитируемый пост)
Единственный возможный способ изменить порядок вызова обработчиков событий

FYI, это нарушает один из основных принципов работы с событиями - обработчики не должны зависеть от порядка, в котором они вызываются. Если возникает такая взаимосвязь, то это означает, что либо присутствует ошибка в архитектуре, либо выбраный способ решения (события) не подходит для задачи.


andrx, было бы неплохо, если бы ты сказал, зачем это надо...


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 28.2.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



З.Ы, если уж говорить об ООП, то для возможности как-то воздействовать на порядок обработки событий, во всех "нормальных" контролах (да и обычных классах с событиями тоже) заводят методы с именем OnXXXX, где XXXX - имя события. Метод OnXXXX генерирует событие (предварительно проверив, не равно ли поле с событием null). Этот метод специально делается protected virtual, чтобы в производных классах можно было перекрыть его и добавить собственную логику. Тогда в любом классе из цепочки наследования можно сгенерировать событие вызвав метод OnXXXX, и при этом будут соблюдён принцип ООП (полиморфизм), по которому вызывается реализация метода именно того класса, с экземпляром которого мы имеем дело, и событие будет сгенерировано именно до/после необходимых действий, закодированных во всех классах цепочки наследования.

Пример - метод OnLoad у форм, и другие.


--------------------
user posted image
PM MAIL WWW   Вверх
andrx
Дата 28.2.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 16.12.2005
Где: Киев

Репутация: 1
Всего: 4



arilou
описывая Вам свою проблему, пришел к выводу, что действительно есть недоработка в построении пограммы


mr.DUDA - спасибо! Ваша помощь нашла применение

Это сообщение отредактировал(а) andrx - 28.2.2006, 21:50
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
arilou
Дата 1.3.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: нет
Всего: 61



Цитата(mr.DUDA @ 28.2.2006, 21:33 Найти цитируемый пост)
З.Ы, если уж говорить об ООП, то для возможности как-то воздействовать на порядок обработки событий, во всех "нормальных" контролах (да и обычных классах с событиями тоже) заводят методы с именем OnXXXX, где XXXX - имя события

Не-не-не, это тут совершенно ни при чем. Речь идет о том, что обработчики события не должны никоим образом зависеть друг от друга, и от порядка, в котором они прицеплены.

Цитата(andrx @ 28.2.2006, 21:48 Найти цитируемый пост)
описывая Вам свою проблему, пришел к выводу, что действительно есть недоработка в построении пограммы

И вот не поверите, в 95% случаев это помогает всем smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.4360 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.