Visual Studio C #, как обнаружить нажатие клавиши Enter, когда кнопка имеет фокус - PullRequest
0 голосов
/ 05 октября 2018

У меня есть следующий код, который обнаруживает нажатие клавиши ввода и работает нормально.однако, если вы нажмете кнопку в форме, то она перестанет работать, т. е. нажатая кнопка теперь имеет фокус, и нажатие клавиши ввода переходит прямо к этой кнопке.

private void Form1_Load(object sender, EventArgs e)
{
    KeyPreview = true;
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        MessageBox.Show("Enter pressed");
    }
}

Я попытался выполнить следующее безуспешно;

  1. Использование форм PreviewKeyEvent вместо keyUp
  2. Использование форм KeyDown вместо KeyUp
  3. Создание кнопки, выбранной в качестве 'AcceptButton' формы

Мой обходной путь - создать кнопку, которую форма «выбирает» при загрузке, которая будет нажиматься при вводе.Затем включите таймер, чтобы сохранить фокус на этой кнопке в случае, если выбраны другие.Это кажется немного плохим решением.

Любые идеи будут оценены.Похоже, я упускаю что-то очевидное.

Фил

1 Ответ

0 голосов

Переопределить ProcessCmdKey:

protected override bool ProcessCmdKey( ref Message msg, Keys keyData ) {
    if( keyData == Keys.Enter ) {
        // Enter is pressed

        return true; //return true if you want to suppress the key.
    }

    return base.ProcessCmdKey( ref msg, keyData );
}
...