Windowsフォームのロード時に任意のコントロールへフォーカスを設定するには?:.NET TIPS
Windowsアプリケーションで、Loadイベント・ハンドラによってフォーム上のコントロールにフォーカスを設定する場合、Focusメソッドは使えない。その代わりにはActiveControlプロパティを活用すればよい。C#とVB.NETでの使い方を解説する。
Windowsアプリケーションで、フォーム上のコントロールにフォーカスを設定する場合、通常ならそのコントロールのFocusメソッドを呼び出すことで、フォーカス設定を実現できる。しかし、フォームをロードするときに(つまりLoadイベント・ハンドラで)コントロールへフォーカスを設定する場合、Focusメソッドを呼び出しても設定はできない。
そこで本稿では、この問題を回避して(Focusメソッドを使わずに)、Loadイベント・ハンドラで任意のコントロールへフォーカスを設定する方法を紹介する。
フォーム・ロード時のコントロールへのフォーカス設定
例えば、次の画面のようなフォームを持つWindowsアプリケーションを作成したとする。
Windowsアプリケーションのフォーム
フォームには、3つのButtonコントロールが配置されている。
(1)[button1]コントロール。タブ・オーダーにおける先頭の項目であるため、既定では、このコントロールにフォーカスが自動設定される。
(2)[button2]コントロール。
(3)[button3]コントロール。
このフォーム上には、[button1]コントロール、[button2]コントロール、[button3]コントロールという3つのButtonコントロールが配置されており、タブ・オーダーもこの順番で設定されている(タブ・オーダーについては、TIPS「Windowsフォームでタブ・オーダーを設定するには?」を参照してほしい)。よって、フォームをロードすると、自動的に[button1]コントロールにフォーカスが設定されてしまう。
例えば、次のような[button2]コントロールへフォーカスを設定するコードをLoadイベント・ハンドラに記述しても、フォームがロードされるとやはり[button1]コントロールにフォーカスが行ってしまうのだ。
private void Form1_Load(object sender, System.EventArgs e)
{
// ロード時にフォーカスを設定する
this.button2.Focus();
}
[button1]コントロールがタブ・オーダーの順番で最初のため、フォームがロードされると、[button2]コントロール(このコードでは、「this.button2」オブジェクト)ではなく、[button1]コントロールにフォーカスが設定されてしまう。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ロード時にフォーカスを設定する
Me.button2.Focus()
End Sub
[button1]コントロールがタブ・オーダーの順番で最初のため、フォームがロードされると、[button2]コントロール(このコードでは、「Me.button2」オブジェクト)ではなく、[button1]コントロールにフォーカスが設定されてしまう。
この問題を回避して、[button2]コントロールや[button3]コントロールなどの任意のコントロールにフォーカスを設定するには、フォームのActiveControlプロパティにそのコントロールを設定すればよい。具体的には次のようなコード([button2]コントロールへフォーカスを設定する例)となる。
private void Form1_Load(object sender, System.EventArgs e)
{
// ロード時にフォーカスを設定する
this.ActiveControl = this.button2;
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ロード時にフォーカスを設定する
Me.ActiveControl = Me.button2
End Sub
このサンプル・コードを実行すると、次の画面のように、フォームのロード時に任意のコントロール(この例では「[button2]コントロール」)に対してフォーカスを正しく設定できる。
任意のコントロールにフォーカスが正しく設定されたフォーム
フォームのActiveControlプロパティに任意のコントロールを設定することで、フォームのロード時にそのコントロールへ自動的にフォーカスが設定される。
(1)[button2]コントロール。フォームのロード時にフォーカスが設定されている。
なお、ActiveControlプロパティの設定は、Loadイベント・ハンドラ以外に実装することも可能だ。例えば、Loadイベント・ハンドラよりも先に実行されるフォームのコンストラクタで(もちろんコントロールのインスタンスを生成した後に)、ActiveControlプロパティの設定を実装しても同様の結果が得られる。
カテゴリ:Windowsフォーム 処理対象:コントロール
使用ライブラリ:Controlクラス(System.Windows.Forms名前空間)
使用ライブラリ:Formクラス(System.Windows.Forms名前空間)
関連TIPS:Windowsフォームでタブ・オーダーを設定するには?
Copyright© Digital Advantage Corp. All Rights Reserved.