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

Как я могу захватить Keys.F1 независимо от сфокусированного управления формой?

Я использовал событие KeyDown, и некоторый простой код, например if (e.KeyCode == Keys.F1) для захвата F1, был нажат на форму, но если в форме есть некоторые текстовые поля или если на форме есть некоторые таблицы с Dock Fill, тогда код выше получает бесполезно и ничего не делает. Но я хочу что-то сделать, когда пользователь нажимает F1 на эту форму. так как мы фиксируем конкретное событие keydown, такое как F1 на всей форме. И я не хочу идти на маршрут, который захватывает KeyDown всех других элементов управления в форме и передает их в форму для обработки. есть ли более чистый способ сделать это?

4b9b3361

Ответ 1

Да, действительно есть. Правильный способ обработки формы ключевыми событиями независимо от элемента управления, который в настоящее время имеет фокус ввода, заключается в переопределении метода ProcessCmdKey вашего класс формы:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.F1)
    {
        MessageBox.Show("You pressed the F1 key");
        return true;    // indicate that you handled this keystroke
    }

    // Call the base class
    return base.ProcessCmdKey(ref msg, keyData);
}

Вы возвращаете true, чтобы указать, что вы обработали нажатие клавиши и не хотите, чтобы она передавалась другим элементам управления. Если вы хотите, чтобы он был передан обработчикам событий для других элементов управления, просто верните false.

И вам лучше игнорировать свойство KeyPreview. Это анахронизм из VB 6 дней и не самый предпочтительный способ сделать это в мире .NET. Дальнейшее чтение: Недостаток настройки Form.KeyPreview = true?

Ответ 2

Задайте для формы KeyPreview значение true. Это приведет к тому, что форма сначала получит сообщения о нажатиях клавиш, и если вы справитесь с этим, вы можете установить e.Handled = true, чтобы он не передавался элементам управления.

Ответ 3

Включите KeyPreview, и каждое нажатие клавиши в форме сначала направляется через обработчики ключевых событий.