0

複数選択ボックスにいくつかの文字列があり、ユーザーが値を選択するたびに、それに応じて次のように更新されます。

     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;

        }

それは私にとっては問題なく機能しますが、ユーザーがリストボックスから複数の値を選択した場合に、Special1.Priceが各値を個別に保存するようにするにはどうすればよいですか?2つ以上を選択しようとすると、最後に選択した値で値が上書きされることがわかりました。

Priceプロパティは、単純な取得と設定です。

ありがとう

4

2 に答える 2

1

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

if-else if... 配列名の価格を使用すると、記述がはるかに簡単になり、必要に応じて拡張する方がはるかに優れています(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;
于 2012-04-22T19:55:17.807 に答える
0

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

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);
}

クラス構造についてはわかりませんが、特別なクラスが単一のアイテムを表す場合は、「特別な」のコレクションを持ち、それぞれに価格を追加することをお勧めします

于 2012-04-22T19:30:43.730 に答える