Как получать события KeyDown в winforms - PullRequest
1 голос
/ 29 мая 2019

Я хочу получать KeyDown события, когда нажата определенная клавиша на клавиатуре для управления автомобилем на базе Arduino с помощью приложения winforms. Транспортное средство должно двигаться, когда я нажимаю определенные кнопки на клавиатуре, такие как 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 Ответ

1 голос
/ 29 мая 2019

Вам необходимо установить для свойства KeyPreview формы значение true.Это можно сделать с помощью конструктора или с помощью кода:

this.KeyPreview = true;

Объяснение: KeyPreview указывает, будет ли форма получать ключевые события до того, как событие будет передано в элемент управления, имеющий фокус ( source *)1007 *).

Примечание: Если вы нажмете клавишу клавиатуры, когда элемент управления имеет фокус (например, TextBox), нажатие клавиши будет отправлено в форму (если KeyPreview установлен в true) и для элемента управления.Если вы хотите, чтобы элемент управления не получал нажатие клавиши, вы можете установить для e.SuppressKeyPress значение true в событии KeyDown:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    e.SuppressKeyPress = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...