FlexView

Q12 33

FlexListBoxの選択肢それぞれに文字列(タイトル)と値を分けて保持したい 
[内容]
FlexListBoxでもPulldownItemのように表示する文字列(Titleプロパティ)と値(Valueプロパティ)を分けて保持する事はできないか

A12 33
FlexListBoxに表示する選択肢は、ListDataプロパティへカンマ区切りの文字列で指定します。

そのためPulldownItemのように、文字列と値をそれぞれのプロパティに設定する事はできませんが、 表示する選択肢の文字列(タイトル)と値にあたるデータをCSVDocumentに保持する事で、擬似的にPulldownItemのように表示する文字列(Titleプロパティ)と値(Valueプロパティ)を分けて保持しているような動きを実装する事が可能です。

FlexListBoxの文字列を値に置き換える場合は、選択された文字列を条件としてCSVDocumentから紐づく値を検索します。

実装方法については、以下のサンプルソースをご参照ください。
サンプルソースでは、FlexListBoxクラスのSelectChangedイベントを利用して選択肢の値を取得しています。

[サンプルコード1] ※記述ポイント抜粋
  /* FlexListBoxのListDataデータ格納用 */
  CSVDocument L_data;
  
  FlexView FlexView1 {
    X = 16;
    Y = 126;
    Width = 206;
    Height = 137;
    FlexRecord FlexRecord1 {
      FlexListBox FlexListBox1 {
        Title = "FlexListBox1";
        
        Function OnSelectChanged( e ) {
          var t_row = e.row;
          
          /* ●ポイント●
           セルのリスト選択操作で発生した場合、選択された項目(value)
           を条件にCSVDocument「L_data」から対応するキーを検索する 
     */
          var csv_row= ^.^.^.L_data.find( 0, 
                      "1=="+t_row.FlexListBox1.value);
          
          /* 検索したキーをFlexLabelへ表示 */
          t_row.FlexLabel1.value = ^.^.^.L_data.getCell( csv_row , 0);
        }
      }
      FlexLabel FlexLabel1 {
        Title = "選択肢の値";
      }
    }
    this.InsertRow(5);
  }
  
  if ( !$DESIGNTIME ) {
    /* データの生成 */
    L_data << CSV{
      1,りんご
      2,みかん
      3,バナナ
      4,いちご
      5,なし
    };    
    /* L_dataの2列目のデータをFlexListBoxのListDataとして生成 */
    var i;
    var flb_val = "";
    for(i = 0; i < L_data.Rows; i++){
      /* 2列目のデータをカンマ区切りのデータに変換 */
      if(i !=0){
        flb_val += ",";
      }
      flb_val+= L_data.getCell( i , 1);
    }
    /* FlexListBoxのListDataへデータをセット */
    FlexView1.FlexRecord1.FlexListBox1.ListData = flb_val;
  }

実際の挙動については、CRSファイル形式のサンプル
   「FlexListBoxの選択肢それぞれに文字列(タイトル)と値を分けて保持したい(Flx_033.zip)」
をご確認ください。

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