Как отключить навигацию по WinForm со стрелками в C #? - PullRequest
13 голосов
/ 23 августа 2009

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

Спасибо

Ответы [ 4 ]

16 голосов
/ 23 августа 2009

Что-то вроде:

    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;
        }
    }
4 голосов
/ 23 августа 2009

В итоге я получил код, который устанавливает функцию КАЖДЫЙ элемент управления в форме:

(Код основан на коде от 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;
    }
}
1 голос
/ 23 августа 2009

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

0 голосов
/ 31 января 2012

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

Просто добавьте этот метод к событию 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...