可能重复:
带有标签和值的 C# Winforms 组合框
一种方法如何在 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);