2008-11-24 79 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