2017-10-24 8 views
0

私のプログラミング中間期には、幽霊の多い家を作る必要があります。 Enumを使用する必要があります。私は他のフォームでEnumを呼び出すのに問題があります。リストボックスでEnumを使用する方法を理解できません

これは、私がリストボックスで列挙型を使用しようとしているフォームからのコードです。

private void lstRooms_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string room = lstRooms.Text; 

     RoomChoice rooms = new RoomChoice(room); 

     if (room = "Den") 
     { 

     } 
     if (room = "DH") 
     { 

     } 
     if (room = "UH") 
     { 

     } 
     if (room = "Bedroom") 
     { 

     } 
     if (room = "Basement") 
     { 

     } 
     if (room = "Greenhouse") 
     { 

     } 
     if (room = "Attic") 
     { 

     } 
     if (room = "WW") 
     { 

     } 

これはEnumsのコードです。

class RoomChoice 
{ 
    public string room; 

    public RoomChoice(string room) 
    { 
     // TODO: Complete member initialization 
     this.room = room; 
    } 
    public enum Room 
    { 
     Den, 
     DH, 
     UH, 
     Bedroom, 
     Basement, 
     Greenhouse, 
     Attic, 
     WW 

    } 

    class DecideRoom 
    { 
     public Room roomchoice { get; set; } 

     public void DecideRooms(string room) 
     { 
      roomchoice = (Room)Enum.Parse(typeof(Room), room); 
     } 
    } 
} 

申し訳ありませんが、それはスーパー明白な間違いだ場合、私はC#に非常に新しいですし、列挙型は私に混乱しています。どんな助けでも大変感謝します。

+0

あなたは質問への答えではないでしょうけど、あなたは 'の代わりに'スイッチ()を使用する必要がありますが、 'IF()' – pirs

+0

あなたが本当にその全体 'RoomChoice'クラスが必要ですか?なぜ彼らの選択肢を 'enum'として保存しないのですか?文字列を列挙型に変換したり、その逆に変換する方法はすでにあります。 –

+0

それでは、Enumとしての選択肢をどのように保存するのですか? –

答えて

1

これがenumです:

private void yourListBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var selected = (Room)yourListBox.SelectedItem; 
    // Do whatever you need to... 
} 

:ここ

yourListBox.DataSource = System.Enum.GetValues(typeof (Room)); 

は、あなたが選択した値を取得する方法である:

public enum Room 
{ 
    Den, 
    DH, 
    UH, 
    Bedroom, 
    Basement, 
    Greenhouse, 
    Attic, 
    WW 
} 

これはどのようにそれバインドリストボックスにあります

いくつかの提案

SelectedIndexChangedイベントハンドラのスイッチを使用して、必要な処理を行います。「DEN」などの文字列を記述するのではなく、インテリセンスサポートとコンパイラのサポートを受けて、ケーシングが間違っていると認識します。プラスそれはクリーナーです。このように:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (this.listBox1.SelectedIndex < 0) return; 
    var selected = (Room)this.listBox1.SelectedItem; 

    switch (selected) 
    { 
     case Room.Den: 
      // Do whatever you need to... 
      break; 
     case Room.DH: 
      break; 
     case Room.UH: 
      break; 
     case Room.Bedroom: 
      break; 
     case Room.Basement: 
      break; 
     case Room.Greenhouse: 
      break; 
     case Room.Attic: 
      break; 
     case Room.WW: 
      break; 
     default: 
      break; 
    } 
} 
+0

それはたくさんの意味があります。今、私の問題は、 "部屋"が文字列であり、列挙型がboolとみなされるか、何とかboolに変換しようとしているため、すべてのif文がエラーであるということです。 エラー:\t 'string'を暗黙的に 'bool'に変換できません –

+0

@ColeBrowne何を意味しますか?列挙型はbool *と見なされますか? – CodingYoshi

+0

これは本当に私が言いたいことではありません、私の脳はこれから痛いです。私は何時間もそれを理解しようとしてきました。私の言いたいことは、私のコードは文字列をboolに変換しようとしていると考えているので、if文ごとにエラーが出てくるだけです。なぜ私はそれが起こっているのか混乱しているだけです –

関連する問題