2017-01-30 104 views
-1

所以我有一個組合框檢索將selectedItem組合框

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

,我用枚舉

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

如何取回它所選擇的值,並將其發送到財產填充?

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

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

這是我如何來填充它:

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

這是我得到空裁判例外的

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

行這是怎麼了IM添加數據

_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; 

提前乾杯

+0

這是什麼環境?它是UWP,Windows窗體,WPF嗎? – kettch

+0

Windows窗體,對不起,錯過了 – Noxious

+0

這個解決方案只有在用戶界面中寫入實際的'enum'值文本(比如「Only_when_hungry」)時纔可以使用,而對於大多數應用程序來說並非如此,如果您必須使用多種語言。我通常會使用Item類來表示一個項目,並使用資源文件來使用ToString()來加載本地化的名稱,以獲得enum值的文本作爲資源中的關鍵字。我會進行一些單元測試,以確保我沒有缺失或額外的條目。 – Phil1970

回答

1

您需要將SelectedValue轉換爲字符串,然後使用Enum.Parse轉換回EnumAggressive

ComboBox.SelectedValue返回Object然後它需要轉換爲字符串,因爲Enum.Parse需要String作爲輸入。此外,返回類型爲object,因此需要將其重新轉換(Cast)爲Enum。以下是Enum.Parse方法的簽名。

public static object Parse(
    Type enumType, 
    string value 
) 

因此,下面的代碼應該適合你。

iBee.RealAggressiveLevel = (Aggressive) Enum.Parse(typeof(Aggressive), cmbSpecifics2.SelectedValue.ToString()); 
+0

歡呼聲,但是它給了我一個空參考例外,似乎無法弄清楚爲什麼 – Noxious

+1

你可以發佈更多的代碼,並顯示哪一行給出錯誤?如果你沒有選擇任何東西,那麼'SelectedValue'可以爲null。 – Agalo

+0

添加了一些更多的代碼,idk什麼更多與它有關。我確定我正在選擇組合框中的選項。此外,我改變它cmbSpecific1(發佈錯誤的第一個) – Noxious