如何在WinForms应用程序中检测Ctrl + Shift +数字键盘

时间:2019-07-15 08:10:34

标签: c# winforms keypress

我希望能够允许我的应用程序的用户按Ctrl + Shift +数字小键盘的键在我正在开发的应用程序中充当导航快捷方式。令我惊讶的是,似乎无法识别这种组合键。

按Shift +键盘可以激活大多数键盘上显示的扩展功能,例如光标键(在2、4、6和8上),向下/向上翻页(在3和9上),结束/主页(在1和7上) )等。

WinForms中的各种键事件报告的结果与实际按下的光标键等完全相同。因此,我无法区分例如Shift + KeyPad4和CursorLeft。我不能只是寻找Ctrl + CursorLeft而不是Ctrl + Shift + KeyPad4,因为人们可能会使用Ctrl + CursorLeft进行文本编辑。

有什么方法可以正确检测这些移位的数字小键盘组合吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

使用一个类来跟踪按下了哪些键。 当您收到OnKeyDown事件时,将该键存储为向下,然后当您遇到OnKeyUp事件时,将该键从存储中删除。

然后在相同的OnKeyDown事件中,存储了按键之后,进行检查以查看您期望的所有三个键是否都按下。

它看起来像这样:

public void OnKeyDown(EventArgs ...) {
    _keyStore.KeyDown(eventArgs.keyPress);

    if(_keyStore.AltCtrlKeyPad4IsDown()) { //Abstract this so you can perform multiple checks.
        //Do shortcut.
    }

}

public void OnKeyUp(EventArgs ...) {
    _keyStore.KeyUp(eventArgs.keyPress);
}

请注意,这是sudo代码,不会编译。

相关问题