我用Enum的值填充了一个组合框。
现在组合框是正确的吗?所以我正在使用一个吸气剂和一个二传手。我在阅读文本时遇到了问题。
以下是代码:
public BookType type
{
get
{
return (BookType)Enum.Parse(typeof(BookType), this.typeComboBox.Text);
}
set
{
this.typeComboBox.Text = value.ToString();
}
}
出于某种原因,当我在组合框中选择一个项目时,this.typeComboBox.Text
总是返回一个空字符串。
有人看到我做错了吗?
编辑:我得出结论,问题在于时机问题。 我召唤文本的时间点确实是在我更改了组合框后,但仍然在该值被解析为值之前。 现在以不同的方式解决问题,感谢所有的想法。答案 0 :(得分:34)
试试这个。这对我有用。
string selectedText = this.ComboBox.GetItemText(this.ComboBox.SelectedItem);
GetItemText方法分析项目并返回绑定到该项目的文本。
答案 1 :(得分:2)
将ComboBox的DropDownStyle
设置为DropDownList
。这将确保只能选择列表中已有的元素(无需检查文本实际上是否为有效值)。
然后,如果您使用Enum.GetValues(typeof(BookType))
填充组合框,则typeComboBox.SelectedItem
属性的值为BookType
。所以你可以在属性getter和setter中使用它。
总结一下。只要使用DropDownList样式,就不必将组合框绑定到文本值列表。使用SelectedItem属性获取所需类型的项目,而不是检查Text属性。
编辑:您可能必须检查SelectedItem属性是否为null
答案 2 :(得分:1)
组合框从索引-1开始,它没有文本,因此是一个空字符串:“”
然后我将索引更改为我需要的BookType,然后输出错误的结果......
答案 3 :(得分:1)
你应该试试这个.typeComboBox.SelectedItem.ToString()
答案 4 :(得分:1)
您是否尝试过使用this.typeComboBox.SelectedText
代替typeComboBox.Text
?
答案 5 :(得分:0)
我刚刚创建了一个简单的窗体,一切都对我有用。这是代码。
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());
}
}