2008-11-24 6 views
6

Ich füllte eine Combobox mit den Werten von einem Enum.Erhalte den Combobox-Text in C#

Jetzt ist eine Combobox Text richtig? Also benutze ich einen Getter und einen Setter. Ich habe Probleme beim Lesen des Textes.

Hier ist der Code:

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

Aus irgendeinem Grund this.typeComboBox.Text immer einen leeren String zurück, wenn ich einen Artikel auf der Combobox wählen.

Kann jemand sehen, was ich falsch mache?

EDIT: Ich bin zu dem Schluss gekommen, dass das Problem im Timing liegt. Der Zeitpunkt, zu dem ich den Text aufrufe, ist in der Tat, nachdem ich die Combobox geändert habe, aber noch bevor dieser Wert als Wert analysiert wird. Problem jetzt anders behoben, danke für alle Ideen.

+0

Ein Problem ist die Verwendung der Eigenschaft Text. Verwenden Sie die SelectedItem-Eigenschaft oder im schlimmsten Fall die SelectedText-Eigenschaft. –

Antwort

1

Ich habe gerade eine einfache Windows-Form erstellt, und alles hat für mich in Ordnung funktioniert. Hier ist der Code.

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

Die Combobox beginnt bei Index -1, die keinen Text hat, also eine leere Zeichenfolge: „“

ich dann den Index zu einem Booktype ändern, die ich brauche, und dann bekomme ich den falschen Ausgang ...

1

sollten Sie versuchen, this.typeComboBox.SelectedItem.ToString()

+0

dies wirft eine NullReferenceException – Vordreller

1

Haben Sie versucht this.typeComboBox.SelectedText statt typeComboBox.Text verwenden?

+0

ja, das gleiche Ergebnis – Vordreller

2

die DropDownStyle des ComboBox DropDownList ein. Dies stellt sicher, dass nur die Elemente, die bereits in der Liste sind, ausgewählt werden können (es muss nicht überprüft werden, dass der Text tatsächlich ein gültiger Wert ist). Dann, wenn Sie Enum.GetValues(typeof(BookType)) verwenden, um die Combobox zu füllen, wird typeComboBox.SelectedItem Eigenschaft ein Wert von BookType sein. Sie können dies also in der Eigenschaft Getter und Setter verwenden.

Also zusammenzufassen. Sie müssen das Kombinationsfeld nicht an eine Liste von Textwerten binden, solange Sie den DropDownList-Stil verwenden. Verwenden Sie die SelectedItem-Eigenschaft, um ein Element des gewünschten Typs zu erhalten, anstatt die Text-Eigenschaft zu überprüfen.

bearbeiten: Sie können die SelectedItem-Eigenschaft für null müssen prüfen

34

bereits. Das hat für mich funktioniert.

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

Die GetItemText-Methode analysiert das Element und gibt den Text der Bindung an dieses Element zurück.

+1

Die richtige Antwort – Marin