![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
skhilkov |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: нет Всего: 7 |
Здравствуйте, пытаюсь победить такую вещь: нужно чтобы листбох закрывался при нажатии на любом другом компоненте формы,
ну типа контекстный он. Пытался отловить Windows Messages, реализовал IMessageFilter в форме. Программа начинает жутко тормозить, просто висит... Пробовал назначить обработчик события всем элементам формы после ее инициализации(рекурсивно) - не работает для некоторых компонентов, непонятно почему... Может я неправильно как-то реализовал IMessageFilter, нужно как-то особенно это делать? Вот что я пробовал:
А это второй способ:
-------------------- Кто понял жизнь, тот не спешит. |
||||
|
|||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: нет Всего: 18 |
skhilkov, а почему не использовать событие LostFocus ?
|
|||
|
||||
skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: нет Всего: 7 |
Rohoss,
это несколько неудобно... во-первых, компонент появляется по нажатию на кнопку, то есть он сам появляется не в фокусе, во-вторых, неудобно для пользователя если он мышь нечаянно отвел на пиксель в сторону.. В общем есть аналогичная реализация на Дельфи, надо сделать также ) -------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: нет Всего: 18 |
Тебе нужно впхнуть листбокс в меню? А возможности WPF использовать нет? Так как там всё это прекрасно реализуется... |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
Не правда. Если сделать MouseCapture, то все нормально. Он для этого и нужен, чтобы зафиксировать на время все события мыши на одном контроле. ComboBox и Menu как работает? Именно так. На выпадающем окне вызывается MouseCapture. На нем висит обработчик клика. Если координаты клика находятся за пределами (минусовые или больше размеров списка), то спокойно закрываешь свой бокс. То что на делфи сделано так же, то это не показатель для C#. Надо делать всегда по человечески и не извращаться. А вообще Rohoss прав, надо на WPF уже переходить. Недельки две позанимаешься и будешь счастлив рисуя интерфейсы. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
skhilkov |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: нет Всего: 7 |
Это, как я понимаю уже WPF? Больше я не нашел класса Mouse нигде..
Согласен, взять то же контекстное меню.... да вот прям в браузере )) Вот кликаю правой кнопкой, оно появляется, и не исчезает пока не щелкну где-нить не на нем(а мышку хоть куда могу увести).. про делфи это так, пример.. То есть, как я понял без WPF эту задачу не решить?? -------------------- Кто понял жизнь, тот не спешит. |
||||
|
|||||
-Mikle- |
|
||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
Вообще, лучше найди какой-нибудь PopupControl в инете. Думаю их много. А чтоб поиграться с Capture, вот тебе простой класик:
Используешь так:
Но лучше все таки WPF, рано или поздно все равно ПРИДЕТСЯ. -------------------- Если тебе плюют в спину, значит ты впереди... |
||||
|
|||||
skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: нет Всего: 7 |
-Mikle-,
Респект тебе и уважуха, это то, что мне было нужно! Теперь чтобы до конца усвоить пройденный материал - Content.Capture = true; в данном случае означает для контрола перехватывать события мыши(или не только)? Так? -------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
Не за что.
MSDN
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: нет Всего: 7 |
-Mikle-,
привет еще раз ) Слушай, такой вопрос - в твоем примере если из кода обработки щелчка убрать кусок
То все перестает работать (( Почему так??? -------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
мдаа... странно... не знаю я...
Вообще капче сбрасывается автоматом всегда, поэтому его состояние надо восстанавливать каждый раз. Возможно, оно сбрасывается во время первого Idle приложения и поэтому его установка после мессадж бокса дает эффект, а без него нет. Надо подумать или почитать, как с ним работать. Щас не охота пока, может завтра. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: нет Всего: 7 |
Все становится более интересно )
Ситуация вырисовывается... Значит если кликнуть на кнопку "Показать", появляется листбокс, если кликнуть мимо - исчезает, НО если в нем чекнуть какой-нибудь Item, то больше он не исчезает. Я обработал событие itemCheck вот так:
После чека вылазит окно окно с надписью "Captured!"!!! Но при этом если кликнуть мимо, обработка mouseDown листбокса не вызывается!!! Как такое бывает? Роюсь дальше.. -------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
Кажется еще есть событие LostCapture, может попробовать его задействовать? Или поискать комбобокс с открытым исходником и посмотреть как там. Здача должна решаться, по идее, очень просто и тривиально. Просто где-то что-то упущено еще в коде.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [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. |