Как определить, какой элемент управления потребляет мои события клавиатуры - PullRequest
2 голосов
/ 18 июня 2009

В моем приложении .Net я продолжаю сталкиваться с проблемой конкретной формы / элемента управления, которая, как я ожидал получить событие клавиатуры, фактически не получает его. Моя отладка этого не продвинулась далеко за пределы пещерного человека, например, установив точки останова во всех моих элементах управления и увидев, кто съел событие клавиатуры, которого не должно было быть. Должен быть лучший способ - есть ли инструмент, который поможет мне отследить обработку событий клавиатуры?

Ответы [ 3 ]

0 голосов
/ 18 июня 2009

Обычно форма будет обрабатывать события нажатия клавиш. Там нет инструмента, потому что он просто отслеживает ваш след стека. Лучшей идеей было бы сделать оператор трассировки (добавить точку останова и щелчок правой кнопкой мыши, перейти к пункту «При ударе») в событии нажатия клавиш формы, а затем просмотреть информацию в формах forms.keyeventargs и отправителя.

Другие важные элементы, на которые следует обратить внимание: не символьные клавиши (в том числе страница вниз, страница вверх и т. Д.) Не вызывают событие нажатия клавиши, они только вызывают нажатие клавиши и нажатие клавиши, события нажатия клавиши «проглатываются» формой, если вы установили

e.Handled = true;

или

e.SuppressKeyPress = true;

Я также не рекомендую использовать окно конструктора / свойств для подключения ваших событий, использовать Addhandler (VB) или + = (C #), потому что в более сложных формах у вас будут сценарии с множеством элементов управления, совместно использующих обработчики событий, и динамически указание обработчиков во время выполнения.

0 голосов
/ 25 августа 2010

Если вы используете полную версию Visual Studio (не Express Edition или чего-либо еще), используйте Spy ++. Когда вы запускаете Spy ++, найдите корневое окно вашего приложения (в Spy ++ есть удобный пункт меню «Поиск»> «Найти окно»), затем щелкните правой кнопкой мыши корневое окно в древовидном представлении Windows и выберите «Сообщения». Это должно привести вас к панели сообщений, которая начнет мониторинг всех сообщений для окна. Начните печатать и проверьте WM_KEYDOWN и т. Д. Если вы все еще не видите нажатия клавиш, перейдите к параметрам обмена сообщениями и установите флажок «Окна одного и того же процесса». На этом этапе вы должны иметь возможность отслеживать все события нажатия клавиш в процессе. Щелкните правой кнопкой мыши сообщение WM_KEYDOWN (или аналогичное) и перейдите в свойства. В свойствах должен отображаться дескриптор окна, обработавшего сообщение, и нажатие на него выделит его в древовидном представлении Windows. Теперь все, что вам нужно сделать, это щелкнуть правой кнопкой мыши по выделенному окну и выбрать «Выделить», чтобы увидеть, какой элемент управления находится на вашей форме.

0 голосов
/ 18 июня 2009

Первое, что я хотел бы сделать, это проверить в окне «Свойства» (или в файле Designer), чтобы убедиться, что обработчик события действительно подключен к событию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...