2013-05-13 3 views
0

Я пытаюсь сделать listbox в winform, чтобы использовать список объявленных объектов в качестве источника контента. Выбор объекта должен отображать его свойства в соседнем текстовом поле, которое считывает свойства этого объекта. Объект для списка выглядит следующим образом:Как использовать список winform для отображения объявленных объектов в C#?

public Form1() 
{ 
    Element gold = new Element(); 
    gold.Property = "Soft"; 
    gold.Metal = true; 
    gold.Name = "Gold"; 

    InitializeComponent(); 
} 

мне сказали, что положить это в моей основной форме был путь с этим. До сих пор я пытался указать строку имени, которую будет использовать список, чтобы назвать объект, который будет выбран пользователем, и другие два свойства (gold.Property = «Soft» и gold.Metal = true; предназначены для перейдите в близлежащее текстовое поле, когда элемент выбран в списке). Я действительно не знаю, как это сделать, поэтому любая помощь для этого будет оценена по достоинству. У базы просто зная, как получить список, чтобы найти объект, который я сделал для него, а затем перечислить его, было бы здорово.

Кроме того, да, это назначение. Итак, все, что я изложил, нужно сделать таким образом ... для самого присваивания больше, но где я застрял здесь.

ответ

0

Используйте List<Element> elements, чтобы сохранить ваш элемент, затем выполните цикл для каждого элемента и добавьте его имя в список.

Добавить обработчик события в ваш список выбранный индекс изменен, Этот код должен это сделать. (Не забудьте проверить, является ли выбранный индекс -1 или нет)

txtName.Text = elements[listbox.SelectedIndex].Name; 
txtProperty.Text = elements[listbox.SelectedIndex].Property; 
0

Не зная больше ваших требований, я могу только предположить, что назначение хочет, чтобы вы сразу добавить экземпляры элемента() к вашему ListBox. Вы можете переопределить ToString() в своем классе Element(), чтобы контролировать, как ListBox будет отображать эти экземпляры. Возврат свойства Name() будет очень приятным. Подключите событие SelectedIndexChanged() ListBox и отбросьте SelectedItem() обратно к элементу(), чтобы вы могли извлечь другие два значения. Это может выглядеть примерно так:

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

Это было невероятно полезно, и мне было много, чтобы понять и работать с точки зрения добавления новых предметов. Однако, когда я впервые добавил «элемент» («золото»), он дал мне целую строку кода в списке. Итак, я сделал listbox1.Items.Add (element.Name); и это дало мне имя вместо этого. То, что вы мне дали, действительно хорошо для того, что я делаю. Огромное спасибо! Я бы поднял это, если бы мог. Я дам вам знать, как только я его реализую, если вы ответили на мою проблему. Еще раз спасибо. –

+0

Обратите внимание, как я переопределил ToString() в классе Element() на ** внизу ** примера. Это то, что контролирует, как ListBox отображает ваш экземпляр. Без этого он просто отображает полное имя вашего класса, что не очень полезно. Я установил его, чтобы вернуть свойство Name(). Если вы вместо этого добавите 'element.Name' в ListBox, то вы ** проиграете ** другие связанные части данных, поскольку все, что вы добавляете, является простой старой строкой. Вы должны использовать 'listBox1.Items.Add (element)', чтобы все данные находились в ListBox (даже если вы видите только отображаемое там Имя). –

Смежные вопросы