Подтвердить что ты не робот

Как отключить навигацию по WinForm со стрелками на С#?

Мне нужно отключить изменение фокуса со стрелками по форме. Есть ли простой способ, как это сделать?

Спасибо

4b9b3361

Ответ 1

Что-то по строкам:

    private void Form1_Load(object sender, EventArgs e)
    {
        foreach (Control control in this.Controls)
        {
            control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown);
        }
    }

    void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
        {
            e.IsInputKey = true;
        }
    }

Ответ 2

Я закончил с приведенным ниже кодом, который устанавливает функцию КАЖДОМУ управление по форме:

(код основан на значении от andynormancx)



private void Form1_Load(object sender, EventArgs e)
{
    SetFeatureToAllControls(this.Controls);    
}

private void SetFeatureToAllControls(Control.ControlCollection cc)
{
    if (cc != null)
    {
        foreach (Control control in cc)
        {
            control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown);
            SetFeatureToAllControls(control.Controls);
        }
    }
}

void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
    {
        e.IsInputKey = true;
    }
}

Ответ 3

Вы должны установить KeyPreview значение true в форме. Обработайте событие KeyDown/KeyUp/KeyPress и установите для e.Handled в обработчике событий значение true для ключей, которые вы хотите игнорировать.

Ответ 4

Я попробовал этот aproach, где форма обрабатывает событие предварительного просмотра один раз. Он генерирует меньше кода, чем другие.

Просто добавьте этот метод в событие PreviewKeyDown вашей формы и установите для свойства KeyPreview значение true.

private void form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Up:
        case Keys.Down:
        case Keys.Left:
        case Keys.Right:
            e.IsInputKey = true;
            break;
        default:
            break;
    }
}