0

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

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

    InitializeComponent();
}

有人告诉我,把它放在我的主要形式中是解决这个问题的方法。到目前为止,我尝试的是提供一个名称字符串,列表框将使用该名称字符串来命名用户将选择的对象,而其他两个属性(gold.Property = "Soft"; 和 gold.Metal = true; 旨在在列表框中选择项目时进入附近的文本框)。我真的不知道该怎么做,所以任何形式的帮助都将不胜感激。在基础上,只要知道如何让列表框找到我为它制作的对象然后列出它,那就太好了。

另外,是的,这是一个任务。所以我所概述的事情需要以这种方式完成......任务本身还有更多内容,但我被困在这里。

4

2 回答 2

0

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

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

txtName.Text = elements[listbox.SelectedIndex].Name;
txtProperty.Text = elements[listbox.SelectedIndex].Property;
于 2013-05-13T03:17:16.053 回答
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;
    }
}
于 2013-05-13T03:17:22.323 回答