我现在有两个列表框,lstStock和lstSupply。 lstSupply由
组成-Pen
-Pencil
-Staple
-Stapler
-Folder
-Notebook
-Eraser
-Marker
我有两个按钮,一个名为btnAdd的按钮和另一个btnRemove。
当我点击btnAdd时,我希望将lstSupply中的所选项目添加到我已完成的lstStock中
lstStock.Item.Add(lstSupply.SelectedItem);
如果我在lstSupply中选择相同的项目两次,我希望它在lstStock中合并。 例如,如果我选择笔两次,列表框将给我“笔x 2”而不是笔在一行中,另一笔在另一行。 我觉得这与foreach有关,但我真的不知道如何使用它。
答案 0 :(得分: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>();
然后,当您点击“添加”时,您会做两件事:
遍历_items
以查看匹配供应中是否已存在库存商品。创建一个,如果它不存在则添加它。
在_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());
}
还有很多其他方法可以解决这个问题,但对于这个简单的练习,我认为我会这样做。
答案 1 :(得分:0)
如果您希望代码在没有额外编码的情况下工作,您可以简单地执行此操作:
if (lstSupply.SelectedIndex > -1 && !lstStock.Items.Contains(lstSupply.SelectedItem))
lstStock.Items.Add(lstSupply.SelectedItem);
通过这种方式,您可以确保不添加空项目并在最大时间添加每个项目