.NET TIPS

Windowsフォームのロード時に任意のコントロールへフォーカスを設定するには?

デジタルアドバンテージ
2004/11/05

 Windowsアプリケーションで、フォーム上のコントロールにフォーカスを設定する場合、通常ならそのコントロールのFocusメソッドを呼び出すことで、フォーカス設定を実現できる。しかし、フォームをロードするときに(つまりLoadイベント・ハンドラで)コントロールへフォーカスを設定する場合、Focusメソッドを呼び出しても設定はできない。

 そこで本稿では、この問題を回避して(Focusメソッドを使わずに)、Loadイベント・ハンドラで任意のコントロールへフォーカスを設定する方法を紹介する。

フォーム・ロード時のコントロールへのフォーカス設定

 例えば、次の画面のようなフォームを持つWindowsアプリケーションを作成したとする。

Windowsアプリケーションのフォーム
フォームには、3つのButtonコントロールが配置されている。
  [button1]コントロール。タブ・オーダーにおける先頭の項目であるため、既定では、このコントロールにフォーカスが自動設定される。
  [button2]コントロール。
  [button3]コントロール。

 このフォーム上には、[button1]コントロール、[button2]コントロール、[button3]コントロールという3つのButtonコントロールが配置されており、タブ・オーダーもこの順番で設定されている(タブ・オーダーについては、TIPS「Windowsフォームでタブ・オーダーを設定するには?」を参照してほしい)。よって、フォームをロードすると、自動的に[button1]コントロールにフォーカスが設定されてしまう。

 例えば、次のような[button2]コントロールへフォーカスを設定するコードをLoadイベント・ハンドラに記述しても、フォームがロードされるとやはり[button1]コントロールにフォーカスが行ってしまうのだ。

private void Form1_Load(object sender, System.EventArgs e)
{
  // ロード時にフォーカスを設定する
  this.button2.Focus();
}
任意のコントロールへのフォーカス設定に失敗するサンプル・コード(C#)
[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
任意のコントロールへのフォーカス設定に失敗するサンプル・コード(VB.NET)
[button1]コントロールがタブ・オーダーの順番で最初のため、フォームがロードされると、[button2]コントロール(このコードでは、「Me.button2」オブジェクト)ではなく、[button1]コントロールにフォーカスが設定されてしまう。

 この問題を回避して、[button2]コントロールや[button3]コントロールなどの任意のコントロールにフォーカスを設定するには、フォームのActiveControlプロパティにそのコントロールを設定すればよい。具体的には次のようなコード([button2]コントロールへフォーカスを設定する例)となる。

private void Form1_Load(object sender, System.EventArgs e)
{
  // ロード時にフォーカスを設定する
  this.ActiveControl = this.button2;
}
任意のコントロールへのフォーカス設定に成功するサンプル・コード(C#)
 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  ' ロード時にフォーカスを設定する
  Me.ActiveControl = Me.button2
End Sub
任意のコントロールへのフォーカス設定に成功するサンプル・コード(VB.NET)

 このサンプル・コードを実行すると、次の画面のように、フォームのロード時に任意のコントロール(この例では「[button2]コントロール」)に対してフォーカスを正しく設定できる。

任意のコントロールにフォーカスが正しく設定されたフォーム
フォームのActiveControlプロパティに任意のコントロールを設定することで、フォームのロード時にそのコントロールへ自動的にフォーカスが設定される。
  [button2]コントロール。フォームのロード時にフォーカスが設定されている。

 なお、ActiveControlプロパティの設定は、Loadイベント・ハンドラ以外に実装することも可能だ。例えば、Loadイベント・ハンドラよりも先に実行されるフォームのコンストラクタで(もちろんコントロールのインスタンスを生成した後に)、ActiveControlプロパティの設定を実装しても同様の結果が得られる。End of Article

カテゴリ:Windowsフォーム 処理対象:コントロール
使用ライブラリ:Controlクラス(System.Windows.Forms名前空間)
使用ライブラリ:Formクラス(System.Windows.Forms名前空間)
関連TIPS:Windowsフォームでタブ・オーダーを設定するには?
 
この記事と関連性の高い別の.NET TIPS
[Silverlight 2]ページ表示時にテキストボックスにフォーカスを設定するには?
[ASP.NET]Webフォーム上のフォーカスを制御するには?
Windowsフォームでタブ・オーダーを設定するには?
コントロールに対するキー入力をフォームで処理するには?
Windowsフォームでグループ化されたコントロールのタブ・オーダーを設定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH