我想在按下特定键盘键以使用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");
}
}
...
}
我希望当我按下键盘上的一个键时,屏幕上会出现一个带有箭头图像的图像框,并且车辆应该移动了,但不会发生。
答案 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;
}