可能是重复问题:
C# Winforms带标签和值的ComboBox
如何在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属性。我认为这是一个bug。代码应该如下:
this.options_filterby.DisplayMember = "Key";
this.options_filterby.ValueMember = "Value";
this.options_filterby.DataSource = new BindingSource(filterItems, null);
Destroy
、SlingShot
和Cthulhu
这些东西会被检索出来?你的问题不够清晰,基础是什么? - John Woo