FocusObjectクラスのSetFocusメソッドとMoveFocusメソッドは以下のケースでは動作
しない仕様となっております。
(MoveFocusメソッドはver4.1より追加されました。)
■SetFocusメソッドが動作しないケース
■オブジェクトがフォーカスを受け取れない状態になっている
オブジェクトが非アクティブになっているなど、フォーカスを受け取れない状態にある
場合は、SetFocusメソッドが無効になります。
SetFocusメソッドの処理を記述する際には、オブジェクトがフォーカスを受け取れる
状態にあるか事前に考察しておく必要があります。
Form Form1 {
Button Button1 {
Title = "非アクティブのオブジェクトにSetFocus";
Function OnTouch( e ) {
^.TextBox1.SetFocus();
}
}
TextBox TextBox1 {
Active = $FALSE;
}
}
■複数オブジェクトに一度にSetFocusメソッドを実施している
同一画面の複数オブジェクトに一度にSetFocusした場合、最後に実行したSetFocus
メソッドのみが有効です。
Form Form1 {
Button Button2 {
Title = "複数オブジェクトに一度にSetFocus";
Function OnTouch( e ) {
^.TextBox2.SetFocus();
^.TextBox3.SetFocus();
^.TextBox4.SetFocus();
}
}
TextBox TextBox2;
TextBox TextBox3;
TextBox TextBox4;
}
■MoveFocusメソッドが動作しないケース
■MoveFocusを呼び出したオブジェクト以外にキーボードフォーカスが設定されている場合
フォーカスの当たっていないオブジェクトからMoveFocusを実行することはできません。
Form Form1 {
Button Button1 {
TabIndex = 1;
}
TextBox TextBox1 {
TabIndex = 2;
}
DateEdit DateEdit1 {
TabIndex = 3;
Value = "2000/12/12";
}
if ( !$DESIGNTIME ) {
Button1.SetFocus();
/* フォーカスの当たっていないオブジェクト(TextBox1)からMoveFocus
しようとしても無効です */
TextBox1.MoveFocus();
}
}
■選択されていないOptionItemなど、本来フォーカスを受け取らない状態にあるオブジェクトに
MoveFocusしようとした場合
Form Form1 {
Button Button1 {
Title = "(1)";
TabIndex = 1;
AutoTabFocus = $FALSE;
Function OnFocusOperation( e ) {
MoveFocus();
}
}
OptionButton OptionButton1 {
TabIndex = 2;
OptionItem OptionItem1[3] {
AutoTabFocus = $FALSE;
Function OnFocusOperation( e ) {
MoveFocus();
}
this[0].Title = "(2)";
this[1].Title = "(3)";
this[2].Title = "(4)";
this[0].TabIndex = 3;
this[1].TabIndex = 4;
this[2].TabIndex = 5;
}
Value = 0;
}
TextBox TextBox1 {
TabIndex = 6;
Value = "(5)";
Function OnFocusOperation( e ) {
MoveFocus();
}
}
}
■ダイアログに隠れている非アクティブのWindow内のオブジェクトの場合
ダイアログが呼び出されている状態での呼出元のフォームなど、非アクティブWindow内の
オブジェクトでMoveFocusすることはできません。
ダイアログを閉じるなどの方法で、MoveFocusを行いたいオブジェクトのWindowが
アクティブになるよう処理を記述してください。
Form Form1 {
Button Button1 {
Title = "Dialog呼出";
TabIndex = 1;
Function OnTouch( e ) {
^.Get("Dialog.crs");
}
}
TextBox TextBox1 {
TabIndex = 2;
}
TextBox TextBox2 {
TabIndex = 3;
}
TextBox TextBox3 {
TabIndex = 4;
}
}
Dialog Dialog1 {
Form Form1 {
Button Button1 {
Title = "ボタン";
Function OnTouch( e ) {
/* 呼び出し元のフォームが非アクティブなため、
テキストボックスにフォーカスは移動しません */
^.^.^.Button1.MoveFocus();
}
}
}
}
|