フォーカス

Q1
フォーカスがTabIndex順に移動しない
[内容]
TabIndexを設定しているが、Formを分けていると、TabIndex順でフォーカスが移動しない


A1
[原因]
プロパティの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集 トップへ