Przez jakiś czas pracowałem nad projektem Windows Forms i zdecydowałem się poeksperymentować ze skrótami klawiaturowymi. Po lekturze doszedłem do wniosku, że muszę po prostu napisać procedurę obsługi zdarzeń i powiązać ją ze zdarzeniem KeyDown formularza:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.Alt && e.KeyCode == Keys.O)
{
MessageBox.Show("Ctrl+Alt+O: magic!");
}
}
Zrobiłem to starym dobrym sposobem na otwarcie panelu Właściwości projektanta programu Visual Studio, a następnie dwukrotne kliknięcie zdarzenia KeyDown w moim formularzu, aby wygenerować Form1_KeyDown
procedurę obsługi zdarzeń. Ale podczas testowania mojej aplikacji formularz w ogóle nie reaguje na skrót klawiaturowy Ctrl+ Alt+ O. Projektant programu Visual Studio wygenerował jednak kod, aby powiązać procedurę obsługi zdarzeń z formularzem:
private void InitializeComponent()
{
// ...
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
// ...
}
Więc spróbowałem dodać Console.WriteLine()
wywołanie do programu obsługi, aby sprawdzić, czy w ogóle jest wywoływany, ale też bez powodzenia.
Próbowałem również ustawić punkt przerwania w wywołaniu powiązania zdarzenia (pokazanym powyżej) i stwierdziłem, że program osiąga ten punkt przerwania w porządku. Ale żadne punkty przerwania, które ustawiłem w samej definicji metody, nigdy nie są osiągane.
Aby upewnić się, że kilka pierwszych kroków wykonałem poprawnie, spróbowałem je powtórzyć z:
Nowa forma w tym samym rozwiązaniu.
Ten sam problem: formularz nie odpowiada, gdy naciskam skrót klawiaturowy Ctrl+ Alt+, Oa debugger nie wchodzi nawet do modułu obsługi zdarzeń.Próbowałem tego ponownie i działa.Zupełnie nowe rozwiązanie WinForms.
Działa idealnie: pojawia się okno dialogowe wiadomości (Console.WriteLine()
połączenie również działa).
Więc jestem tu zagubiony. Co uniemożliwia wszystkim formularzom w tym jednym projekcie otrzymywanie zdarzeń KeyDown?