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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват событий в Windows.Forms, делегат или override 
:(
    Опции темы
Kuvaldis
Дата 8.10.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



Всем привет!
Вот прочитал, что для реагирования компонента на какое-нибудь событие можно поступить двояко:
1. Создать делагат на нужную функцию, например:
Код

this.MouseUp += new MouseEventHandler(MainWindow_MouseUp);
 ...
void MainWindow_MouseUp(object sender, MouseEventArgs e)
{}


2. Непосредственное замещение метода:
Код

protected override void OnMouseUp(MouseEventArgs e)
{} 

Поясните, когда что лучше использовать.
Пока вижу только одно различие: в первом случае можно подвесить много делегатов


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
tol05
Дата 8.10.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 36
Всего: 170



дело в том, что сам контрол (форма) внутри себя тоже может быть подписана на свое же событие. Пример - Paint. Если мы не подписываемся на Paint, то базовый обработчик вызывается делегатом события автоматически. 
Если переопределяем виртуальный метод-обработчик, то всегда вызываем base.OnPaint() явно, ведь старая реализация сама не вызовется.

Если ты используешь вариант 1, то выполнится base.OnMouseUp() и твой MainWindow_MouseUp()
Если ты используешь вариант2, то выполнится только твой OnMouseUp()

Есть еще третий способ - анонимные делегаты.
вот тут есть преймущества - в методе видны переменные с областью действия функции, содержащей объявление делегата.
Код

public void Func()
{
int i = 0;
this.MouseUp += delegate(object sender, MouseEventArgs e)
                                   {
                                        i = 2;
                                   };
}


а по поводу количества обработчиков - метод подписки значения не имеет. Все события - потомки от MulticastDelegate и поддерживают списки обработчиков.

Это сообщение отредактировал(а) tol05 - 8.10.2007, 14:42


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Kuvaldis
Дата 8.10.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



tol05, 
Мдя... сиба за инфу smile Уже не в первый раз...


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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