Имеется ComboBox, из которого пользователь выбирает строки, которые после этого отображаются на ListBox. Хочу эти выбранные элементы вывести через запятую.
Такой вариант:
string.Join(", ", listBox1.SelectedItems)
выдаёт System.Windows.Forms.ListBox+SelectedObjectCollection.
Пытаюсь обратиться к конкретному объекту ListBox по индексу:
listBox1.Items[1].ToString()
получаю простанство имен.имякласса, вместо значения, которое хранится по индексу 1.
Что не так?
Нужно переопределить ToString() в вашем классе, который вы используете для заполнения Items, иначе по дефолту он выводит наименование типа.
Теперь можно джойнить строку как из 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;
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей