CJx*_*JxD 20 c# combobox winforms
可能重复:
C#Winforms Combobox标签和值
如何在ComboBox中存储显示值和实际值?
即,ComboBox显示:
但检索到的值是:
我希望能够以与此类似的方式检索所选项的值:
string selectedValue = combobox1.SelectedValue
Run Code Online (Sandbox Code Playgroud)
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";
Run Code Online (Sandbox Code Playgroud)
现在由于某种原因,虽然DisplayMembers绝对正常,但ValueMembers返回字典对象.甚至更奇怪,过了一会儿,最终ValueMembers将按预期返回字符串.
private void options_filterby_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(options_filterby.SelectedValue.ToString());
}
Run Code Online (Sandbox Code Playgroud)
这会返回前几次我更改ComboBox的选定项目的字典,但最终会根据需要返回字符串.
针对上述问题,修复方法是在DataSource 之前设置DisplayMember和ValueMember属性.我认为这是一个错误.代码应为:
this.options_filterby.DisplayMember = "Key";
this.options_filterby.ValueMember = "Value";
this.options_filterby.DataSource = new BindingSource(filterItems, null);
Run Code Online (Sandbox Code Playgroud)
Han*_*ant 10
ComboBox.Items集合存储object类型的值.所以它可以存储你想要的任何类型.它从对象的ToString()方法生成显示值.要获得真实值,只需将对象强制转换为类的类型即可.
您可以使用DisplayMember和ValueMember来确定ComboBox将显示的内容以及将从中返回的内容SelectedValue.设置DataSource属性时,ComboBox将使用描述的属性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" } };
Run Code Online (Sandbox Code Playgroud)
如果未设置ValueMember实际的Item,则返回,如果未设置DisplayMember,ToString()则将使用items 方法获取呈现给用户的字符串.
我不确定这是否会起作用,或者它是否可以改变你所拥有的,但你至少可以尝试:)事情是,我不确定BindingSource在获取字典作为其数据源时的作用.我认为它只是把它视为一个IEnumerable<KeyValuePair<>>,所以你的代码应该可以工作,但是,它没有,所以也许这会......
BindingSource source = new BindingSource();
source.DataSource = typeof(KeyValuePair<string, string>);
foreach (KeyValuePair<string, string> pair in filterItems) {
source.Add(pair);
}
options_filterby = source;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40369 次 |
| 最近记录: |