C# Windows Горячая клавиша приложений для форм - событие KeyDown не работает - PullRequest
0 голосов
/ 12 июля 2020

Я читал много вопросов о создании горячих клавиш для Windows приложений Forms и пробовал код, многие люди говорили, что он работает, но для меня почему-то нет.

Код:

void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.S)   
        {
          timer1.Stop();
            e.SuppressKeyPress = true; 
        }
    }

1 Ответ

1 голос
/ 12 июля 2020

Если вы хотите создать глобальный менеджер горячих клавиш, чтобы ваша форма была доступна для всех элементов управления в этой форме, вам необходимо переопределить метод Form.ProcessCmdKey(), который перехватывает все клавиши для всех элементов управления, вместо использования события нажатия клавиши формы, которое работает только тогда, когда фон сфокусирован, и это может произойти только тогда, когда ActiveControl равно null:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  switch ( keyData )
  {
    case Keys.Control | Keys.S:
      timer1.Stop();
      return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}

Таким образом, вы можете поймать любую комбинацию клавиш, которая вам нужна, и вернуть истину в случае обработки.

...