我的Windows窗体应用程序中有组合框,我希望它具有特定选项的值。
现在我只能选择一个选项,当我选择它时 - 我可以通过
获得它combobox.text
我的目标是在组合框中列出文件名,并在值中包含它们的路径。
示例:Text is =“option1”,它包含的值是=“value1”,怎么做?
我看到了一些关于它的话题,但它们大约有两年了,也许有些变化,因为这些解决方案不那么友好:]
更新
我的解决方案有一个问题,Mahmoud Gamal:)
我这样做:
List<Foo> combo3data = new List<Foo>();
categories = Directory.GetDirectories(@"C:\banners\categories\");
// There are 3 different paths in categories[] array (category1, category2 and 3)
Foo categoryInsert = new Foo();
foreach (string s in categories)
{
categoryInsert.path = s;
categoryInsert.name = s;
combo3data.Add(categoryInsert);
}
comboBox3.DataSource = combo3data;
comboBox3.ValueMember = "path";
comboBox3.DisplayMember = "name";
之后我的comboBox3有3个可用选项(正确)但所有选项都相同(与选项#1相同) - 为什么?
答案 0 :(得分:3)
您正在寻找两个属性:
在您的情况下,您必须将组合框的ValueMember
属性设置为value1
,将DisplayMember
属性设置为option1
。
更新:以下是如何从某个实体Foo
的列表中填充组合框的项目的示例:
public class Foo(){
public string Id { get; set; }
public string Name { get; set; }
}
var ds = new List<Foo>(){
new Foo { Id = "1", Name = "name1" },
new Foo { Id = "2", Name = "name2" },
new Foo { Id = "3", Name = "name3" },
new Foo { Id = "4", Name = "name4" },
};
comboboxName.DataSource = ds;
comboboxName.ValueMember = "Id";
comboboxName.DisplayMember = "Name";
Update2:这是因为您每次都要添加相同的对象。在以下代码块中:
Foo categoryInsert = new Foo();
foreach (string s in categories)
{
categoryInsert.path = s;
categoryInsert.name = s;
combo3data.Add(categoryInsert);
}
每次foreach
遍历categories
,其所做的全部内容都会更改同一对象categoryInsert
的值path
和name
创造一个新的。因此,您最终会在每次迭代中添加相同的对象combo3data
。您需要的是每次在Foo
内部创建一个新的foreach
对象,即:在Foo categoryInsert = new Foo();
循环内移动foreach
。类似的东西:
foreach (string s in categories)
{
Foo categoryInsert = new Foo();
categoryInsert.path = s;
categoryInsert.name = s;
combo3data.Add(categoryInsert);
}
答案 1 :(得分:1)
使用comboBox.Text
设置或获取与此组合框关联的文本。
for Values使用comboBox.ValueMember
作为ListControl中项目的实际值
或者您也可以将值存储在comboBox.Tag