如何在c#中的组合框选项中添加值?

时间:2012-07-16 11:23:47

标签: c# winforms

我的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相同) - 为什么?

2 个答案:

答案 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的值pathname创造一个新的。因此,您最终会在每次迭代中添加相同的对象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