【问题标题】:How to handle key press and up & key down?如何处理按键和上下键?
【发布时间】:2019-10-06 14:57:36
【问题描述】:

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

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;
    }
}

那么我需要在哪里验证两个键都被按下和释放然后执行我的操作?

【问题讨论】:

  • 什么是HookManager?您的事件处理程序适用于哪些事件?
  • 这是每次按键或释放时捕获的类
  • 为什么我们需要猜测里面有什么?您必须提供minimal reproducible example,以便您的问题得到解答。
  • 通常您会在按下键或按下键时触发操作。设置e.Handled = true; 以抑制winforms 的正常键处理。请参阅:KeyEventArgs Class。您也可以使用Keyboard.IsKeyDown(Key) 来测试密钥的状态。

标签: c# winforms key keyboard-shortcuts


【解决方案1】:

试试这个:

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

Keys 是一个具有标志属性的结构。

表示可以将几个关键代码与逻辑或运算符组合形成结果。

[Flags]
public enum Keys ...

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-08
      • 2010-12-06
      • 1970-01-01
      • 2020-06-11
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多