[解決済み] フォームが KeyDown イベントに応答しない
質問
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()
の呼び出しも機能します)。
というわけで、私はここでかなり迷っています。この 1 つのプロジェクトのすべてのフォームが KeyDown イベントを受け取るのを妨げているのは何でしょうか?
どのように解決すればよいのでしょうか。
フォームのKeyPreviewプロパティはtrueに設定されていますか?
Form.KeyPreviewプロパティ
フォーカスを持つコントロールにイベントが渡される前に、フォームがキーイベントを受信するかどうかを示す値を取得または設定します。 イベントがフォーカスを持つコントロールに渡される前に、フォームがキーイベントを受け取るかどうかを示す値を取得または設定します。
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み] なぜList<T>を継承しないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?