Получить текст со списком в C # - PullRequest
6 голосов
/ 24 ноября 2008

Я заполнил комбинированный список значениями из Enum.

Теперь комбинированный список - это текст, верно? Поэтому я использую геттер и сеттер. У меня проблемы с чтением текста.

Вот код:

public BookType type
{
    get
    {
        return (BookType)Enum.Parse(typeof(BookType), this.typeComboBox.Text);
    }
    set
    {
        this.typeComboBox.Text = value.ToString();
    }
}

По какой-то причине this.typeComboBox.Text всегда возвращает пустую строку, когда я выбираю элемент в выпадающем списке.

Кто-то видит, что я делаю неправильно?

РЕДАКТИРОВАТЬ: я пришел к выводу, что проблема заключается во времени. Момент времени, когда я вызываю текст, действительно после того, как я изменил комбинированный список, но еще до того, как это значение будет проанализировано как значение. Теперь проблема решена по-другому, спасибо за все идеи.

Ответы [ 6 ]

34 голосов
/ 05 августа 2010

Попробуй это. это сработало для меня.

string selectedText = this.ComboBox.GetItemText(this.ComboBox.SelectedItem);

Метод GetItemText анализирует элемент и возвращает текст привязки к этому элементу.

2 голосов
/ 24 ноября 2008

Установите DropDownStyle ComboBox на DropDownList. Это обеспечит возможность выбора только тех элементов, которые уже есть в списке (нет необходимости проверять, является ли текст действительным значением). Тогда, если вы используете Enum.GetValues(typeof(BookType)) для заполнения поля со списком, свойство typeComboBox.SelectedItem будет иметь значение BookType. Так что вы можете использовать это в свойствах getter и setter.

Итак, подведем итог. Вам не нужно привязывать комбинированный список к списку текстовых значений, если вы используете стиль DropDownList. Используйте свойство SelectedItem, чтобы получить элемент нужного типа, вместо проверки свойства Text.

Редактировать: вам может потребоваться проверить свойство SelectedItem для нуля

1 голос
/ 24 ноября 2008

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

1 голос
/ 24 ноября 2008

Вы должны попробовать this.typeComboBox.SelectedItem.ToString ()

1 голос
/ 24 ноября 2008

Поле со списком начинается с индекса -1, в котором нет текста, то есть пустой строки: ""

Затем я изменяю индекс на нужный мне BookType, а затем получаю неправильный вывод ...

0 голосов
/ 24 ноября 2008

Я только что создал простую форму 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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...