我用枚举中的值填充了一个组合框。
组合框是文本,对吧?所以我用了getter和setter,我阅读文本时遇到了问题。
代码如下:
public BookType type
{
get
{
return (BookType)Enum.Parse(typeof(BookType), this.typeComboBox.Text);
}
set
{
this.typeComboBox.Text = value.ToString();
}
}
由于某种原因,当我选择组合框上的项时,this.typeComboBox.Text
总是返回空字符串。
有人看出我哪里做错了吗?
编辑:我得出的结论是,问题出在时间上。我调用文本的时间点确实是在我改变组合框之后,但仍然在该值被解析为值之前。现在问题以不同的方式解决了,感谢所有的想法。
6条答案
按热度按时间ndh0cuux1#
GetItemText方法会分析项目,并传回系结至该项目之的文字。
yc0p9oo02#
将ComboBox的
DropDownStyle
设置为DropDownList
。这将确保只有列表中已经存在的元素可以被选择(不需要检查文本是否为有效值)。然后,如果使用Enum.GetValues(typeof(BookType))
填充ComboBox,则typeComboBox.SelectedItem
属性将为BookType
。因此,可以在属性getter和setter中使用此属性。总之,只要使用DropDownList样式,就不必将组合框绑定到文本值列表。使用SelectedItem属性获取所需类型的项,而不是检查Text属性。
编辑:您可能必须检查SelectedItem属性是否为空
i86rm4rw3#
该组合框从索引-1开始,它没有文本,因此是一个空字符串:““
然后我将索引更改为我需要的BookType,然后我得到了错误的输出...
h6my8fg24#
您是否尝试过使用
this.typeComboBox.SelectedText
而不是typeComboBox.Text
?3duebb1j5#
xqk2d5yq6#
我刚刚创建了一个简单的windows窗体,一切都很顺利。下面是代码。