C#

Как вывести другое слово в ComboBox на C#

В C# WinForms в ComboBox можно показывать пользователю один текст, а в коде хранить другое значение. Для этого используйте объекты и свойства DisplayMember и ValueMember. Например, пользователь видит название категории, а программа получает ее Id

Пример задачи

Допустим, есть категории:

  • 1 — Ноутбуки;
  • 2 — Смартфоны;
  • 3 — Аксессуары.

В выпадающем списке нужно показать слова, а при выборе получить число. Если хранить только строки, потом придется вручную искать, какая строка какому коду соответствует. Лучше сразу передать в ComboBox список объектов

Создайте класс

public class Category
{
    public int Id { get; set; }
    public string Title { get; set; } = "";
}

Title будет отображаться пользователю. Id останется внутренним значением

Заполните ComboBox

Например, в событии загрузки формы:

private void Form1_Load(object sender, EventArgs e)
{
    List<Category> categories = new()
    {
        new Category { Id = 1, Title = "Ноутбуки" },
        new Category { Id = 2, Title = "Смартфоны" },
        new Category { Id = 3, Title = "Аксессуары" }
    };

    comboBox1.DataSource = categories;
    comboBox1.DisplayMember = "Title";
    comboBox1.ValueMember = "Id";
}

Теперь ComboBox показывает Title, но выбранное значение можно получить через SelectedValue

Получите другое значение

private void showButton_Click(object sender, EventArgs e)
{
    int categoryId = (int)comboBox1.SelectedValue;
    label1.Text = $"Выбрана категория с Id: {categoryId}";
}

На экране пользователь выбирает слово, а программа работает с числом. Это удобно для базы данных, фильтров, заказов и любых справочников

Если нужно показать другой текст после выбора

Можно обработать SelectedIndexChanged:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (comboBox1.SelectedItem is Category category)
    {
        resultLabel.Text = $"Категория: {category.Title}, код: {category.Id}";
    }
}

Здесь SelectedItem — сам объект Category, а не просто строка

Проверка выбора

Перед использованием выбранного значения проверьте, что оно есть:

if (comboBox1.SelectedItem is not Category category)
{
    MessageBox.Show("Выберите категорию");
    return;
}

label1.Text = category.Title;

Такая проверка спасает, если список пустой, данные еще не загрузились или пользователь не выбрал элемент. Особенно это важно, когда ComboBox заполняется из файла, базы данных или API

Вариант через ToString

Если не задавать DisplayMember, ComboBox попробует вывести результат метода ToString(). Можно переопределить его:

public override string ToString()
{
    return Title;
}

Но для форм со справочниками DisplayMember и ValueMember обычно понятнее. Они явно показывают, какое поле отображается, а какое считается значением

Если после привязки вместо названий вы видите имя класса, значит DisplayMember не задан или задан с ошибкой в названии свойства. Например, DisplayMember = "Name" не сработает, если в классе свойство называется Title

Частые ошибки

Первая ошибка — добавлять строки вручную, а потом пытаться восстановить Id по тексту. Вторая — задать ValueMember до DataSource и запутаться в порядке инициализации. Третья — приводить SelectedItem к строке, хотя там лежит объект. Четвертая — не проверять, что выбор вообще сделан

Мини-задача: создайте список городов с Id и Name. Покажите в ComboBox названия городов, а по кнопке выведите в Label выбранный Id. Затем добавьте обработчик, который сразу показывает выбранный город при смене значения

Что почитать дальше по C#

Что почитать дальше по C#

Если нужен общий маршрут по теме, откройте рубрику C#. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x