如何在WinForms中接收KeyDown事件

时间:2019-05-29 13:29:19

标签: c# winforms

我想在按下特定键盘键以使用Winforms应用程序驾驶基于arduino的rc车辆时接收KeyDown事件。当我按下键盘上的特定按钮(例如W,A,S,D)时,车辆应该会移动,但我无法这样做,并且正在寻找一些建议。

我曾经尝试通过按下Button控件来驾驶车辆,虽然它工作正常,但是很难通过单击按钮来控制,所以我想到了使用键盘键来驾驶它,但是我无法这样做。我正在使用的代码已附加。

  private void connect_Click(object sender, EventArgs e)
  {
        comPort = new SerialPort();
        comPort.PortName = "COM3";
        comPort.BaudRate = 9600;
        comPort.DataBits = 8;
        comPort.StopBits = StopBits.One;
        comPort.Parity = Parity.None;
        comPort.Open();
        textBox1.Text = "Connected";
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode.ToString() == "W")
        {
            pictureBox1.Visible = true;
            if (!forward)
            {
                forward = true;
                comPort.WriteLine("F");

            }
        }
        else if (e.KeyCode.ToString() == "S")
        {
            pictureBox2.Visible = true;
            if (!backward)
            {
                backward = true;
                comPort.WriteLine("B");

            }
        }
        ...
    }

我希望当我按下键盘上的一个键时,屏幕上会出现一个带有箭头图像的图像框,并且车辆应该移动了,但不会发生。

1 个答案:

答案 0 :(得分:1)

您需要将表单的KeyPreview属性设置为true。您可以使用设计器或通过代码进行此操作:

this.KeyPreview = true;

说明:KeyPreview指示在事件传递到具有焦点的控件(source)之前,表单是否将接收键事件。

注意:如果您在控件获得焦点时按键盘键(例如TextBox),则按键发送到表单(如果KeyPreview为设置为true),然后。如果要阻止控件接收按键,可以在e.SuppressKeyPress事件中将KeyDown设置为true:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    e.SuppressKeyPress = true;
}