带有文本和值的C#组合框

带有文本和值的C#组合框,c#,winforms,combobox,C#,Winforms,Combobox,可能重复: 如何在组合框中存储显示值和实际值 即,组合框显示: 毁灭世界 弹弓 传唤克图鲁 但检索到的值是: dw 党卫军 sc 我希望能够以类似以下方式检索所选项目的值: string selectedValue = combobox1.SelectedValue 更新代码以回应以下问题: 这会在我更改组合框的选定项的前几次返回字典,但最终会根据需要返回字符串 更新:已修复(由于问题已关闭,无法添加为解决方案) 针对上述问题,修复方法是在数据源之前设置DisplayMember和V

可能重复:

如何在组合框中存储显示值和实际值

即,组合框显示:

  • 毁灭世界
  • 弹弓
  • 传唤克图鲁
但检索到的值是:

  • dw
  • 党卫军
  • sc
我希望能够以类似以下方式检索所选项目的值:

string selectedValue = combobox1.SelectedValue
更新代码以回应以下问题: 这会在我更改组合框的选定项的前几次返回字典,但最终会根据需要返回字符串

更新:已修复(由于问题已关闭,无法添加为解决方案) 针对上述问题,修复方法是在数据源之前设置DisplayMember和ValueMember属性。我想这是一只虫子。 守则应改为:

this.options_filterby.DisplayMember = "Key";
this.options_filterby.ValueMember = "Value";
this.options_filterby.DataSource = new BindingSource(filterItems, null);

ComboBox.Items集合存储object类型的值。因此,它可以存储任何类型的你想要的。它从对象的ToString()方法生成显示值。要获得真实值,只需将对象强制转换为类的类型。

您可以使用
DisplayMember
ValueMember
来确定组合框将显示什么,以及从
SelectedValue
返回什么。设置
DataSource
属性时,组合框将使用
DisplayMember
描述的属性向用户呈现字符串


像这样的

public class Item {
  string Name { get; set; }
  string Value { get; set; }
}

ComboBox box = new ComboBox();
box.DisplayMember = "Name";
box.ValueMember = "Value";
box.DataSource = new [] { new Item() { "Test", "test" } };
如果未设置
ValueMember
则返回实际项目,如果未设置
DisplayMember
,则将使用items
ToString()
方法将字符串呈现给用户


我不确定这是否会起作用,或者它是否会改变你所拥有的,但你至少可以试试:) 问题是,我不确定BindingSource在获取字典作为其数据源时会做什么。我想它将其视为一个
IEnumerable
,因此您的代码应该可以工作,但事实并非如此,所以这可能会

BindingSource source = new BindingSource();
source.DataSource = typeof(KeyValuePair<string, string>);
foreach (KeyValuePair<string, string> pair in filterItems) {
    source.Add(pair);
}
options_filterby = source;
BindingSource=newbindingsource();
source.DataSource=typeof(KeyValuePair);
foreach(filterItems中的KeyValuePair对){
来源。添加(对);
}
选项_filterby=源;

WinForms、WPF、Silverlight或ASP.NET?您能发布代码示例吗?Visual Studio.NET Forms链接中的字典答案是我需要的,谢谢。尽管这标记为重复,但我更喜欢您问题中的修复。谢谢。我现在使用的答案(与你的答案类似)是做一些奇怪的事情。ComboBox在正确的项目中显示良好,但在SelectedIndexChanged事件中的前3次使用box.SelectedValue时,它会返回一个dictionary对象,最后只返回dictionary的值部分。有什么想法吗?@CJxD:SelectedValue不能先返回字典,然后再返回值。你能澄清一下你那句话的意思吗?另外,您是否可以提供一些信息(也许可以编辑您的问题)以包括如何设置数据源集合?基本上,它会在几秒钟后自行修复。设置box.ValueMember或其他东西是否有延迟?能否发布用于填充组合框的代码,以及SelectedIndexChanged处理程序调用的代码?@Patrick请参阅问题的其余部分,我找到了解决问题的方法=]
public class Item {
  string Name { get; set; }
  string Value { get; set; }
}

ComboBox box = new ComboBox();
box.DisplayMember = "Name";
box.ValueMember = "Value";
box.DataSource = new [] { new Item() { "Test", "test" } };
BindingSource source = new BindingSource();
source.DataSource = typeof(KeyValuePair<string, string>);
foreach (KeyValuePair<string, string> pair in filterItems) {
    source.Add(pair);
}
options_filterby = source;