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