| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > события составного элемента управления |
| Автор: jackfall 27.1.2009, 16:45 |
| Создал составной элемент управления, панелька, кнопка и текст. накидал их потом на форму, ставлю события на нажатие мыши, а нет( не работает вообще. Вообще никакие события е работают. Может их надо было как то переопределять когда создавал ЭУ? Подскажите плз. |
| Автор: antikom 27.1.2009, 17:22 |
| Смотря какое событие. Покажи код будем разбираться. |
| Автор: jackfall 27.1.2009, 19:48 |
| та из стандартных.. в окне выбрать.. например MouseDown. |
| Автор: antikom 28.1.2009, 12:02 | ||
Попробуй переопределить событие:
|
| Автор: Unlocker 28.1.2009, 12:23 | ||||||
| Нет никаких проблем для перехвата событий на контроле. Порядок действий очень простой. не надо ничего переопределять. 1)ставишь прослушку сообщений о событиях
2)определяешь реакцию на событие
3)вырубаешь прослушку, когда необходимо
Практически тоже самое можно сделать и в дизайнере VS, но если надо управлять прослушкой сообщений гибко, т.е. от одинаковых событий действовать по-разному, то придется вручную управлять прослушкой и перенаправлением вызовов (callback). в остальном все прозрачно. если что-то неясно, то рекомендую книги Э. Троелсена, потому что там это хорошо и просто описано. |
| Автор: jackfall 28.1.2009, 14:48 |
| antikom, пробовал переопределять - не помогает. Unlocker, это тоже не работает( |
| Автор: Unlocker 28.1.2009, 14:55 |
| Тогда код в студию. Я это сделал три дня назад, и это работало. + требуются объяснения какие события нужны, как осуществляется проверка событий? |
| Автор: jackfall 29.1.2009, 16:07 | ||||
Ну.. я незнаю.. поможет ли код компонента:
Ну и там где я на форму поставил этот ЭУ такой вот обработчик к примеру (ну и в дезайнере стоит автоматически добавление обработчика на это):
|
| Автор: Unlocker 29.1.2009, 16:38 |
| Код смотреть надо в других местах. 1) Надо раскрыть код дизайнера (#region "InitializeComponents") и посмотреть какие события у каких компонентов объявлены на прослушку. Этот код тоже нужен. 2) Если ты хочешь создать событие, отличное от стандартных событий компонентов контрола, то надо прописать делегатов для данного вида событий, и непосредственно само событие. В зависимости от пожеланий делаются разные манипуляции. И, запомни, с дизайнером нужно работать по принципу: "доверяй, но проверяй". |
| Автор: jackfall 29.1.2009, 17:16 | ||
| Unlocker, Свои события делал, это без проблем. научился) а вот что тут такое непонятно( В дизайнере есть
|
| Автор: Unlocker 29.1.2009, 17:40 |
| В таком случае могу посоветовать воспользоваться встроенным в студию дебаггером. Если ничего не получится, то можешь залить на форум архив с проектом, постараюсь выяснить в чем дело. |
| Автор: diadiavova 29.1.2009, 18:01 |
| В прилагаемом проекте есть контрол, на который я бросил две панели. Клик по нижней панели вызывает событие "Click" самого контрола. В форме для него назначен обработчик. |
| Автор: jackfall 30.1.2009, 17:50 | ||
| diadiavova, да, так работает. Но тогда если я хочу чтобы клик ЭУ происходил при нажатии на любой компонент в самом ЭУ то так на все нужно сделать внутри него.. на кнопку, на панель, на надпись.. например. Unlocker, Прикладываю пример... просто мой ЭУ (панель, надпись и кнопка) на форме. событие
не происходит. вобщем-то я догадываюсь почему.. В самом ЭУ ведь есть основа - MyUserControl. Видимо при вышеуказанном событии myUserControl1_MouseClick клик должен происходить по ней чтобы вызвалось, а она внизу.. под панелью. И поэтому наверно не происходит. Подскажите... может я чего-то просто не учел) |
| Автор: Unlocker 30.1.2009, 18:04 | ||
| Все верно, события клика не происходит, потому что клик идет по дочерним контролам. Тут два варианта можно предложить: 1) сделать контролы прозрачными для взаимодействия, установив свойство
2) перехватывать события дочерних контролов и перенаправлять их форме UserControl. Этот вариант гибче, но сложнее, т.к. придется управлять самостоятельно перенаправлением обработчиков событий. Все зависит от поставленной задачи и требований к ее выполнению по времени и функционалу. |
| Автор: jackfall 30.1.2009, 18:31 |
| Unlocker, если enabled ставить false, то они и выглядят неактивными... всем спасибо) |