Получить текст combobox в C#
Я заполнил combobox значениями из перечисления.
теперь combobox-это текст правильно? Поэтому я использую геттер и сеттер. У меня проблемы с чтением текста.
вот код:
public BookType type
{
get
{
return (BookType)Enum.Parse(typeof(BookType), this.typeComboBox.Text);
}
set
{
this.typeComboBox.Text = value.ToString();
}
}
по какой причине this.typeComboBox.Text
всегда возвращает пустую строку, когда я выбираю элемент в поле со списком.
кто-нибудь видит, что я делаю неправильно?
EDIT: я пришел к выводу, что проблема заключается в сроках. Суть в время, когда я вызываю текст, действительно после того, как я изменил combobox, но все еще до того, как это значение анализируется как значение. Проблема исправлена по-другому, спасибо за все идеи.
6 ответов
Я только что создал простую форму windows, и все работало хорошо для меня. Вот код.
public enum Test
{
One, Two, Three
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.comboBox1.DataSource = Enum.GetNames(typeof(Test));
}
public Test Test
{
get
{
return (Test)Enum.Parse(typeof(Test), this.comboBox1.Text);
}
set
{
this.comboBox1.Text = value.ToString();
}
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(this.Test.ToString());
this.Test = Test.Two;
MessageBox.Show(this.Test.ToString());
}
}
попробуйте это. это сработало для меня.
string selectedText = this.ComboBox.GetItemText(this.ComboBox.SelectedItem);
метод GetItemText анализирует элемент и возвращает текст привязки к этому элементу.
установить DropDownStyle
из ComboBox в DropDownList
. Это гарантирует, что могут быть выбраны только элементы, уже находящиеся в списке (нет необходимости проверять, что текст действительно является допустимым значением).
Тогда, если вы используете Enum.GetValues(typeof(BookType))
чтобы заполнить combobox тогда typeComboBox.SelectedItem
свойство будет иметь значение BookType
. Таким образом, вы можете использовать это в свойствах getter и setter.
Итак, подведем итог. Вам не нужно привязывать combobox к списку текстовых значений, пока вы используете стиль DropDownList. Используйте Свойство SelectedItem для получения элемента нужного типа вместо проверки свойства Text.
Edit: возможно, вам придется проверить свойство SelectedItem на null
combobox начинается с индекса -1, который не имеет текста, поэтому пустая строка:""
затем я меняю индекс на BookType, который мне нужен, а затем получаю неправильный вывод...