Я некоторое время работал над проектом Windows Forms и решил поэкспериментировать с сочетаниями клавиш. После небольшого прочтения я решил, что мне нужно просто написать обработчик события и связать его с событием KeyDown формы:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.Alt && e.KeyCode == Keys.O)
{
MessageBox.Show("Ctrl+Alt+O: magic!");
}
}
Это был хороший способ открыть панель «Свойства» дизайнера Visual Studio, а затем дважды щелкнуть по событию KeyDown моей формы, чтобы сгенерировать обработчик события Form1_KeyDown
. Но при тестировании моего приложения форма вообще не реагирует на сочетание клавиш Ctrl + Alt + O . Дизайнер Visual Studio сгенерировал код для привязки обработчика событий к форме:
private void InitializeComponent()
{
// ...
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
// ...
}
Поэтому я попытался добавить вызов Console.WriteLine()
к обработчику, чтобы проверить, вызывается ли он вообще, но и в этом не повезло.
Кроме того, я попытался установить точку останова для вызова привязки события (показанного чуть выше) и обнаружил, что программа прекрасно достигает этой точки останова. Но любые точки останова, которые я установил в самом определении метода, никогда не достигаются.
Чтобы убедиться, что я правильно делал первые несколько шагов, я попытался повторить их с:
Новая форма в том же решении.
Та же проблема: форма не отвечает, когда я нажимаю мою Ctrl + Alt + O сочетание клавиш, и отладчик даже не входит в обработчик событий. Попробовал еще раз, и он работает.
Новое решение WinForms.
Он работает отлично: появляется диалоговое окно с сообщением (также работает вызов Console.WriteLine()
).
Так что я совершенно заблудился здесь. Что мешает всем формам в этом одном проекте получать события KeyDown?