如果单击添加按钮,是否有一种方法可以使列表框显示一个项目有多个,而没有两行具有相同的项目?

Is there a way to make a list box show that there are multiples of one item without having two rows with the same item if an add button is clicked?

举例说明: 我有三个项目,每个项目都有一个添加按钮,用于在列表框中显示项目的名称。如果我点击添加它会显示该项目一次,如果我再次点击添加它会在列表框中显示该项目两次。这就是点击事件处理程序下的这个简单代码-

ListBox.Items.Add("ItemName");

有没有一种方法可以让我对按钮或列表框进行编码,而不是显示重复行,以便在添加两次或更多项时显示 "x2" 或类似内容?

我正在使用 C# 和 windows 表单应用程序。

如果是我,我会创建一个自定义 class(比如 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 是否已经在列表框中。

这可能是我的方式:

    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");
    }

希望对您有所帮助!