ComboBox に表示値と実際の値を格納するには、どのようにアプローチすればよいでしょうか?
つまり、ComboBox には次のように表示されます。
- デストロイワールド
- ファイアスリングショット
- クトゥルフ召喚
ただし、取得される値は次のとおりです。
- dw
- ss
- sc
次のような方法で、選択した項目の値を取得できるようにしたいと考えています。
string selectedValue = combobox1.SelectedValue
回答に応じて更新されたコード:
Dictionary<string, string> filterItems = new Dictionary<string, string>
{
{"Destroy World", "dw"},
{"Fire Slingshot", "fs"},
{"Summon Cthulu", "sc"},
};
this.options_filterby.DataSource = new BindingSource(filterItems, null);
this.options_filterby.DisplayMember = "Key";
this.options_filterby.ValueMember = "Value";
何らかの理由で、DisplayMembers はまったく問題ありませんが、ValueMembers はディクショナリ オブジェクトを返します。さらに奇妙なことに、しばらくすると、最終的に ValueMembers は期待どおりに文字列を返します。
private void options_filterby_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(options_filterby.SelectedValue.ToString());
}
これは、ComboBox の選択した項目を変更した最初の数回は辞書を返しますが、最終的には必要に応じて文字列を返します。
更新:修正済み(質問がクローズされたため、解決策として追加できません)
上記の問題に対する修正は、DataSource の前にDisplayMember および ValueMember プロパティを設定することです。これはバグだと思います。コードは次のようになります。
this.options_filterby.DisplayMember = "Key";
this.options_filterby.ValueMember = "Value";
this.options_filterby.DataSource = new BindingSource(filterItems, null);