Как вывести элементы из Listbox

Имеется ComboBox, из которого пользователь выбирает строки, которые после этого отображаются на ListBox. Хочу эти выбранные элементы вывести через запятую.

Такой вариант:

string.Join(", ", listBox1.SelectedItems)

выдаёт System.Windows.Forms.ListBox+SelectedObjectCollection.
Пытаюсь обратиться к конкретному объекту ListBox по индексу:

listBox1.Items[1].ToString()

получаю простанство имен.имякласса, вместо значения, которое хранится по индексу 1.
Что не так?


Ответы (1 шт):

Автор решения: Pavel Popov
  1. Нужно переопределить ToString() в вашем классе, который вы используете для заполнения Items, иначе по дефолту он выводит наименование типа.

  2. Теперь можно джойнить строку как из SelectedItems, так и из Items, НО обязтаельно через Cast к нужному типу(таковы особенности этой коллекции)

    public class MainForm
    {
         public MainForm()
         {
             listBox1.Items.Add(new DataItem
                 {
                     Name = "Петя"
                 });
             listBox1.Items.Add(new DataItem
                 {
                     Name = "Вася"
                 });
    
             var str = string.Join(",", listBox1.Items.Cast<DataItem>());
         }
     }
    
     class DataItem
     {
         public string Name { get; set; }
    
         public override string ToString()
         {
             return Name;
         }
     }
    
→ Ссылка