У меня есть DataGridView
с контекстным меню. Один пункт меню — «Копировать» (с помощью горячей клавиши Ctrl + C). Все, что я хочу сделать, это либо получить текущее местоположение мыши, чтобы скопировать ячейку, которую пользователь щелкнул правой кнопкой мыши, либо получить текущую выбранную ячейку, если они использовали горячую клавишу . В обоих случаях запускается событие menu_Click
. Как узнать, была ли это горячая клавиша или контекстное меню?
Как я могу узнать, был ли элемент контекстного меню щелкнут мышью или запущен горячей клавишей?
comment
щелчок правой кнопкой мыши по ячейке не выбирает эту ячейку? Если нет, я бы попытался заставить это работать, так как копирование того, что не выбрано, может запутать пользователей.
- person HugoRune   schedule 30.10.2012
comment
Взгляните на RoutedEventArgs.Source Property .
- person Bob.   schedule 30.10.2012
comment
Нет, ячейка не выбирается правым щелчком мыши, но несколько строк кода позже, и это так! Простые решения всегда самые лучшие. Спасибо всем за помощь. Могу ли я проголосовать за комментарий?
- person Terry   schedule 30.10.2012
Ответы (1)
Насколько мне известно, вы можете Hook
все события Mouse
и Keyboard
определить источник ввода.
Вам следует ознакомиться с этой статьей CodeProject, Обработка глобальной мыши и Клавиатурные хуки в C#
Глобальный обработчик отслеживает сообщения для всех потоков на том же рабочем столе, что и вызывающий поток. Крючок для конкретного потока отслеживает сообщения только для отдельного потока. Глобальную процедуру ловушки можно вызвать в контексте любого приложения на том же рабочем столе, что и вызывающий поток, поэтому процедура должна находиться в отдельном модуле DLL. Процедура ловушки для конкретного потока вызывается только в контексте связанного с ним потока.
person
Furqan Safdar
schedule
30.10.2012