在C#中获取combobox文本

我用Enum的值填充了一个combobox。

现在combobox是文本吗? 所以我正在使用一个吸气剂和一个二传手。 我在阅读文本时遇到了问题。

这是代码:

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

出于某种原因,当我在combobox中选择一个项目时, this.typeComboBox.Text总是返回一个空字符串。

有人看到我做错了吗?

编辑:我得出结论,问题在于时机。 在我更改combobox之后,我确实召唤文本的时间点,但仍然在该值被解析为值之前。 现在以不同的方式解决问题,感谢所有的想法。

我刚刚创建了一个简单的窗体,一切都适合我。 这是代码。

 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方法分析项目并返回绑定到该项目的文本。

将ComboBox的DropDownStyle设置为DropDownList 。 这将确保只能选择列表中已有的元素(无需检查文本实际上是否为有效值)。 然后,如果使用Enum.GetValues(typeof(BookType))来填充combobox,则typeComboBox.SelectedItem属性将是BookType的值。 所以你可以在属性getter和setter中使用它。

总结一下。 只要使用DropDownList样式,就不必将combobox绑定到文本值列表。 使用SelectedItem属性获取所需类型的项,而不是检查Text属性。

编辑:您可能必须检查SelectedItem属性是否为null

combobox从索引-1开始,它没有文本,因此是一个空字符串:“”

然后我将索引更改为我需要的BookType,然后输出错误的输出…

你应该试试这个.typeComboBox.SelectedItem.ToString()

您是否尝试过使用this.typeComboBox.SelectedText而不是typeComboBox.Text