Возможный дубликат:
С# Winforms Combobox с меткой и стоимостью
Как подойти к хранению отображаемого значения и реального значения в ComboBox?
Т.е., ComboBox отображает:
- Уничтожьте мир
- Пожарная стрельба
- Призыв Cthulhu
но получаемые значения:
- с.в.
- сс
- СБН
Я хочу иметь возможность получить значение выбранного элемента способом, подобным этому:
string selectedValue = combobox1.SelectedValue
Обновлен код в ответ на ответы:
Dictionary<string, string> filterItems = new Dictionary<string, string>
{
{"Destroy World", "dw"},
{"Fire Slingshot", "fs"},
{"Summon Cthulu", "sc"},
};
this.options_filterby.DataSource = new BindingSource(filterItems, null);
this.options_filterby.DisplayMember = "Key";
this.options_filterby.ValueMember = "Value";
Теперь по какой-то причине, хотя DisplayMembers абсолютно прекрасны, ValueMembers возвращают объекты словаря. Даже незнакомец, через некоторое время, ValueMembers вернет строки, как ожидалось.
private void options_filterby_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(options_filterby.SelectedValue.ToString());
}
Это возвращает словари в течение первых нескольких раз. Я изменяю выбранный элемент ComboBox, но в конечном итоге возвращает строки по мере необходимости.
Обновление: исправлено (не может быть добавлено как решение, потому что вопрос был закрыт)
В ответ на указанную выше проблему исправление заключается в том, чтобы установить свойства DisplayMember и ValueMember перед DataSource. Я предполагаю, что это ошибка. Код должен выглядеть следующим образом:
this.options_filterby.DisplayMember = "Key";
this.options_filterby.ValueMember = "Value";
this.options_filterby.DataSource = new BindingSource(filterItems, null);