检测何时同时按下两个键
我不知道怎么做。
我只知道如何检测一个键:
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而做的一样
您不需要计时器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; } }