2014-01-11 33 views
1

一直在寻找一个清晰的例子。 我做了一个新的对象,包括设置几个属性,将整个对象添加到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 
+0

如果你使用Substrate o =((ListBox)sender).SelectedItem作为Substrate;该列表框需要包含Substrate类型的项目(对象) – Jim

+0

我已编辑过您的标题。请参阅[“应该在其标题中包含”标签“吗?”](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles) – Jim

回答

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

我需要从列表中访问一个double,怎么会投它呢? – CodeMatrix

+0

@CodeMatrix:你不需要施放它。当你将这个物品投射到'SpecialClass'时,你可以访问它的属性而不用施放它们。 – Guffa

+0

我一直在为此工作几天,接近答案!谢谢! – CodeMatrix

0

如改变选择的指数后检索双:

表格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; 
    } 
}