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