Получить текст 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, который мне нужен, а затем получаю неправильный вывод...


вы должны попробовать это.typeComboBox.Для selecteditem.ToString ()


вы пробовали использовать this.typeComboBox.SelectedText вместо typeComboBox.Text ?