Вчера в голову пришла интересная мысль. Допустим, у нас есть класс someObject:
class someObject
{
public int id;
public string name;
}
И также допустим, что у нас есть comboBox, который нам нужно заполнить этими самыми someObject, которые лежат в каком-то листе, т.е. сделать так:
foreach (var item in list)
{
comboBox.Items.Add(item);
}
Если сделать это так, то в comboBox будет что-то подобное на каждый элемент:
Form+someObject
Хорошо, пойдём другой дорогой. Будем заполнять вот так:
foreach (var item in list)
{
comboBox.Items.Add(item.name);
}
Теперь в comboBox'е будет отображаться имя элемента name. Теперь после выбора какого-либо элемента из comboBox для получения конкретного элемента листа, нужно будет делать вот так:
someObject currentItem;
foreach (var item in list)
{
if(item.name == comboBox.Text)
{
currentItem = item;
}
}
Хорошо. Всё это работает. Но есть одно "но": если в листе есть объекты с одинаковыми именами, то после тех же манипуляций, которые описаны выше, мы не всегда будем получать именно тот объект, который нам нужен. Я хочу сказать, что цикл foreach пройдётся по всему листу, сверит имя каждого элемента с comboBox.Text и будет сохранять в переменную последнее проверенное значение.
А если сделать вот так:
someObject currentItem;
foreach (var item in list)
{
if(item.name == comboBox.Text)
{
currentItem = item;
break;
}
}
то будет сохраняться только первое значение.
Так вот, к чему я всё это: Есть ли какие-нибудь варианты, чтобы при добавлении элемента вот так
foreach (var item in list)
{
comboBox.Items.Add(item);
}
в comboBox отображалось только имя?
Просто задайте свойство
comboBox.DisplayMember = "name";
Можно использовать конструкцию
comboBox.DisplayMember = nameof(someObject.name);
Однако, при этом нужно заменить поля на свойства:
class someObject
{
public int id { get; set; }
public string name { get; set; }
}
А также желательно использовать PascalCase для публичных свойств: Id, Name и имён класса: SomeObject.
Примечание: также обратите внимание на свойство ValueMember комбобокса.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей