Некоторое время я работал над своим проектом 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?