TabIndexについて
Visual Basic , Visual C#の開発で利用される、フォームで使える小技を紹介します。
画面などの記事の内容はVisual Studio 2017 Community(Visual Basic Windowsフォームアプリケーション(.NET Framework))ですが、他のバージョンも基本的には同じです。また、Excel VBAのフォームやAccessのフォームでも同様です。
TabIndexの活用方法
下の画面のように、フォーム上に入力項目やボタンなどのコントロール(部品)が複数ある場合、連続で入力したいと思います。
入力のたびにマウスで次の項目を選択するのは効率が悪いので、できればキーボード上の操作で次の項目へ移動させたいです。
キーボードを操作した時、入力を受け付ける状態になっているコントロールの状態をフォーカスと言います。
例えば、テキストボックスをクリックし、入力を受け付ける状態になることを「フォーカスを受け取る」「フォーカスを得る」と言ったり、他のコントロールへフォーカスが移動することを「フォーカスを失う」と言ったりします。
基本的に、Tabキーを押すと、次の部品へフォーカスが移動します。ただし、その順番はフォーム上の配置場所ではなく、作成時に配置した順番が設定されます。
例えば、CheckBox1→TextBox1の順番で配置した場合、CheckBox1の操作後にTabキーを押すと、TextBox1の入力エリアにカーソルが移動します。
あとでコントロールを間に追加したくなった場合はどうすればよいでしょうか。
具体的な設定
Tabを押したときの移動の順番はTabIndexプロパティで決まります。
TabIndexプロパティはフォーム上へコントロールを配置した時に自動的に設定されます。
コントロールの種類は関係なく、0から順に自動的に1ずつ加算されて設定されます。
LabelやPanelのようにフォーカスを受け取らない部品もありますが、TabIndexは設定されます。
下の表は配置したコントロールの順番とTabIndexの初期値です。
配置した順番 | コントロール | TabIndex |
---|---|---|
1 | Label1 | 0 |
2 | TextBox1 | 1 |
3 | Label2 | 2 |
4 | TextBox2 | 3 |
5 | Label3 | 4 |
6 | TextBox3 | 5 |
7 | CheckBox1 | 6 |
8 | Button1 | 7 |
9 | Button2 | 8 |
CheckBoxはフォーカスが設定されている状態でスペースキーを押すことで、マウスでクリックしたときのようにチェックをON/OFFできます。
コントロールを配置した後でもTabIndexを直接指定することで、作成者が意図する順番にフォーカスを移動させることができます。
また、TabStopプロパティをFalseにすることで、フォーカスを受け取れるコントロールでもフォーカスの移動の対象外に設定できます。Tabキーを押してもフォーカス設定の対象にならないだけで、マウスでの操作は可能です。
ちなみに、Shiftキーを押し名がらTabキーを押すと、逆順にフォーカスを移動できます。