如何处理按键和向上和向下键?

问题描述 投票:0回答:2

我有一个可以捕获键盘键的类,并且我想捕获特定的组合:

Alt + 1 

并且如果检测到这种组合是我的工作。

这是我尝试过的:

private bool isAltPressed;
private bool isOnePressed;
private bool bothPressed;

private void HookManager_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if (e.KeyCode == Keys.LMenu)
        isAltPressed = true;
    if (e.KeyCode == Keys.D1)
        isOnePressed = true;
    if (isAltPressed & isOnePressed)
        bothPressed = true;
}

private void HookManager_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if (bothPressed)
        // Do something...

    if (e.KeyCode == Keys.LMenu)
    {
        isAltPressed = false;
        bothPressed = false;
    }

    if (e.KeyCode == Keys.D1)
    {
        isOnePressed = false;
        bothPressed = false;
    }
}

所以我需要在哪里验证两个键都被按下并释放,然后再执行我的工作?

c# winforms key keyboard-shortcuts
2个回答
0
投票

尝试一下:

if ( e.KeyData == (Keys.Alt | Keys.D1) )

键是具有标志属性的结构。

这意味着可以将几个键代码与逻辑或运算符组合在一起以形成结果。

[Flags]
public enum Keys ...

0
投票

您不应该等待释放Alt键来执行操作。除非您能解释为什么您需要确保在“做某事”之前必须同时释放Alt键和按下的键,否则以下代码在KeyUpKeyDown事件中就足够了。

if (e.Modifiers == Keys.Alt && e.KeyCode == Keys.D1)
{
    // Do Something
}
© www.soinside.com 2019 - 2024. All rights reserved.