检测何时同时按下两个键

我不知道怎么做。

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

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

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

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

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

就像我为换class而做的一样

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