【问题标题】:C# - Multi Select List Box changing valuesC# - 多选列表框更改值
【发布时间】:2012-04-22 19:11:52
【问题描述】:

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

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

谢谢

【问题讨论】:

  • ...让 Price 成为一个数组或 List 可以实际处理多个值?此外,您可能想使用switch statement
  • 将列表框的 SelectionMode 属性更改为“One”。因为允许用户选择多个项目没有意义。

标签: c# listbox multi-select


【解决方案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;

【讨论】:

    【解决方案2】:

    价格是您所说的属性,可能是 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);
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多