私はしばらくの間Windowsフォームプロジェクトに取り組んできましたが、キーボードショートカットを試すことにしました。少し読んだ後、イベントハンドラーを作成して、フォームの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()
呼び出しも機能します)。
だから私はここでかなり迷っています。この1つのプロジェクトのすべてのフォームがKeyDownイベントを受信するのを妨げているのは何ですか?