C# - 多选列表框更改值

时间:2012-04-22 19:11:52

标签: c# listbox multi-select

我在多选框中有一些字符串,每次用户选择一个值时,它都会相应更新,如下所示:

     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属性只是一个简单的获取和设置。

由于

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

价格是你说的一个属性,可能是int类型。它一次只能容纳一个值。如果要保存多个值,则需要使用集合。您可以将价格声明为列表,然后您就可以在if语句中添加每个价格。以下内容。
声明您的Price属性,如:

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

然后:(在以下场景中最好使用switch)

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

我不确定你的类结构,但如果特殊类代表一个单独的项目,那么最好有一个'特殊'的集合,然后为每个单元添加价格