Вам нужно переопределить ProcessCmdKey
метод для вашей формы. Это единственный способ получать уведомления о ключевых событиях, которые происходят, когда дочерние элементы управления имеют фокус клавиатуры.
Пример кода:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
// look for the expected key
if (keyData == Keys.A)
{
// take some action
MessageBox.Show("The A key was pressed");
// eat the message to prevent it from being passed on
return true;
// (alternatively, return FALSE to allow the key event to be passed on)
}
// call the base class to handle other key events
return base.ProcessCmdKey(ref msg, keyData);
}
Что касается того, почему this.Focus()
не работает, это потому, что форма сама по себе не может иметь фокус. Конкретный элемент управления должен иметь фокус, поэтому, когда вы устанавливаете фокус на форму, он фактически устанавливает фокус на первый элемент управления, который может принимать фокус с самым низким значением TabIndex
. В этом случае это ваша кнопка.