我不知道这是怎么回事。
我只知道如何检测一把钥匙:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.C)
{
MessageBox.Show("C key");
}
}
答案 0 :(得分:9)
您必须跟踪keydown / keyup事件,并保留当前“关闭”的所有键的列表。键盘处理程序只能触发单个键,并且由代码来检测/跟踪哪些键是关闭的,以及这些单独的keydown事件是否足够接近以便被视为“在一起”。
答案 1 :(得分:3)
如您所见,您可以使用带有布尔值的计时器事件来检测是否按下了两个键。
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);
}
}
答案 2 :(得分:2)
在按键事件中输入一个断点,然后同时按下两个键。
检查KeyEventArgs的KeyData。它会向您显示检测两个按键同时按下所必须使用的内容。使用这样的伪代码:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("KeyData is: " + e.KeyData.Tostring());
}
就像我为换档所做的一样,并且将r压在一起
答案 3 :(得分:0)
您不需要计时器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;
}
}