Как запретить дальнейшую обработку события?

Рейтинг: 0Ответов: 1Опубликовано: 23.04.2011

В задании нужно, чтобы определенное действие происходило при нажатии Alt+[число 1-8]. Я создал форму в UI-дизайнере и обозначил там обработку события KeyDown. В результате сгенерировался такой код:

this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);

Затем я написал такой обработчик:

private int GetIndex(Keys key)
{
    switch (key)
    {
            case Keys.D1:
                return 0;
            case Keys.D2:
                return 1;
            case Keys.D3:
                return 2;
            case Keys.D4:
                return 3;
            case Keys.D5:
                return 4;
            case Keys.D6:
                return 5;
            case Keys.D7:
                return 6;
            case Keys.D8:
                return 7;
            default:
                return -1;
    }
}

private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        Keys key = e.KeyCode;
        Console.WriteLine(key + "");
        if (e.Alt)
        {
            int row = GetIndex(key);
            if (row != -1)
            {
                RevertRow(row);
                Invalidate();
            }
        }            
        e.Handled = true;
    }

Всё работает! Только после выполнения моего действия фокус каждый раз уходит в главное меню моей программы (в Винде всегда по нажатию Alt открывается меню). Вопрос: как обойти эту проблему и сделать так, чтобы пользователь мог держать Alt и нажимать цифру много раз?

(Примечание: "Обработку нажатия указанных клавиш осуществить без использования таблицы акселлераторов или других средств назначения "горячих клавиш".")

Ответы

▲ 2Принят

Замените e.Handled = true; на e.SuppressKeyPress = true; и "клавиша не дойдёт до формы"