オブジェクト

Q1
複数のオブジェクトのプロパティを一括で変更したい
[内容]
画面内のコントロール部品を一括で非活性するにはどうすればよいか


A1
[解決方法]
ObjectクラスのGetChildObjectsメソッドを利用して、複数オブジェクトのプロパティを一括で
変更する事が可能です。

GetChildObjectsメソッドは、指定したオブジェクトの子オブジェクトを取得するメソッドです。
このメソッドでFormオブジェクト配下の子オブジェクト一覧を取得し、
for in ループで各オブジェクトに対してクラスやプロパティの値などの条件で絞り込みます。
その中に、非活性にしたいオブジェクトが子オブジェクトの一覧に含まれていたら
対象のオブジェクトを非活性にします。

このように記述することで、Recordオブジェクト配下にオブジェクトが増えても、一括で
初期化処理を行う事が可能です。

[サンプルイメージ]
TextBoxの活性
TextBoxの非活性

[サンプルコード1]
var childArray = Form1.GetChildObjects();
for (var i in childArray) {
  /* 条件 */
  if(childArray[i] instanceOf TextBox){
     childArray[i].active = $FALSE;
  }
}

また、GetChildObjectsメソッドを利用してRecordオブジェクトの下位に配置された
オブジェクトの一括初期化を行う事も可能です。

[サンプルコード2]
Record custDB{
  Number  custCode;
  String  custName;
  String  custAddr;
}

Button set_Button {
  X = 21;
  Y = 99;
  Width = 118;
  Height = 45;
  Title = "値のセット";
  
  Function OnTouch( e ) {
    /* 値のセット */  
    ^.custDB.custCode = 1001;
    ^.custDB.custName = "AXIS SOFT";
    ^.custDB.custAddr = "東京都江東区";
   ・・・(略)
  }
}

Button clear_Button {
  X = 154;
  Y = 99;
  Width = 118;
  Height = 45;
  Title = "値の初期化";
  
  Function OnTouch( e ) {
    /*★ ポイント ★*/
    /* 値の初期化 */ 
    var childArray = ^.custDB.GetChildObjects();
    for( var i in childArray ) {
     childArray[i].Clear();
    }  
  }
}

※RecordオブジェクトにObject.Clearメソッドを実行しても、Recordオブジェクトの
  デフォルトプロパティが初期化されるだけで下位に配置されているオブジェクトの
  初期化は行われません。


上記のように記述することで、オブジェクトが増えても一括で処理を行う事が可能です。

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