Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何判断contextmenu项是用鼠标单击的还是由热键触发的?_C#_Winforms_Hotkeys - Fatal编程技术网

C# 如何判断contextmenu项是用鼠标单击的还是由热键触发的?

C# 如何判断contextmenu项是用鼠标单击的还是由热键触发的?,c#,winforms,hotkeys,C#,Winforms,Hotkeys,我有一个带有上下文菜单的DataGridView。其中一个菜单项是Copy(使用Ctrl+C热键)。我要做的就是获取当前鼠标位置以复制用户右键单击的单元格,或者获取当前选定的单元格(如果用户使用热键)。在这两种情况下,菜单单击事件都会被触发。我如何判断它是来自热键还是上下文菜单?据我所知,您可以钩住所有鼠标和键盘事件来检测输入源 你应该看看这篇CodeProject文章 : 全局钩子监视与调用线程位于同一桌面上的所有线程的消息。特定于线程的钩子只监视单个线程的消息。全局钩子过程可以在与调用线程位

我有一个带有上下文菜单的
DataGridView
。其中一个菜单项是Copy(使用Ctrl+C热键)。我要做的就是获取当前鼠标位置以复制用户右键单击的单元格,或者获取当前选定的单元格(如果用户使用热键)。在这两种情况下,
菜单单击事件都会被触发。我如何判断它是来自热键还是上下文菜单?

据我所知,您可以
钩住
所有
鼠标
键盘
事件来检测输入源

你应该看看这篇CodeProject文章

:

全局钩子监视与调用线程位于同一桌面上的所有线程的消息。特定于线程的钩子只监视单个线程的消息。全局钩子过程可以在与调用线程位于同一桌面上的任何应用程序的上下文中调用,因此该过程必须位于单独的DLL模块中。特定于线程的钩子过程仅在关联线程的上下文中调用


在单元格上单击鼠标右键不选择该单元格吗?如果没有,我会尝试让它工作,因为复制未选择的内容可能会让用户感到困惑。请看一看。不,单元格不是通过右键单击选择的,而是稍后几行代码选择的,它是!简单的解决方案总是最好的。谢谢大家的帮助。我可以投票赞成发表评论吗?