2017-01-30 1 views
-1

So habe ich eine Comboboxabrufen SelectedItem Combobox

cmbSpecifics1.Items.AddRange(typeof(Aggressive).GetEnumNames()); 

, dass ich mit Enum bevölkern

public enum Aggressive 
{ 
    Yes, 
    No, 
    Sometimes, 
    Only_when_hungry 
} 

Wie kann ich seinen gewählten Wert abrufen und auf eine Eigenschaft zu senden?

public Aggressive RealAggressiveLevel 
    { 
     get { return _aggressive; } 
     set { _aggressive = value; } 
    } 

    Bee iBee = new Bee(animal); 
    iBee.RealAggressiveLevel = ???cmbSpecifics1.SelectedValue??? 

Dies ist, wie ich es zu füllen:

lblSpecifics1.Text = "Aggressive:"; 
cmbSpecifics1.Items.Clear(); 
cmbSpecifics1.Items.AddRange(typeof(Aggressive).GetEnumNames()); 

Das ist die Linie, die ich auf null ref Ausnahme erhalten

iBee.RealAggressiveLevel = (Aggressive)Enum.Parse(typeof(Aggressive), cmbSpecifics1.SelectedValue.ToString()); 

ist dies, wie im Hinzufügen von Daten

_animal = ((AnimalType)lbCategory.SelectedIndex); 
      switch (_animal) 
      { 
       case AnimalType.Insect: 
        switch ((InsectTypes)lbAnimalObject.SelectedIndex) 
        { 
         case InsectTypes.Bee: 
          Bee iBee = new Bee(animal); 
          iBee.RealAggressiveLevel = (Aggressive)Enum.Parse(typeof(Aggressive), cmbSpecifics1.SelectedValue.ToString()); 
          iBee.Worker = tbSpecific1.Text; 
          iBee.Color = tbSpecific2.Text; 
          animalManager.Add(iBee); 
          break; 

Prost im Voraus

+0

In welcher Umgebung ist das? Ist es UWP, Windows Forms, WPF? – kettch

+0

Windows Forms, sorry verpasst, dass – Noxious

+0

Diese Lösung funktioniert nur, wenn es akzeptabel ist, tatsächlichen 'enum'-Wert Text wie "Only_when_hungry" in der Benutzeroberfläche zu schreiben, was für die meisten Anwendungen nicht der Fall ist und sogar weniger, wenn Sie mehrsprachig sein müssen . Normalerweise würde ich eine Item-Klasse verwenden, um ein Element darzustellen, und eine Ressourcendatei verwenden, um den lokalisierten Namen mithilfe von ToString() zu laden, um den Text des Aufzählungswerts als Schlüssel in der Ressource zu erhalten. Und ich würde einige Unit-Tests durchführen, um sicherzustellen, dass ich keine fehlenden oder zusätzlichen Einträge habe. – Phil1970

Antwort

1

Sie müssen die SelectedValue in String konvertieren und dann Enum.Parse verwenden, um zurück in EnumAggressive zu konvertieren.

ComboBox.SelectedValue gibt die Object zurück und muss dann in String konvertiert werden, da Enum.Parse den String als Eingabe benötigt. Auch der Rückgabetyp ist object, so dass es erneut konvertiert werden muss (Cast) zu Enum. Unten ist die Signatur von Enum.Parse Methode.

public static object Parse(
    Type enumType, 
    string value 
) 

Also sollte der folgende Code für Sie arbeiten.

+0

Prost, aber es gibt mir eine null ref Ausnahme, kann nicht herausfinden, warum – Noxious

+1

können Sie mehr Code und zeigen, welche Zeile einen Fehler gibt? Wenn Sie nichts ausgewählt haben, kann 'SelectedValue' null sein. – Agalo

+0

hinzugefügt mehr Code, IDK, was mehr dazu gehört. Ich bin sicher, dass ich eine Option in der Combobox auswähle. Auch ich änderte es zu cmbSpecific1 (schrieb das Falsche zuerst) – Noxious

Verwandte Themen