【问题标题】:How can I tell if the contextmenu item was clicked with the mouse or fired by a hotkey?如何判断上下文菜单项是用鼠标单击还是由热键触发?
【发布时间】:2012-10-20 03:09:37
【问题描述】:

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

【问题讨论】:

  • 右键单击单元格不会选择该单元格吗?如果没有,我会尝试让它工作,因为复制未选择的内容可能会使用户感到困惑。
  • 不,单元格不是右键选择的,而是几行代码后就可以了!简单的解决方案总是最好的。感谢大家的帮助。我可以投票给评论吗?

标签: c# winforms hotkeys


【解决方案1】:

据我所知,您可以通过Hook 所有MouseKeyboard 事件来检测输入源。

你应该看看这篇 CodeProject 文章,Processing Global Mouse and Keyboard Hooks in C#

MSDN Reference:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多