Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: ComboBox: события мыши Добавлено: 01.12.07 20:36  

Автор вопроса:  Иван | Web-сайт: www.harami.ru
Мне нужно было отловить события мыши в комбобоксе. Написал субклассинг к комбобоксу, где по событию GotFocus начинается сканирование и перехват нажатий клавиш мыши, а по LostFocus оно прекращается.
Все прекрасно работает, за единственным исключением: если кликнуть по комбобоксу правой кнопкой, когда фокус еще на другом контроле, то выползает встроенное контекстное меню, и реакции на мышь нет - видимо, потому, что событие MouseUp происходит раньше, чем GotFocus.
Научите, пожалуйста, как решить эту проблему?

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #1 Добавлено: 01.12.07 21:07
Правильно ли я понял, что сабклассинг начинается при GotFocus? Зачем? Почему не сразу при переходе в рантайм?

Ответить

Номер ответа: 2
Автор ответа:
 Иван



Вопросов: 34
Ответов: 53
 Web-сайт: www.harami.ru
 Профиль | | #2
Добавлено: 01.12.07 22:11
Сабклассинг начинается при Form_Load:
    Set MyCombo1 = New clsCombo
А при событии GotFocus запускается цикл While-СканированиеКлавишМыши-DoEvents-Wend, который продолжается, пока комбобокс не потеряет фокус. Если нажатие перехвачено, то RaiseEvent MouseDown (например).

Ответить

Номер ответа: 3
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #3 Добавлено: 01.12.07 23:09
ИМХО,
Даже безо всякого сабклассинга и даже если combo уже в фокусе при контекстном меню циклы с DoEvents замораживаются. И вообще замораживается цикл сообщений приложения. Только окно-владелец этого меню принимает еще кое-какие WM_ напрямую.
В том числе "мышиную возню".
А так как владельцем контекстного меню выступает не сам combobox, а его дочернее окно класса "EDIT", то надо сабклассировать его и в нем следить за мышью. Ну, или ставить хук.

Ответить

Номер ответа: 4
Автор ответа:
 Иван



Вопросов: 34
Ответов: 53
 Web-сайт: www.harami.ru
 Профиль | | #4
Добавлено: 02.12.07 00:19
Спасибо Вам большое, EUGY. Постараюсь "поиграть" с приложением и добиться желаемого. Век живи - век учись (хотя я уже человек солидного возраста, и учеба дается тяжеловато).
К слову: проблема с событиями мыши в комбобоксе легко решается, если "подложить" под комбобокс лейбл размером чуточку больше, и создать в субклассинге к лейблу события MouseOver/MouseOut (на основе события Label_MouseMove). Но очень уж обидно ради перехвата "мышиной возни" громоздить столько писанины.

Ответить

Номер ответа: 5
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #5 Добавлено: 02.12.07 00:41
...и создать в субклассинге к лейблу

Нет-нет,
Иван
,где-то Вы кардинально ошибаетесь.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам