Я заполнил поле со списком значениями из Enum.
Теперь поле со списком - это текст? Итак, я использую геттер и сеттер. У меня проблемы с чтением текста.
Вот код:
public BookType type
{
get
{
return (BookType)Enum.Parse(typeof(BookType), this.typeComboBox.Text);
}
set
{
this.typeComboBox.Text = value.ToString();
}
}
По какой-то причине this.typeComboBox.Text всегда возвращает пустую строку, когда я выбираю элемент в поле со списком.
Кто-нибудь видит, что я делаю не так?
Обновлено: Я пришел к выводу, что проблема заключается в сроках. Момент времени, когда я вызываю текст, действительно наступает после того, как я изменил поле со списком, но еще до того, как это значение будет проанализировано как значение. Теперь проблема исправлена другим способом, спасибо за идеи.





Поле со списком начинается с индекса -1, который не имеет текста, поэтому пустая строка: ""
Затем я меняю индекс на BookType, который мне нужен, и получаю неверный результат ...
Вам следует попробовать this.typeComboBox.SelectedItem.ToString ()
это вызывает исключение NullReferenceException
Вы пробовали использовать 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 анализирует элемент и возвращает текст, привязанный к этому элементу.
Одна из проблем заключается в использовании свойства Text. Используйте свойство SelectedItem или, в худшем случае, свойство SelectedText.