我正在尝试在winform中创建一个列表框,以使用声明的对象列表作为内容源。选择一个对象应该在附近的文本框中列出其属性,该文本框从该对象的属性中读取。列表的对象如下所示:
public Form1()
{
Element gold = new Element();
gold.Property = "Soft";
gold.Metal = true;
gold.Name = "Gold";
InitializeComponent();
}
有人告诉我,把它放在我的主要形式是这样的。我到目前为止尝试的是给出一个名称字符串,列表框将用于命名用户将选择的对象,以及另外两个属性(gold.Property =“Soft”;和gold.Metal = true;意味着当在列表框中选择项目时,进入附近的文本框)。我真的不知道该怎么做,所以对此有任何帮助都会受到赞赏。在基地,只知道如何让列表框找到我为它制作的对象,然后列出它,就会很棒。
此外,是的,这是一项任务。所以我概述的事情需要以这种方式完成......作业本身还有更多,但我被困在哪里就是在这里。
答案 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;
}
}