【问题标题】:Detect when two keys are pressed at the same time检测同时按下两个键的时间
【发布时间】:2012-01-22 02:38:05
【问题描述】:

我不知道该怎么做。

我只知道如何检测一个键:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.C)
    {
        MessageBox.Show("C key");
    }
}

【问题讨论】:

  • 在按键按下时设置一个布尔值,然后在按键按下时将其恢复,如果它仍然设置为 true,则表示按键尚未解除。

标签: c# .net key


【解决方案1】:

您必须跟踪 keydown/keyup 事件,并保留当前“关闭”的所有键的列表。键盘处理程序只能在单个按键上触发,并且由您的代码来检测/跟踪哪些按键已按下,以及这些单独的按键按下事件是否彼此足够接近以被视为“一起”。

【讨论】:

    【解决方案2】:

    如您所见,您可以使用带有布尔值的计时器事件来检测是否按下了两个键:

    bool keyup = false;
    bool keyleft = false;
    
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Up)
        {
            keyup = true;
        }
        else if (e.KeyCode == Keys.Left)
        {
            keyleft = true;
        }
    }
    
    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Up)
        {
            keyup = false;
        }
        else if (e.KeyCode == Keys.Left)
        {
            keyleft = false;
        }
    }
    
    private void Form1_Load(object sender, EventArgs e)
    {
        timer1.Start();
    }
    
    private void timer1_Tick(object sender, EventArgs e)
    {
        if (keyleft && keyup)
        {
            Console.Beep(234, 589);
        }
    }
    

    【讨论】:

      【解决方案3】:

      在按键事件中设置一个断点,然后同时按下两个键。
      检查 KeyEventArgs 的 KeyData。它将向您展示您必须使用什么来检测同时按下的两个键。使用一些像这样的虚拟代码:

      private void Form1_KeyDown(object sender, KeyEventArgs e)
      {
          MessageBox.Show("KeyData is: " + e.KeyData.Tostring());
      }
      

      就像我对 shift 和 r 一起做的那样

      【讨论】:

        【解决方案4】:

        使用这个:

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
          string keysPressed = keyData.ToString();
          // your code goes here
        }
        

        这就是我使用 Up + Shift 得到的结果:“Up, Shift”

        【讨论】:

        • 您的答案与其他答案和明确接受的答案有何不同?你的回答有什么贡献?
        • 其他答案需要多个步骤并跟踪多个项目。该解决方案需要一个步骤来检测何时同时按下两个键。更简单,更高效。
        猜你喜欢
        • 1970-01-01
        • 2019-05-21
        • 1970-01-01
        • 2017-02-16
        • 2016-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多