如何使用winform listbox在C#中列出声明的对象?

时间:2013-05-13 02:12:05

标签: c# class visual-studio-2012 listbox

我正在尝试在winform中创建一个列表框,以使用声明的对象列表作为内容源。选择一个对象应该在附近的文本框中列出其属性,该文本框从该对象的属性中读取。列表的对象如下所示:

public Form1()
{
    Element gold = new Element();
    gold.Property = "Soft";
    gold.Metal = true;
    gold.Name = "Gold";

    InitializeComponent();
}

有人告诉我,把它放在我的主要形式是这样的。我到目前为止尝试的是给出一个名称字符串,列表框将用于命名用户将选择的对象,以及另外两个属性(gold.Property =“Soft”;和gold.Metal = true;意味着当在列表框中选择项目时,进入附近的文本框)。我真的不知道该怎么做,所以对此有任何帮助都会受到赞赏。在基地,只知道如何让列表框找到我为它制作的对象,然后列出它,就会很棒。

此外,是的,这是一项任务。所以我概述的事情需要以这种方式完成......作业本身还有更多,但我被困在哪里就是在这里。

2 个答案:

答案 0 :(得分:0)

使用List<Element> elements存储您的元素, 然后对每个元素进行循环并将其名称添加到列表框中。

添加事件处理程序到列表框中选择的索引已更改, 这段代码应该这样做。 (请记住检查所选索引是否为-1)

txtName.Text = elements[listbox.SelectedIndex].Name;
txtProperty.Text = elements[listbox.SelectedIndex].Property;

答案 1 :(得分:0)

在不了解您的更多要求的情况下,我只能猜测该作业希望您直接将Element()的实例添加到ListBox中。您可以在Element()类中重写ToString()以控制ListBox将如何显示这些实例。返回Name()属性将非常好用。连接ListBox的SelectedIndexChanged()事件并将SelectedItem()转换回Element(),以便您可以提取其他两个值。这可能类似于:

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
        listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);

        Element element = new Element();
        element.Property = "Soft";
        element.Metal = true;
        element.Name = "Gold";
        listBox1.Items.Add(element);

        element = new Element();
        element.Property = "Indestructible";
        element.Metal = true;
        element.Name = "Adamantium";
        listBox1.Items.Add(element);

        element = new Element();
        element.Property = "Liquid";
        element.Metal = true;
        element.Name = "Mercury";
        listBox1.Items.Add(element);

        element = new Element();
        element.Property = "Fluffy";
        element.Metal = false;
        element.Name = "Kitten";
        listBox1.Items.Add(element);
    }

    void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex != -1)
        {
            Element element = (Element)listBox1.SelectedItem;
            label1.Text = "Property: " + element.Property;
            label2.Text = "Metal: " + element.Metal.ToString();
        }
    }
}

public class Element
{
    public string Property;
    public bool Metal;
    public string Name;

    public override string ToString()
    {
        return Name;
    }
}