オブジェクト

Q1
子オブジェクトから親オブジェクトのIsArrayプロパティを参照する場合の注意  
A1
子オブジェクトから親オブジェクトのIsArrayプロパティを参照する場合、下記のようなスクリプトの記述を行うと配列オブジェクトであるはずの親オブジェクトが「IsArray=False(配列でない)」と判断されてしまいます。

[ 例 ]

<構造>
Form1
 └ Form2[2]
    └ TextBox1
<サンプルソース>
※ポイント抜粋

Form Form1 {
   ・・・・・
  /* Form配列 */
  Form Form2[2] {
    X = 23;
    Y = 54;
    Width = 231;
    Height = 125;

    TextBox TextBox1 {
      X = 12;
      Y = 39;
      Width = 200;
      Height = 50;
      Value = "TextBox1";
      
      Function OnGetFocus( e ){
        Form1.A(this);
      }
    }
  }

  /* IsArray判定 */
  Function A(obj){
    /* ★ポイント★ */
    if( obj.^.IsArray) { 
      /* 処理 */
    }else{
      /* 処理 */
    } 
  }
}
<画面>


上記のサンプルでは、「Form2」配下に配置されている、「TextBox1」のGetFocusイベントにてIsArrayプロパティの判定処理を呼出しています。この時引数に指定したオブジェクト(TextBox1)を起点に「obj.^.IsArray」と記述していますが、この結果はFalse(配列でない)と判断されます。

これは、「TextBox1」から参照した親オブジェクトが「Form2[0]」または「Form2[1]」といった「Form2」配列の1要素であり、「Form2[0]」や「Form2[1]」自体が配列ではないためです。

  解釈 : obj.^.IsArray == Form2[0].IsArray
  結果 : False(配列でない)

「TextBox1」(子オブジェクト)から、「Form2」(親オブジェクト)が配列かどうかを正しく判断するためには、以下のように記述してください。
 
  /* IsArray判定 */
  Function A(obj){
    /* ★ポイント★ */
    if( obj.^.^.FindChild(obj.^.name).IsArray ) { 
      /* 処理 */
    }else{
      /* 処理 */
    } 
  }

  解釈 : obj.^.^.FindChild(obj.^.name).IsArray
    == Form1.FindChild("Form2").IsArray
    == Form1.Form2.IsArray
  結果 : True(配列である)

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