CodeMatrix
CodeMatrix

Reputation: 21

ListBox and object properties

Been looking for a clear example of this. I made a new object including setting several properties, added the whole object to the listBox then wrote a string to describe them. Now I want one item from the lsitBox object at the selected index. There are many syntaxes that appear to have similar but different usages it is complicating the search...

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?

.... I tried to use this variable setting, something like this...

 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...

....

This is my current code that throws an exception:

  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

Upvotes: 1

Views: 1007

Answers (2)

Jim
Jim

Reputation: 2984

Example to retrieve a double after changing selected index :

Forms 1 has a label : label1 and a listbox : 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;
    }
}

Upvotes: 0

Selman Genç
Selman Genç

Reputation: 101701

Just store your object into your item's Tag property. When you adding your item:

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

Then:

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

Upvotes: 1

Related Questions