##動画でも解説しました。
コンボボックスの特徴
今回はコンボボックスから、選択した値を取り出す方法について解説します。
コンボボックスには、アイテムの検索機能や複数選択が可能などといった、 ドロップダウンにはない特徴があります。
使用するリスト
このようなリストを用意しました。 このリストのuser_mail列とmemo列の値を使用していきます。
コンボボックスの設定
通常はコンボボックスを配置した際には、 プロパティのディスプレイタブから データソースを選択し、 フィールドの編集から表示する列を選択します。
アイテムの検索で使用する列を選択します。
コンボボックスの選択した値をコレクションに入れて見てみます
//コンボボックスの選択したアイテムをコレクション化
ClearCollect(col_cb,Self.SelectedItems);
こちらはコンボボックスのOnChangeプロパティです。
選択肢を変更した際に、選択アイテムをコレクションに格納しています。
選択したアイテムを格納したコレクション、 col_cbを見てみましょう。
このように選択したアイテムがテーブル形式で格納されています。
.Selectedで1つだけ値を取り出す
それでは、コンボボックスから値を取り出してみます。
まずはテキストラベルのTextプロパティをComboBox2.Selected.user_mail
にすると
取り出せるのは選択した最後の1件だけとなり、 レコード形式ですので Selected. に続けて列名を入れると、その列の値を取り出すことができます。
目的が1件だけの取得であれば、複数選択をオフにして、
アイテム検索付きのドロップダウンとして使用しても良いかもしれません。
複数の値を取り出す?
それではこちらのリストボックスを見てみます。 Itemsプロパティに
ComboBox2.SelectedItemsを指定し、Valueで列名を指定しています。
一見成功していますが、コンボボックスで選択しているのは、 複数の単一レコードなので、
選択したレコードの値1つずつしか出てきません。
コンボボックスで選択した値に合致する全てのレコードの値を
リストから取得するには、やり方は様々ですが工夫が必要となります。
//リストボックス用のコレクションを準備
Clear(col_list);
//col_cbを繰り返し処理
ForAll(col_cb,
With({mail:user_mail},
//コレクションにフィルターをかけたmemo列の値を追加
Collect(col_list,Filter(test_list1,user_mail=mail).memo
)
)
);
Reset(ListBox1)
こちらは先ほどもお見せした、コンボボックスのOnChangeプロパティです。 後半部分でリストボックス用のコレクションを作成しています。
Clear関数で一度コレクションを初期化して、
ForAll関数でコンボボックスのレコードの数分繰り返し処理を行います。
With関数でメールアドレスを取得して、 user_mail列でメールアドレスが 合致するレコードのmemo列の値をコレクションに追加しています。
これで選択したメールアドレスに合致する 全てのレコードのmemo列の値がリストボックスに表示されますが
重複する値を削除するため、 リストボックスのItemsプロパティで Distinct 関数を使用してコレクションから一意の値を取り出しています。
//コレクションからmemo列の一意の値を取り出す
Distinct(col_list,memo)
いかがだったでしょうか?
今回はコンボボックスから、選択した値を取り出す方法について解説しました。