フォーカス

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オブジェクトに対するOnLostFocusイベントハンドラでSetFocusを実行していますと、「更新」ボタンのようなButtonがあった場合など、別のオブジェクトの操作でLostFocusイベントが発生し、タブキーでのLostFocusイベント以外の意図しないフォーカス移動も行なわれてしまいますのでご注意ください。

Biz/Browser Mobile・Biz/Browser for PDA TIPS集 >
   フォーカス > フォーカス移動のタイミングで行う入力チェックがループする
も合わせてご参照ください。


[サンプルコード]


・以下の画面はForm_Aの中(子供)にForm_Bがあり、Form_AにはTextBoxとOptionButton、Form_BにはTextBoxとButtonが作成されています。(1)→(2)(2)’→(3)→(4)の順番で作成し、TabIndex値設定がなければ、この順番でタブキーでのフォーカス移動は行なわれます。

(注:(2)(2)’のOptionButtonを少し上にあげてみると、最初にフォーカスがあたるのは、このOptionButtonになります。これは解決方法で説明いたしました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)にフォーカスが移動します。

フォーカス

管理番号: FcsM_001
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser Mobile・Biz/Designer Mobile TIPS集 トップへ