のにっき

【VS】KeyDownイベントが発生しない場合の対策

Windowsフォームアプリの設定の話です。
ショートカットキーの機能を組む時に知っておくととても便利です。

本当にイベントが発生していないのか?

KeyDownイベントにブレークを貼って
イベント処理が通っているかどうか確認しましょう。
イベント内の処理のせいで、イベントは正常に発生しているのに
処理が動いていない場合は処理を直せば解決です。

フォームに対してイベントを設定しているか?

KeyDownイベントを設定している対象を確認しましょう。
フォームに対してではなく、
ボタン等のコントロールに対してイベント設定を行っていると
そのコントロールにフォーカスがあっている状態でしかイベントが発生しません。
必ずフォームに対してイベント設定を行いましょう。

KeyPreviewプロパティをTrueにする

フォームのプロパティ内の「KeyPreview」の項目をTrueに変更しましょう。
デフォルト設定ではフォーム以外のコントロールにフォーカスが当たった状態だと
フォームに設定したKey系イベントが発生しないです。
(フォーカスに当たったコントロールのKey系イベントが発生します)
そこで、KeyPreviewをTrueに変更することで、
フォーム内のどこにフォーカスが当たっていても、
フォームのKey系イベントが発生するようになります。
※順番は、
「フォームのKey系イベント」→「フォーカス当たってるコントロールのイベント」
という順番になります

以上です。
KeyPreviewプロパティは知らないと
全部のコントロールにKey系イベントを設定するという
パワープレイに走ってしまうので是非、ご活用ください。