2008-11-24 69 views
6

我用Enum中的值填充组合框。获取C#中的组合框文本#

现在组合框是正确的文本?所以我使用了一个getter和一个setter。我在阅读文本时遇到问题。

下面的代码:

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

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

有人看到我在做什么错吗?

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

+0

一个问题是使用Text属性。使用SelectedItem属性或最坏情况下的SelectedText属性。 – 2008-11-24 20:22:39

回答

1

我刚创建了一个简单的Windows窗体,并且对我来说一切正常。这是代码。

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

组合框始于指数-1,它没有文本,从而为空字符串:“”

我那么指数改变成的BookType,我需要,然后我得到错误的输出...

1

你应该尝试this.typeComboBox.SelectedItem.ToString()

+0

这抛出一个NullReferenceException – Vordreller 2008-11-24 20:15:07

1

您是否尝试过使用this.typeComboBox.SelectedText代替typeComboBox.Text

+0

是的,相同的结果 – Vordreller 2008-11-24 20:13:31

2

设置ComboBox的DropDownStyleDropDownList。这将确保只有已经在列表中的元素可以被选择(不需要检查文本实际上是否是有效值)。 然后,如果您使用Enum.GetValues(typeof(BookType))来填充组合框,那么typeComboBox.SelectedItem属性值将为BookType。所以你可以在属性getter和setter中使用它。

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

编辑:您可能必须检查SelectedItem属性为空

34

试试这个。这对我有效。

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

GetItemText方法分析该项目并返回该项目的绑定文本。

+1

正确的答案 – Marin 2012-05-24 20:37:20