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;

        }

这对我来说很好,但是如果用户从列表框中选择超过 1 个值,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 类型。它一次只能保存一个值。如果要保存多个值,则需要使用集合。您可以将价格声明为列表,然后您可以在 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);
}

我不确定你的班级结构,但如果特殊班级代表一个项目,那么最好有一个“特殊”的集合,然后为每个项目添加价格

于 2012-04-22T19:30:43.730 回答