有没有办法让一个列表框显示,如果单击一个添加按钮,有一个项目没有两行同一项目的倍数?

问题描述:

举例说明: 我有三个项目,每个项目都有一个添加按钮,用于在列表框中显示该项目的名称。如果我点击添加它会显示该项目一次,如果我再次点击添加它会显示项目两次列表框中。这与click事件下这个简单的代码handler-有没有办法让一个列表框显示,如果单击一个添加按钮,有一个项目没有两行同一项目的倍数?

ListBox.Items.Add("ItemName"); 

有没有一种方法,我可以编写按钮或列表框,而不是显示重复的线条,展现出“X2”或类似的东西,当一个项目被添加两次或更多?

我正在使用C#和Windows窗体应用程序。

+0

如果您已经有'x 2',如果您添加名为'x 2'的新项目会怎么样?我更喜欢ListView。 –

这可能是我会来那个方式:

private readonly Dictionary<string, int> _dict = new Dictionary<string, int>(); 

    private void AddNewItem(string item) 
    { 
     if (_dict.ContainsKey(item)) _dict[item]++; 
     else _dict.Add(item,1); 
     listBox1.Items.Clear(); 
     foreach (KeyValuePair<string, int> kvp in _dict) 
     { 
      if (kvp.Value > 1) listBox1.Items.Add(kvp.Key + " X" + kvp.Value); 
      else listBox1.Items.Add(kvp.Key); 
     } 
    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
     AddNewItem("ItemName"); 
    } 

希望这有助于!

如果是我,我会创建一个自定义类(例如,CountableItem)并给它数量和名称字段。然后,我们可以覆盖ToString()方法来确定将在ListBox中显示的内容。

事情是这样的:

internal class CountableItem 
{ 
    private string _itemName; 
    private int _count; 

    public CountableItem(string itemName) 
    { 
     _itemName = itemName; 
     _count = 1; 
    } 

    public void Increment() 
    { 
     _count++; 
    } 

    public override string ToString() 
    { 
     return String.Format("{0} x {1}", _itemName, _count); 
    } 
} 

可以的CountableItem实例添加到列表框,然后使用Increment()方法来增加数量。

您当然需要逻辑来确定给定的CountableItem是否已经在列表框中。