PulldownList

Q2
PulldownListの選択で処理を行いたい

A2

[解決方法]
PulldownListやOptionButtonなどの親子関係のあるオブジェクトにおいて、選択位置を参照する場合、親オブジェクトのValueプロパティで参照が可能です。
PulldownListオブジェクト(親オブジェクト)のValueプロパティに選択した項目の項目番号
(添え字)が格納されます。

ただし、このValueプロパティはPulldownListオブジェクト(親オブジェクト)の値のため、PulldownItemオブジェクト(子オブジェクト)のイベントハンドラからの参照は行わないようにしてください。

PulldownItemオブジェクト(子オブジェクト)で発生したイベントにて、選択された項目を参照する場合は、イベントハンドラの引数として渡されるEventオブジェクトのFromプロパティを参照してください。
また、PulldownItemのイベントハンドラ内で選択状態を参照する場合も、イベントハンドラの引数として渡されるEventオブジェクトのFromプロパティを基に参照してください。

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

親子関係のあるオブジェクトにおいて、子オブジェクトのイベントハンドラで親オブジェクトのValue値を参照する場合は同様の注意が必要です。


[サンプルコード]
■PulldownItemオブジェクトのTouchイベントの例

Form Form1 {
    PulldownList PulldownList1 {
        UseChange = $FALSE;
        PulldownItem PulldownItem1[0] {

            Function OnTouch( e ) {
                var i = e.From.index;
                switch(i){
                    case 0:
                        Form1.TextBox1.Value = " 札幌が選択されました ";
                        break;
                    case 1:
                        Form1.TextBox1.Value = " 仙台が選択されました ";
                        break;
                    case 2:
                        Form1.TextBox1.Value = " 東京が選択されました ";
                        break;
                    case 3:
                        Form1.TextBox1.Value = " 京都が選択されました ";
                        break;
                    case 4:
                        Form1.TextBox1.Value = " 大阪が選択されました ";
                        break;
                }
                /* 誤ったコーディング
                var idx;
                for( idx = 0; idx < ^.PulldownItem1.length; idx++ ){
                    if( ^.PulldownItem1[idx].Selected == $TRUE ){
                      switch( idx ){
                          case 0:
                            Form1.TextBox1.Value = " 札幌が選択されました ";
                            break;
                          case 1:
                            Form1.TextBox1.Value = " 仙台が選択されました ";
                            break;
                          case 2:
                            Form1.TextBox1.Value = " 東京が選択されました ";
                            break;
                          case 3:
                            Form1.TextBox1.Value = " 京都が選択されました ";
                            break;
                          case 4:
                            Form1.TextBox1.Value = " 大阪が選択されました ";
                            break;
                      }
                    }
                }
                */
            }
        }
        PulldownItem1 << CSV ( .title, .value ){
            "札幌"
            "仙台"
            "東京"
            "京都"
            "大阪"
        };
    }
    TextBox TextBox1 {
    }
    if ( !$DESIGNTIME ) {
    }
}

■PulldownListオブジェクトのChangeイベントの例

ChangeイベントはPulldownListオブジェクトのValueプロパティが変更されたことに
より発生するイベントですのでPulldownListオブジェクトのValueプロパティの
参照が可能です。
Changeイベントを発生させるためには、PulldownListオブジェクトのUseChange
プロパティを$TRUEに設定する必要があります。

Form Form1 {
    PulldownList PulldownList1 {
        UseChange = $TRUE;
        PulldownItem PulldownItem1[0];
        PulldownItem1 << CSV ( .title, .value ){
            "札幌"
            "仙台"
            "東京"
            "京都"
            "大阪"
        };

        Function OnChange( e ) {
            var i = e.From.value;
            /* var i = value; も可 */
            switch(i){
                case 0:
                    Form1.TextBox1.Value = " 札幌が選択されました ";
                    break;
                case 1:
                    Form1.TextBox1.Value = " 仙台が選択されました ";
                    break;
                case 2:
                    Form1.TextBox1.Value = " 東京が選択されました ";
                    break;
                case 3:
                    Form1.TextBox1.Value = " 京都が選択されました ";
                    break;
                case 4:
                    Form1.TextBox1.Value = " 大阪が選択されました ";
                    break;
            }
        }
    }
    TextBox TextBox1 {
    }
    if ( !$DESIGNTIME ) {
    }
}

■PulldownListオブジェクトでPulldownItemのTouchイベントハンドラを
 記述した例
この例では、イベント発生時ではなく、イベント起動時の選択位置を報告しています Form Form1 { TextBox TextBox1 { } PulldownList PulldownList2 { PulldownItem Item2[0]; /* PullDownList へ値を設定します */ Item2 << CSV(Item2.title) { "札幌" "仙台" "東京" "京都" "大阪" }; /* PullDownList から項目が選択された場合 */ Function OnTouch( e ) { /* イベントハンドラの実行されるタイミングにより、参照した Valueの結果が異なる場合があるため、<推奨しない>記述例です */ switch(value){ case 0: Form1.TextBox1.Value = " 札幌が選択されました "; break; case 1: Form1.TextBox1.Value = " 仙台が選択されました "; break; case 2: Form1.TextBox1.Value = " 東京が選択されました "; break; case 3: Form1.TextBox1.Value = " 京都が選択されました "; break; case 4: Form1.TextBox1.Value = " 大阪が選択されました "; break; } } } }
CRSファイル形式のサンプルを
  「項目を選択したタイミングで処理を実行するサンプル(PdL_002.zip)
よりご利用いただけます。


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