C# LoadイベントでFocus()しても効かないよ

ハマったのでメモ。

 

Focus()メソッドの呼び出しは、LoadイベントではなくShownイベントでないと正しく反映されない。

 

例えば、ボタンが3つあるフォームを作っていて

ボタンが3つのフォーム

 

Loadイベントで2番目のボタンのFocus()メソッドを呼び出す。

 

でもやっぱり実行してみると、フォーカスは1番目のボタンのまま。

ボタンが3つのフォーム フォーカスが最初のボタン

 
 

原因は冒頭でも書いてしまっているけど、Focus()メソッドの呼び出しがLoadイベントであるのがいけない。

Shownイベントでbutton2のFocus()メソッドを呼び出すようにすると、うまくいく。

 

20130106210737

 

見た目上は分かりにくいかもしれないが、フォーム表示時点でフォーカスが2番目のボタンに合わさるようになった。

130106-002

 
 

Loadイベントはあくまでも初期化であって表示状態でないから、表示状態の変更をしてもその後の表示操作で上書きされてしまうということが原因なのかな。

その点、Shownイベントは、既に表示されている状態(Showの過去分詞)に対しての操作だからちゃんと反映されるってことだと思う。

コメントを残す

トラックバック: http://pgnote.net/wp-trackback.php?p=1551