我是C#的新手,正在现有的应用程序中做一些工作。我有一个DirectX视口(viewport),其中包含要使用箭头键定位的组件。

目前,我正在重写ProcessCmdKey并捕获箭头输入并发送OnKeyPress事件。这可行,但是我希望能够使用修饰符( ALT + CTRL + SHIFT )。按住修饰符并按箭头后,不会触发我正在听的事件。

有人对我应该去哪里有任何想法或建议吗?

最佳答案

在覆盖的ProcessCmdKey中,如何确定已按下哪个键?

keyData(第二个参数)的值将根据所按下的键和任何修改键而变化,因此,例如,按向左箭头将返回代码37,向左移动将返回65573,向左按Ctrl键返回131109,向左按alt键262181。

您可以提取并使用适当的枚举值通过与运算来提取修饰符和按键:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    bool shiftPressed = (keyData & Keys.Shift) != 0;
    Keys unmodifiedKey = (keyData & Keys.KeyCode);

    // rest of code goes here
}

08-26 16:44