Как я могу узнать, был ли элемент контекстного меню щелкнут мышью или запущен горячей клавишей?

У меня есть DataGridView с контекстным меню. Один пункт меню — «Копировать» (с помощью горячей клавиши Ctrl + C). Все, что я хочу сделать, это либо получить текущее местоположение мыши, чтобы скопировать ячейку, которую пользователь щелкнул правой кнопкой мыши, либо получить текущую выбранную ячейку, если они использовали горячую клавишу . В обоих случаях запускается событие menu_Click. Как узнать, была ли это горячая клавиша или контекстное меню?


person Terry    schedule 30.10.2012    source источник
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#

справочник MSDN:

Глобальный обработчик отслеживает сообщения для всех потоков на том же рабочем столе, что и вызывающий поток. Крючок для конкретного потока отслеживает сообщения только для отдельного потока. Глобальную процедуру ловушки можно вызвать в контексте любого приложения на том же рабочем столе, что и вызывающий поток, поэтому процедура должна находиться в отдельном модуле DLL. Процедура ловушки для конкретного потока вызывается только в контексте связанного с ним потока.

person Furqan Safdar    schedule 30.10.2012