一种方法是在KeyUp 和KeyDown 事件中跟踪它们。在下面的示例中,您可以从一个空白表单开始,然后双击该表单以创建Form_Load 事件。然后添加以下私有成员和Form_Load代码,这将设置表单的大小并在表单上放置标签:
// Fields to track keys that are pressed
private bool keyUpPressed = false;
private bool keyDownPressed = false;
private bool keyLeftPressed = false;
private bool keyRightPressed = false;
// A control to display the keypress status
private Label displayLabel = new Label();
private void Form1_Load(object sender, EventArgs e)
{
// Set the form size and hook up the KeyDown and KeyUp events
this.Size = new Size {Height = 700, Width = 700};
this.KeyDown += Form1_KeyDown;
this.KeyUp += Form1_KeyUp;
// Put our display label on the form
displayLabel.Location = new Point {X = 0, Y = 0};
displayLabel.Size = new Size {Height = 100, Width = 300};
this.Controls.Add(displayLabel);
DisplayKeyStatus();
}
现在我们可以为 KeyDown 和 KeyUp 事件添加代码,我们只需检查哪个键被按下(或未按下),必要时更新我们的私有字段,然后显示键状态:
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Left:
keyLeftPressed = false;
break;
case Keys.Up:
keyUpPressed = false;
break;
case Keys.Right:
keyRightPressed = false;
break;
case Keys.Down:
keyDownPressed = false;
break;
}
DisplayKeyStatus();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Left:
keyLeftPressed = true;
break;
case Keys.Up:
keyUpPressed = true;
break;
case Keys.Right:
keyRightPressed = true;
break;
case Keys.Down:
keyDownPressed = true;
break;
}
DisplayKeyStatus();
}
最后,使用我们正在跟踪的键的当前状态更新标签控件的方法:
private void DisplayKeyStatus()
{
var message = new StringBuilder();
message.AppendLine("Arrow keys pressed:");
if (!(keyDownPressed || keyLeftPressed || keyRightPressed || keyUpPressed))
{
message.AppendLine(" - None");
}
else
{
if (keyLeftPressed) message.AppendLine(" - Left Arrow");
if (keyUpPressed) message.AppendLine(" - Up Arrow");
if (keyRightPressed) message.AppendLine(" - Right Arrow");
if (keyDownPressed) message.AppendLine(" - Down Arrow");
}
displayLabel.Text = message.ToString();
}