2017-01-30 12 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()); 

これは私がこれはイムは、データを追加する方法です

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

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

にヌル参照例外を取得するラインであります

前回の乾杯

+0

これはどのような環境ですか?それはUWP、Windowsフォーム、WPFですか? – kettch

+0

Windowsフォーム、ごめんなさい。 – Noxious

+0

このソリューションは、ほとんどのアプリケーションではそうではなく、さらに多言語化する必要がある場合はUIで「Only_when_hungry」などの実際の 'enum'値テキストを書くことが許容される場合にのみ機能します。私は通常アイテムを表現するために 'Item'クラスを使い、' ToString() 'を使ってローカライズされた名前をロードするリソースファイルを使って、enum値のテキストをリソースのキーとして取得します。そして、私は欠けているか、余分なエントリがないことを確認するためにいくつかのユニットテストを持っています。 – Phil1970

答えて

1

SelectedValueをStringに変換してからEnum.Parseを使用してEnumAggressiveに変換する必要があります。

ComboBox.SelectedValueは、Enum.Parseが文字列を入力として必要とするため、Objectを返し、Stringに変換する必要があります。また戻り値の型はobjectなので、再度(キャスト)をEnumに変換する必要があります。以下はEnum.Parseメソッドの署名です。

public static object Parse(
    Type enumType, 
    string value 
) 

したがって、次のコードはあなたに適しています。

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

歓声は、しかし、それは私にnull refの例外を与えている、なぜ – Noxious

+1

あなたがより多くのコードを投稿して、どの行がエラーを示しているかを理解できないようですか?何も選択しなかった場合、 'SelectedValue'はnullになります。 – Agalo

+0

は、もっと多くのコードを追加しました。私はコンボボックスでオプションを選択していると確信しています。また、私はcmbSpecific1に変更しました(間違ったものを先に投稿しました) – Noxious

関連する問題