Получить текст поля со списком в C#

Я заполнил поле со списком значениями из Enum.

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

Вот код:

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

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

Кто-нибудь видит, что я делаю не так?

Обновлено: Я пришел к выводу, что проблема заключается в сроках. Момент времени, когда я вызываю текст, действительно наступает после того, как я изменил поле со списком, но еще до того, как это значение будет проанализировано как значение. Теперь проблема исправлена ​​другим способом, спасибо за идеи.

Одна из проблем заключается в использовании свойства Text. Используйте свойство SelectedItem или, в худшем случае, свойство SelectedText.

Rune Grimstad 24.11.2008 23:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
1
72 980
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

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

Вам следует попробовать this.typeComboBox.SelectedItem.ToString ()

это вызывает исключение NullReferenceException

Vordreller 24.11.2008 23:15

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

Ответ принят как подходящий

Я просто создал простую форму окна, и у меня все работало нормально. Вот код.

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());
    }
}

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

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

Обновлено: вам может потребоваться проверить свойство SelectedItem на значение null

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

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

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

Другие вопросы по теме