2012-04-22 10 views
0

マルチ選択リストボックス変化する値、およびたびに、ユーザはそれに応じてそのように更新します値を選択:C#の私は、マルチ選択ボックスでいくつかの文字列を持っている

 if (lstSpecial.SelectedIndex == 0) 
     { 
      special1.Price = 18; 

     } 
     else if (lstSpecial.SelectedIndex == 1) 
     { 

      special1.Price = 25; 

     } 
     else if (lstSpecial.SelectedIndex == 2) 
     { 
      special1.Price = 40; 

     } 
     else if (lstSpecial.SelectedIndex == 3) 
     { 
      special1.Price = 30; 

     } 

、それは私のために正常に動作しますしかし、どのようにすれば、ユーザーがリストボックスから1つ以上の値を選択して、Special1.Priceが各値を個別に保存するようにすることができますか? 2つ以上を選択しようとすると、最後に選択した値で値が上書きされることがわかります。

Priceプロパティは単純なgetおよびsetです。あなたが言ったように

おかげ

+0

...複数の値を実際に処理できる配列または 'List'を作成しますか?また、[switch文](http://goo.gl/f0Yh2)を使用することもできます。 – lordcheeto

+0

リストボックスのSelectionModeプロパティを "One"に変更します。ユーザーが複数の項目を選択できるようにすることは意味がありません。 –

答えて

1

リストボックスのすべての選択項目をループするには、SelectedIndicesを使用する必要があります。SelectedIndicesは、選択した項目のゼロベースのインデックスのコレクションです。

もし私がif-elseを持っているのなら...配列名の価格では書く方がはるかに簡単で、必要に応じて伸ばす方がはるかに優れています(lstSpecialに4つ以上の項目が含まれていると、 )。

const int[] prices = new int[]{18,25,40,30}; 
int total = 0; 
foreach(int index in lstSpecial.SelectedIndices) 
    total += prices[index]; 
special1.Price = total; 
0

価格はおそらく、int型で、プロパティです。一度に1つの値しか保持できません。複数の値を保持する場合は、コレクションを使用する必要があります。価格をリストとして宣言すると、ifステートメントに各価格を追加することができます。次の行に何かがあります。その後

public List<int> Price {get;set;} 

:(次のシナリオでは、その優れた使用するようにスイッチ)

if (lstSpecial.SelectedIndex == 0) 
     { 
      special1.Price.Add(18); 

     } 
     else if (lstSpecial.SelectedIndex == 1) 
     { 

      special1.Price.Add(25); 

     } 
     else if (lstSpecial.SelectedIndex == 2) 
     { 
      special1.Price.Add(40); 

     } 
     else if (lstSpecial.SelectedIndex == 3) 
     { 
      special1.Price.Add(30); 

     } 

あなたが選択したすべての値段を持つことになります。この方法
は次のようにあなたの価格プロパティを宣言します。あなたは使用してそれらをチェックすることができます。

foreach(int p in special1.Price) 
{ 
Console.WriteLine(p); 
} 

私はあなたのクラスの構造についてはよく分からないけど、特別なクラスは、単一の項目を表す場合は、その優れた「特別」のコレクションを持っているし、それらのそれぞれの価格を追加します

関連する問題