.NET TIPS

Windowsフォームでグループ化されたコントロールのタブ・オーダーを設定するには?

デジタルアドバンテージ
2004/09/03

 「TIPS:Windowsフォームでタブ・オーダーを設定するには?」では、[TAB]キーや[SHIFT]+[TAB]キーにより、Windowsフォーム上のコントロール間をフォーカス移動する順序(以降、タブ・オーダー)を指定する方法を紹介した。しかし、次の画面のように、Windowsフォーム上にGroupBoxコントロールやPanelコントロールがあると、その方法では正しく設定できない場合がある。

タブ・オーダーを正しく設定できないケース
Windowsフォーム上にGroupBoxコントロールやPanelコントロールがあると、コントロールのタブ・オーダーを正しく指定できない場合がある。この画面の例では、GroupBoxコントロール[登録者]が「0」、Labelコントロール[名前]が「1」、TextBoxコントロール「TextBox1」が「0.0」となっている。正しいタブ・オーダーはGroupBoxコントロール[登録者]が「0」、Labelコントロール[名前]が「0.0」、TextBoxコントロール「TextBox1」が「0.1」であるが、「TIPS:Windowsフォームでタブ・オーダーを設定するには?」で紹介した方法のとおり順番にコントロールをクリックしても、この正しいタブ・オーダーとはならない。なお、GroupBoxコントロールやPanelコントロールの中の各コントロールはグループ化され、1つ下の階層に位置付けられるため、GroupBoxコントロールが「0」なら、その中にあるコントロールは「0.0」「0.1」「0.2」……のようになり、GroupBoxコントロールが「1」なら、その中にあるコントロールは「1.0」「1.1」「1.2」……のようになる。

 これは、GroupBoxコントロールやPanelコントロールが、その中にある各コントロールをグループ化するためである。グループ化されたコントロール群は1つ下の階層に置かれ、「1」「2」でなく、「1.1」「1.2」のように、「.(ドット)」で区切られた後の数字によって順番が付けられることになる。

 <GroupBoxコントロールやPanelコントロールのタブ・オーダー>.<グループ化されたコントロール群の間でのタブ・オーダー>

 また、グループ化されたコントロール群をさらにグループ化すると(例えばGroupBoxコントロールの中にさらにGroupBoxコントロールを追加するような場合)、「1.1.2」のように、「.」で区切られた数字がさらに追加されることになる。

 本稿では、このようなグループ化されたコントロール群のタブ・オーダーを設定する方法を紹介する。

グループ化されたコントロール群のタブ・オーダーを設定する方法

 上の図では、GroupBoxコントロール[登録者]が「0」なので、その中にあるグループ化されたLabelコントロール[名前]は「0.0」や「0.1」のように1階層下に作成される、と述べた。しかし実際には、Labelコントロール[名前]のタブ・オーダーは「1」となっている。この理由は、このLabelコントロールを追加する際に、GroupBoxコントロール上に正しく追加しなかったため、グループ化されたコントロール群の中に入っていないからだ。

 よって、グループ化されたコントロール群のタブ・オーダーを設定するには、このLabelコントロールをGroupBoxコントロール上に追加し直せばよいわけである。具体的には、次の手順を実行すればよい。

Labelコントロール[名前]をクリップボードに切り取る([Ctrl]+[X]キー)。
GroupBoxコントロール[登録者]をクリックして選択する。
クリップボードから先ほどのLabelコントロール[名前]をGroupBoxコントロール[登録者]の上に貼り付ける([Ctrl]+[V]キー)。このとき、単に貼り付けただけではコントロールの位置がずれてしまうので、注意してほしい。

LabelコントロールをGroupBoxコントロール上に追加し直す方法
グループ化されたコントロールのタブ・オーダーを設定するには、この画面例の手順で、グループ化されたコントロールをGroupBoxコントロールやPanelコントロール上に追加し直せばよい。

 以上の作業で、GroupBoxコントロール[登録者]の中にLabelコントロール[名前]が追加され、グループ化される。この後は「TIPS:Windowsフォームでタブ・オーダーを設定するには?」と同じように、順番に各コントロールをクリックすることでタブ・インデックスを設定するだけだ。

グループ化されたコントロールでのタブ・オーダーの設定
正しくグループ化されたコントロールでは適切なタブ・オーダーを設定できる。この画面の例では、GroupBoxコントロール[登録者]が「0」、Labelコントロール[名前]が「0.0」、TextBoxコントロール「TextBox1」が「0.1」のように正しいタブ・オーダーとなっている。

 なお、上のIDE画面のタブ・オーダーの表記と、実際のコードに記述される各コントロールのTabIndexプロパティの値は、異なるので注意してほしい。Visual Studio .NETのIDEのWindowsデザイナ上のタブ・オーダーでは、<GroupBoxコントロールやPanelコントロールのタブ・オーダー>.<グループ化されたコントロール群の間でのタブ・オーダー>という形式で表記されているが、実際のコードのTabIndexプロパティの値は、<グループ化されたコントロール群の間でのタブ・オーダー>という形式の数値になっている。

 実際のコードでは、GroupBoxコントロールやPanelコントロールのControls.Addメソッドにより、LabelコントロールやTextBoxコントロールなどの各コントロールがGroupBoxコントロールやPanelコントロールに対して追加される。これにより、各コントロールがグループ化されるわけである。

 つまり上の画面例の実際のコードでは、GroupBoxコントロール[登録者]のControls.Addメソッドにより、Labelコントロール[名前]とTextBoxコントロール「TextBox1」などの各コントロールが、GroupBoxコントロール[登録者]に対して追加されて、グループ化されている。さらに、Labelコントロール[名前]のTabIndexプロパティには「0」が設定されて、TextBoxコントロール「TextBox1」のTabIndexプロパティには「1」が設定されている。この2つのコントロールのタブ・オーダーをIDE画面のWindowsデザイナ上で表示すると、Labelコントロール[名前]は「0.0」となり、TextBoxコントロール「TextBox1」は「0.1」となる。End of Article

カテゴリ:Windowsフォーム 処理対象:キーボード
使用ライブラリ:GroupBoxコントロール
使用ライブラリ:Panelコントロール
関連TIPS:Windowsフォームでタブ・オーダーを設定するには?
 
この記事と関連性の高い別の.NET TIPS
Windowsフォームでタブ・オーダーを設定するには?
Windowsフォーム上のすべてのコントロールを列挙するには?
Windowsフォームのロード時に任意のコントロールへフォーカスを設定するには?
PictureBoxコントロール上に文字を表示するには?
WindowsアプリケーションをWindows XPスタイルの外観にするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間