| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Перехват событий в Windows.Forms |
| Автор: Kuvaldis 8.10.2007, 12:07 | ||||
| Всем привет! Вот прочитал, что для реагирования компонента на какое-нибудь событие можно поступить двояко: 1. Создать делагат на нужную функцию, например:
2. Непосредственное замещение метода:
Поясните, когда что лучше использовать. Пока вижу только одно различие: в первом случае можно подвесить много делегатов |
| Автор: tol05 8.10.2007, 12:25 | ||
| дело в том, что сам контрол (форма) внутри себя тоже может быть подписана на свое же событие. Пример - Paint. Если мы не подписываемся на Paint, то базовый обработчик вызывается делегатом события автоматически. Если переопределяем виртуальный метод-обработчик, то всегда вызываем base.OnPaint() явно, ведь старая реализация сама не вызовется. Если ты используешь вариант 1, то выполнится base.OnMouseUp() и твой MainWindow_MouseUp() Если ты используешь вариант2, то выполнится только твой OnMouseUp() Есть еще третий способ - анонимные делегаты. вот тут есть преймущества - в методе видны переменные с областью действия функции, содержащей объявление делегата.
а по поводу количества обработчиков - метод подписки значения не имеет. Все события - потомки от MulticastDelegate и поддерживают списки обработчиков. |
| Автор: Kuvaldis 8.10.2007, 12:31 |
| tol05, Мдя... сиба за инфу |