ListBox和对象属性

时间:2014-01-11 03:05:03

标签: c# listbox

一直在寻找一个明确的例子。 我创建了一个新对象,包括设置几个属性,将整个对象添加到listBox然后写了一个字符串来描述它们。现在我想在所选索引处的lsitBox对象中有一个项目。有许多语法似乎具有相似但不同的用法,这使得搜索变得复杂......

Pseudocode:
SpecialClass object = new SpecialClass;
object.propertyA;
Object.PropertyB;

listBox.Items.Add(object);

//listBox.SelectedItem[get propertyA]? What would retrieve propertyA or propertyB from the //list after putting the object in the list?

....我试图使用这个变量设置,就像这样......

 MRecipeForm parent = new MRecipeForm();
            ListViewItem item = new ListViewItem();
            item.Tag = parent.recipeListB.Items;

            var myObject = (double)parent.recipeListB.SelectedItems[0].Tag;
            // here you can access your properties myObject.propertA etc...

...

这是我当前抛出异常的代码:

  MRecipeForm parent = new MRecipeForm();
            ListViewItem item = new ListViewItem();
            item.Tag = parent.recipeListB.Items;

            Substrate o = ((ListBox)sender).SelectedItem as Substrate;
            double dryWtLbs = o.BatchDryWtLbs; //BatchDryWtLbs is type double

2 个答案:

答案 0 :(得分:1)

只需将object存储到商品的Tag财产中即可。添加商品时:

ListViewItem item = new ListViewItem();
item.Tag = myObject;
...

然后:

var myObject = (SpecialClass)listBox.SelectedItems[0].Tag;
// here you can access your properties myObject.propertA etc...

答案 1 :(得分:0)

更改所选索引后检索double的示例:

表单1有一个标签:label1和一个列表框:listBox1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        var object1 = new SpecialClass { Text = "First line", Number = 1d };
        var object2 = new SpecialClass { Text = "Second line", Number = 2d };
        listBox1.Items.Add(object1);
        listBox1.Items.Add(object2);
    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        SpecialClass o = ((ListBox)sender).SelectedItem as SpecialClass;
        label1.Text = o.Number.ToString();
    }
}

public class SpecialClass
{
    public string Text { get; set; }
    public double Number { get; set; }

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