Отключение обработки нажатия клавиш стрелок C#

Есть форма, в которой содержится несколько кнопок. И я добавил обработку нажатия клавиш стрелок на клавиатуре, но вместо моих действий в окне просто выбираются другие кнопки (При нажатии на любые другие мой код работает корректно, но мне необходимы именно стрелки. Можно ли как то отключить эти стандартные функции, чтобы они не мешали выполнению моей части кода?

Пример моей части кода:

private void Preview_KeyDown(object sender, KeyEventArgs e)
        {
            else if (e.KeyCode == Keys.Left)
                SerialPort.Write("LEFT1\n");
            else if (e.KeyCode == Keys.Right)
                SerialPort.Write("RIGHT1\n");
            else if (e.KeyCode == Keys.Up)
                SerialPort.Write("UP1\n");
            else if (e.KeyCode == Keys.Down)
                SerialPort.Write("DOWN1\n");
        }

Ответы (1 шт):

Автор решения: aepot

Надо научиться находить и читать документацию.

Включить перехват клавиш формой в конструкторе

public Preview()
{
    InitializeComponent();
    KeyPreview = true; // это значение так же можно выставить в дизайнере формы
}

Далее для формы в дизайнере задать обработчик события KeyDown и написать такой код

private void Preview_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Left:
        case Keys.Right:
        case Keys.Up:
        case Keys.Down:
            SerialPort.Write(e.KeyCode.ToString().ToUpper() + "1\n");
            e.SuppressKeyPress = true;
            break;
    }
}

Выяснилось, что стрелки по умолчанию не вызывают KeyDown, это можно исправить в дополнительном обработчике PreviewKeyDown

private void Preview_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Left:
        case Keys.Right:
        case Keys.Up:
        case Keys.Down:
            e.IsInputKey = true;
            break;
    }
}
→ Ссылка