Пример для пояснения: у меня есть три элемента, у каждого из которых есть кнопка добавления, чтобы показать название элемента в списке. Если я нажму «Добавить», он покажет элемент один раз, если я нажму «Добавить», он дважды покажет элемент в списке. То есть с этим простым кодом под обработчиком события click-

ListBox.Items.Add("ItemName");

Есть ли способ, которым я могу кодировать кнопку или список, чтобы вместо отображения повторяющихся строк отображать «x2» или что-то подобное, когда элемент добавляется дважды или более?

Я использую C # и приложение Windows Form.

0
Confused 25 Апр 2017 в 04:40

2 ответа

Лучший ответ

Это, вероятно, способ, которым я пришел бы к этому:

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

Надеюсь это поможет!

0
Jim Simson 25 Апр 2017 в 03:02

Если бы это был я, я бы создал собственный класс (скажем, 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 в ListBox.

2
Luke Joshua Park 25 Апр 2017 в 02:19
43600222