ListBox的名称和值(路径)

时间:2018-06-21 10:39:12

标签: c# winforms listbox

作为C#中的新秀,我正在寻找一种简单的方法来添加10个名称,每个名称具有不同的值(在本例中为路径)。我进行了搜索,我认为这无法使用C#Windows窗体完成,但我必须更改为WPF?

一定是这样的

listBox1.Items.add(new ListBoxItem("Computer 1", "C:\001"));
listBox1.Items.add(new ListBoxItem("Computer 2", "C:\002"));

但是Windows窗体不支持ListBoxItem吗?

2 个答案:

答案 0 :(得分:0)

您可以将任何C#对象添加到列表框Items集合,然后设置ValueMemberDisplayMember属性,以告诉列表框对象中的哪些成员代表该值以及要显示哪些。 / p>

答案 1 :(得分:0)

Windows窗体当然支持它!

您有两个选择:

使用匿名对象:

listBox1.Items.Add(new { Name = "Computer 1", Path = "C:\\001" });
listBox1.Items.Add(new { Name = "Computer 2", Path = "C:\\002" });

哪个显示很难看。

或者通过声明自己的课程:

public class MyListObject
{
    public string Name { get; set; }
    public string Path { get; set; }

    public MyListObject(string name, string path)
    {
        Path = path;
        Name = name;
    }
    // to nicely display it in List Box
    public override string ToString()
    {
        return Name + " " + Path;
    }
}

然后像这样使用它:

listBox1.Items.Add(new MyListObject("Computer 1", "C:\\001"));
listBox1.Items.Add(new MyListObject("Computer 2", "C:\\002"));

继续第二种方法,考虑到@MattWhitfield的回答,将此代码添加到您的应用中以查看其工作方式:

// display Names of objects, this way you don't need to override ToString() method in your class
listBox1.DisplayMember = "Name";

listBox1.Items.Add(new MyListObject("Computer 1", "C:\\001"));
listBox1.Items.Add(new MyListObject("Computer 2", "C:\\002"));

// select first item just for example
listBox1.SelectedIndex = 0;
MessageBox.Show((listBox1.SelectedItem as MyListObject).Path);