0

我的 Windows 窗体应用程序中有组合框,我希望它具有特定选项的值。

现在我只能选择一个选项,当我选择它时 - 我可以通过

combobox.text 

我的目标是在组合框中列出文件名,并在值中包含指向它们的路径。

示例:文本is=“option1”它包含的值是=“value1”,怎么办?

我看到了一些关于它的主题,但它们大约有 2 年的历史,也许有些改变,因为这些解决方案不是那么友好:]

更新

我对您的解决方案有一个问题,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 相同) - 为什么会这样?

4

2 回答 2

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,它所做的一切都是改变同一个 objectcategoryInsert的值path,而name不是创建一个新的值。因此,您最终会在每次迭代中将相同的对象添加到combo3data. 您需要的是每次Foo在自身内部创建一个新对象,即:移动循环内部。就像是:foreachFoo categoryInsert = new Foo();foreach

foreach (string s in categories)
{
    Foo categoryInsert = new Foo();
    categoryInsert.path = s;
    categoryInsert.name = s;
    combo3data.Add(categoryInsert);
}
于 2012-07-16T11:29:43.170 回答
1

用于comboBox.Text设置或获取与此组合框关联的文本。for ValuescomboBox.ValueMember用于 ListControl 中项目的实际值,或者您也可以将值存储在comboBox.Tag

于 2012-07-16T11:30:05.167 回答