C#_セレクトボックスに自作の Value と Key を設定したい

DisplayMember ValueMember をつかうもよう。

 

経緯

セレクトボックス ( コンボボックス ) の SelectedIndex は
上から自動で採番されるので、Value に応じた値が欲しい。
Memo:コンボボックスは文字を直接入力することが出来る。

 

ex) ※同じファイルに記述した。コンボボックス設置済み。

自作型を設定し、選択したアイテムを取得する際は型変換を行っている。
デザインのコンボボックスには「アヒル・猪・ウサギ」が表示。


    class MyKeyindex
    {
        public int myKey_ { get; set; }
        public string myValue_ { get; set; }
        public MyKeyindex(int key, string value)
        {
            myKey_ = key;
            myValue_ = value;
        }
    }

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            //コンボボックス設定
            List<MyKeyindex> comboBoxMyItems = new List<MyKeyindex>();

            comboBoxMyItems.Add(new MyKeyindex(10, "アヒル"));
            comboBoxMyItems.Add(new MyKeyindex(20, "猪"));
            comboBoxMyItems.Add(new MyKeyindex(30, "ウサギ"));

            comboBox1.DisplayMember = "myValue_";
            comboBox1.ValueMember = "myKey_";
            comboBox1.DataSource = comboBoxMyItems;
            comboBox1.SelectedValue = 20; //猪が表示
        }

        // SelectedItem の myKey_ を表示
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show($"{((MyKeyindex)comboBox1.SelectedItem).myKey_}");
            // ex) 猪を選択してボタンをクリックすると 20 が表示。
        }
    }

 

DataSource
データソースを取得または設定する。
IList インターフェイスを実装するオブジェクトか、または Array 。
これを設定することで、そのコントロール ( ListBox など ) に表示するデータとして
データセットの任意の列値を割り当てることができる。

データソース
アプリで操作するデータを表わす。データベースなど。
データベースへアクセスするための情報をまとめたもの。

 

DisplayMember と ValueMember を使わない方法

上記のコードとほぼ一緒。

DisplayMemberValueMember の部分をコメントアウト

    //comboBox1.DisplayMember = "myValue_";
    //comboBox1.ValueMember = "myKey_";

 

class MyKeyindex に ToString()追記。表示用。
これがないと、「プロジェクト名.MyKeyindex」と項目に表示される。

    public override string ToString()
    {
        return myValue_;
    }

このコードだと特定の Key を指定して Selected することは出来ないかも。

 

 

こちらから。
https://www.ipentec.com/document/csharp-listbox-use-original-datasource
https://wa3.i-3-i.info/diff2list.html
ComboBox.DataSource Property (System.Windows.Forms) | Microsoft Docs
http://www.atmarkit.co.jp/fdotnet/chushin/introwinform_06/introwinform_06_01.html
https://msdn.microsoft.com/ja-jp/library/8s2t4x15.aspx
http://eternalwindows.jp/windevelop/odbc/odbc02.html
https://csharp-ref.com/form_combobox.html

以上。