フォーカス

Q
Biz/Browser以外のウィンドウがアクティブになったときに発生するLostFocusイベントについて
A
Biz/Browserの画面上でTextBoxなどにフォーカスがある時に、Biz/Browser以外のアプリケーションのウィンドウが前面に表示される(アクティブになる)と、フォーカスのあったオブジェクトからLostFocusイベントが発生します。
他ウィンドウがアクティブになった場合はLostFocusイベントを発生させない、といった制御は出来ませんが、Biz/Browserの画面上でのキー・マウス操作でのLostFocusイベントか、それ以外でのLostFocusイベントか、を判断することで処理内容を分岐させるなどの制御は可能です。

以下のサンプルでは、FormクラスのGetFocusメソッドにてフォーカス移動を判断し、特定のオブジェクト(TextBox2)からのフォーカス移動の場合は、そのオブジェクトのFocusOperationイベントを発生させる処理を行っています。

[サンプルコード] ※記述ポイント抜粋
  Form Fcs_007 {
  ・・・・・
   TextBox TextBox2 {
    X = 90;
    Y = 277;
    Width = 143;
    Height = 30;
    AutoTabFocus = $FALSE;
    Number flg;
    Function OnFocusOperation( e ) {
     ^.Label5.Value = "";
     var len = length(Value,0);
     var res = "";
     for( var i = 0; i < len; i++ ) {
      var c = mid(Value, i, 1, 0);
      if(c == " " || c == " "){
       c = "";
       res += c;
       ^.Label5.Value = "スペースを除去しました";
      }else{
       res += c;
      }
     }
     Value = res;
     flg = 1;
     MoveFocus();
    }
   }
  ・・・・・
   Function OnGetFocus( e ) {
    var beforeobj = fobj[0];
    fobj[1] = beforeobj;
    fobj[0] = e.From;
    /* マウスクリックによるフォーカス遷移を判断し処理実行 */
    if(fobj[0] != fobj[1]){
     if(fobj[1] != null){
      if(fobj[1].Name == "TextBox2"){
       /* キーでの遷移の処理済じゃないかを判断 */
       if(TextBox2.flg == 1){
        TextBox2.flg = 0;
       }else{
        TextBox2.OnFocusOperation();
       }
      }
     }
    }
   }
  ・・・・・
  }

実際の挙動については、CRSファイル形式のサンプル
   「Biz/Browser以外のウィンドウがアクティブになったときに発生する
   LostFocusイベントについて(Fcs_007.zip)」

をご確認ください。
※挙動比較のため、LostFocusイベント処理も記述されています。

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