[C#]Form_Load()イベントで、フォーカスをセットする方法

WinFormsを使用したプログラムで、指定したコントロールにフォーカスをセットするには、
通常ではSetFocus()メソッドを使用します。

button1.SetFocus();



ですが、FormのLoadイベントでこの方法を使用しても、セットする事ができません。

これは、.NetFrameworkのイベントループ側で以下の処理を行っているためです。

1.親画面からForm.Show()メソッド(又はShowDialog)をコールする
↓
2.子画面のOnLoad()イベントが指定されていたら、実行する
↓
3.子画面に配置されているコントロールのTabStopをチェックし、初期フォーカスをセットする
↓
4.子画面が開く



このため、上記の2.でフォーカスをセットしても後続の処理でリセットされてしまい、
思ったように動作しません。

これを防ぐには、SetFocusではなく、以下のようにActiveControlに値をセットしてあげればOKです。

private void Form1_Load(object sender, System.EventArgs e) {
  // 初期フォーカスをセット
  ActiveControl = button1;
}


関連記事

コメントを残す

メールアドレスが公開されることはありません。