繁体   English   中英

检测何时同时按下两个键

[英]Detect when two keys are pressed at the same time

我不知道该怎么做。

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

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

您必须跟踪keydown / keyup事件,并保留当前“按下”的所有键的列表。 键盘处理程序只能在单个键上触发,这取决于您的代码来检测/跟踪哪个键被按下,以及这些单个键按下事件是否彼此接近以至于可以一起算作“一起”。

如您所见,您可以将计时器事件与布尔值一起使用以检测是否按下了两个键。

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

在击键事件中设置一个断点,然后同时按下两个键。
检查KeyEventArgs的KeyData。 它会向您显示检测两个按键同时按下所必须使用的内容。 使用一些伪代码,如下所示:

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

就像我为换班所做的一样,

e.KeyData = R |转移

您不需要计时器XD

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

        if (keyleft && keyup)
        {
            Console.Beep(234, 589);
        }
    }


    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Up)
        {
            keyup = false;
        }
        else if (e.KeyCode == Keys.Left)
        {
            keyleft = false;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM