Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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# 如何处理按键和up&;钥匙放下?_C#_Winforms_Key_Keyboard Shortcuts - Fatal编程技术网

C# 如何处理按键和up&;钥匙放下?

C# 如何处理按键和up&;钥匙放下?,c#,winforms,key,keyboard-shortcuts,C#,Winforms,Key,Keyboard Shortcuts,我有一个捕捉键盘键的类,我想捕捉一个特定的组合: 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 ==

我有一个捕捉键盘键的类,我想捕捉一个特定的组合:

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;
    }
}
那么,我需要在哪里验证这两个键是否都已按下和释放,然后再执行我的操作呢?

尝试以下操作:

if ( e.KeyData == (Keys.Alt | Keys.D1) )
Keys是具有flag属性的结构

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

[Flags]
public enum Keys ...

您不应该等待alt键被释放来执行您的操作。除非您能解释为什么需要确保在“执行某项操作”之前必须释放alt键和按下的键,否则以下代码在
KeyUp
KeyDown
事件中都应足够

if (e.Modifiers == Keys.Alt && e.KeyCode == Keys.D1)
{
    // Do Something
}

什么是钩管理器?您的事件处理程序用于哪些事件?这是一个类,用于捕获每次按键或释放为什么我们需要猜测其中的内容?你必须提供一个答案,这样你的问题才能得到回答。通常你会在按下键或向上键时触发一个动作。设置
e.Handled=true
以抑制winforms的正常密钥处理。请参阅:。您还可以使用来测试密钥的状态。