フォーカス
1
フォーカスがTabIndex順に移動しない
[内容]
TabIndexを設定しているが、Formを分けていると、TabIndex順でフォーカスが移動しない
1
[原因]
プロパティのTabIndexには以下の制限があります。
1.順番は同一Form内に限定される。
2.配列には定義出来ない。
[解決方法]
1.順番は同一Form内に限定される。
Formを超えてタブキー制御を行ないたい場合は、Form自体のTabIndexを利用して制御
することが出来ます。しかし、以下のような交互に移動するような制御は出来ません。
・FormAのオブジェクト → FormBのオブジェクト → FormAのオブジェクト
→FormBのオブジェクト
2.配列には定義出来ない。
TabIndexでの配列に対する制御は出来ません。
※なお、タブのフォーカス制御は以下の優先で決定されます。
(1) TabIndex値
(2) Y座標の値
(3) X座標の値
(4) オブジェクト生成順
※
1 および 2 においても、任意のオブジェクトにフォーカスを移動したい場合は、SetFocusメソッドで行なうことが可能ですが、Aオブジェクトの次にBオブジェクトにフォーカスを移す制御をAに対するLostFocusイベントハンドラでSetFocusを実行していますと、「更新」ボタンのようなButtonがあった場合など、別のオブジェクトの操作でLostFocusイベントが発生し、タブキーでのLostFocusイベント以外の意図しないフォーカス移動も行なわれてしまいますのでご注意ください。
Biz-Tips > フォーカス >
フォーカス移動のタイミングで行う入力チェックがループする
も合わせてご参照ください。
[サンプルコード]
上記の画面はForm_Aの中(子供)にForm_Bがあり、Form_AにはTextBoxとOpttionButton、Form_BにはTextBoxとButtonが作成されています。
(1)→(2)(2)’→(3)→(4)の順番で作成し、TabIndex値設定がなければ、この順番でタブキーでのフォーカス移動は行なわれます。
(注:(2)(2)’のOpttionButtonを少し上にあげてみると、最初にフォーカスがあたるのは、このOpttionButtonになります。これは解決方法で説明いたしましたY座標が優先されるためです。)
フォーカス順を (1)→(3)→(4)→(2) としたい場合は、以下のようにTabIndexを指定することで可能です。
(1)のTextBox TabIndex = 1;
Form_B TabIndex = 2;
このように設定しますと、優先順により(1)のTextBoxの次はForm_BとなりForm_B内にフォーカスが移ります。Form_B内を抜けたときに、Form_Aに戻り、(2)にフォーカスが移動します。
CRSファイル形式のサンプルを
「
フォーカス移動順序定義サンプル (Focus.zip)
」
よりご利用いただけます。
管理番号: Fcs_001
Biz-Collections Bizの宝箱 トップへ
Biz/Browser・Biz/Designer TIPS集 トップへ