0

我现在有两个列表框,lstStock 和 lstSupply。lstSupply 包括

-Pen
-Pencil
-Staple
-Stapler
-Folder
-Notebook
-Eraser
-Marker

我有两个按钮,一个名为 btnAdd 的按钮和另一个名为 btnRemove 的按钮。

当我单击 btnAdd 时,我希望将 lstSupply 中的选定项目添加到我已经完成的 lstock 中

    lstStock.Item.Add(lstSupply.SelectedItem);

如果我在 lstSupply 中选择了两次相同的项目,我希望将其合并到 lstStock 中。例如,如果我选择 Pen 两次,列表框将给我“Pen x 2”,而不是一行中的 Pen 和另一行中的另一个 Pen。我感觉这是在处理 foreach,但我真的不知道如何使用它。

4

2 回答 2

1

好的,首先,您将需要在其中存储其他内容,lstStock. 我建议您这样做:

public class StockItem {
    public string Name { get; set; }
    public int Count { get; set; }
}

接下来,我建议您不要将该.Items字段用作存储库存项目的实际容器。相反,我会在刷新时List<StockItem>使用它来填充。lstSupply

private List<StockItem> _items = new List<StockItem>();

然后,当您单击“添加”时,您会做两件事:

  1. 遍历_items以查看匹配供应中是否已经存在库存项目。创建一个,并添加它,如果它不存在。

  2. 在 中找到匹配的库存项目_items并增加其Count.

为了让它以你想要的方式显示,我们可以ToString()在我们的StockItem类中重写:

public class StockItem {
    public string Name { get; set; }
    public int Count { get; set; }

    public override string ToString() {
        if (Count > 1)
            return Name + " x" + Count;
        return Name;
    } 
}

最后,无论何时进行任何更改,您只需重新填充lstStock

private void RefreshGui() {
    lstStock.Items.Clear();
    lstStock.Items.AddRange(_items.ToArray());
}

有很多其他方法可以解决这个问题,但对于这个简单的练习,我认为我会这样做。

于 2012-07-22T18:54:39.013 回答
0

如果您希望代码在没有额外编码的情况下工作,您可以简单地执行以下操作:

if (lstSupply.SelectedIndex > -1 && !lstStock.Items.Contains(lstSupply.SelectedItem))
        lstStock.Items.Add(lstSupply.SelectedItem);

这样你就可以确定你不会添加空项目,并且每个项目最多添加一次。

于 2012-07-22T21:12:16.197 回答