NOTE!

Q 19
親子関係のあるオブジェクトでの選択位置参照の注意点(単一選択オブジェクト)

A 19
PulldownListやOptionButtonなど単一選択オブジェクトにおいて、子オブジェクトで発生した
イベントで選択された項目を参照する場合、イベントハンドラの引数として渡されるEventオブジェクトのFromプロパティを参照してください。親オブジェクトのValue値は内部処理と描画処理の関係で異なる値を示している場合があります。また同様の理由から、イベントが発生した項目以外の選択状態も参照しないようにしてください。

EventオブジェクトのFromプロパティにはイベントが発生したオブジェクトのリファレンスが格納されていますので、選択された項目の項目番号(添え字)は、From.indexで参照可能です。

単一選択オブジェクトには以下のオブジェクトがあります。
  PulldownList
  OptionButton
  Spread
  TreeView


[サンプルコード]

・PulldownListオブジェクトの例

Form Form1 {
 X = 0;
 Y = 0;
 Width = 304;
 Height = 228;
 PulldownList PulldownList1 {
    X = 44;
    Y = 22;
    Width = 157;
    Height = 161;
    PulldownItem PulldownItem1[0] {
        Function OnTouch( e ) {
            /* OnTouch イベントハンドラ */
            Form1.Label1.value = e.from.Title;  /* タイトル */
            Form1.Label2.value = e.from.Value;  /* 値 */
            Form1.Label3.value = e.from.index;  /* 添え字 */

            /* ×誤ったコーディング
              var pList = Form1.PulldownList1;
              Form1.Label4.Value = pList.PulldownItem1[pList.Value].Value;
              親のValue値をインデックスとして、子の値を取得している。
            */
        }
    }
 }
 Label Label1 {
    X = 46;
    Y = 57;
    Width = 115;
    Height = 24;
 }
 Label Label2 {
    X = 46;
    Y = 89;
    Width = 115;
    Height = 24;
 }
 Label Label3 {
    X = 46;
    Y = 122;
    Width = 115;
    Height = 24;
 }
 if( !$DESIGNTIME ){
    Form1.PulldownList1.PulldownItem1 << csv(.title, .value){
        "選択肢1","1"
        "選択肢2","2"
        "選択肢3","3"
        "選択肢4","4"
        "選択肢5","5"
        "選択肢6","6"
        "選択肢7","7"
    };
 }
}

・OptionButtonオブジェクトの例

Form Form1 {
    X = 0;
    Y = 0;
    Width = 400;
    Height = 300;
    OptionButton OptionButton1 {
        X = 10;
        Y = 10;
        Width = 100;
        Height = 55;
        OptionItem OptionItem1[2] {
            Height = 25;
            
            Function OnTouch( e ) {
                if( e.From.index == 0 ){
                    ^.^.TextBox1.Visible = $TRUE;
                } else {
                    ^.^.TextBox1.Visible = $FALSE;
                }
                /* 誤ったコーディング 
                   if( OptionButton1.OptionItem1[0].Selected == $TRUE ){
                       ^.^.TextBox1.Visible = $TRUE;
                   } else {
                       ^.^.TextBox1.Visible = $FALSE;
                   }
                */
            }
        }
    }
    TextBox TextBox1 {
        X = 10;
        Y = 75;
        Width = 100;
        Height = 20;
    }
    if ( !$DESIGNTIME ) {
        OptionButton1.OptionItem1 << CSV ( .title, .value ){
            表示, 1
            非表示,0
        };
    }
}


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