ShowDialogやShowを拡張メソッドで実装した場合、被表示FormでKeyDownイベントが発生しない
ちょっとだけ詰んだのでメモ程度に。
public void ShowDialog(IWin32Window owner, String test){
base.ShowDialog(owner);
}
こういう感じに拡張メソッドを実装しているとします。
ShowまたはShowDialogを実行する前にKeyPreview = trueを入れます。
public void ShowDialog(IWin32Window owner, String test){
this.KeyPreview = true;
base.ShowDialog(owner);
}
キーイベントがフォーカスを持つコントロールに渡される前に、フォームがそのキーイベントを受け取るかどうか、という説明の通り、
親フォームからKeyDownイベントを取得するかどうかというのを、KeyPreviewで設定しています。
デフォルトではfalseなので、コンストラクタまたは該当する拡張メソッドで実装しなければKeyEventが発生しないようになっています。
また、この方法を使用しても一部のコントロールではKeyEventが受け取られないため、別の方法で対策しなければなりません。