如何计算ListBox中的重复项并显示旁边的重复项数?

时间:2016-02-24 04:32:15

标签: c# listbox duplicates

所以我有一个按钮,如果你点击它,它会将"Candy"添加到listbox,如果要添加另一个具有相同名称的项目,我该怎么做呢,而不是将它添加到一个新行中,更新第一行以显示x2,3,4等。这是可能的还是我必须创建另一个Listbox并匹配索引?我已尝试使用另一个listbox和一个int变量。

private void btnCandy_Click(object sender, EventArgs e)
    {
        lstProducts.Items.Add("Candy");
        foreach (var item in lstProducts.Items)
        {
            if (item.ToString() == "Candy")
            {
                ++Productcount;
                lstQuantity.Items.Add(Productcount);
                if (Productcount > 1)
                {
                    lstQuantity.Items.Insert(lstProducts.Items.IndexOf("Candy"), Productcount);
                }
            }
        }
    }

3 个答案:

答案 0 :(得分:3)

using System.Text.RegularExpressions;

使用:

private void btnCandy_Click(object sender, EventArgs e)
{
    string query = "Candy";
    bool isExist = false;
    for (int i = 0; i < lstProducts.Items.Count; i++)
    {
        var s = lstProducts.Items[i].ToString();
        if (s.StartsWith(query))
        {
            if (s == query)
            {
                lstProducts.Items[i] = query + "x2";
                isExist = true;
                break;
            }
            else
            {
                // Escape your plain text before use with regex
                var pattern = Regex.Escape(query);
                // Check if s has this formnat: queryx2, queryx3, queryx4, ...
                Match m = Regex.Match(s, "^" + pattern + @"x(\d+)$");
                if (m.Success)
                {
                    lstProducts.Items[i] = query + "x" + (Int32.Parse(m.Groups[1].Value) + 1);
                    isExist = true;
                    break;
                }
            }
        }
    }
    if (!isExist) lstProducts.Items.Add(query);
}

注意:

  • \d表示任何数字(0 - 9)

答案 1 :(得分:0)

我会尝试遍历列表框项目,如果我找到“Candy”,则接受该索引并更新标题。

private void btnCandy_Click(object sender, EventArgs e)
{
    bool found = false;
    foreach (var item in lstProducts.Items)
    {
        if (item.ToString().StartsWith("Candy"))
        {
            // update item title
            found = true;
            break; // no need to continue
        }
    }
    if(!found)
    {
        lstProducts.Items.Add("Candy");
    }
}

这样你就不会添加重复项

答案 2 :(得分:0)

这是一些帮助你的伪代码。将其添加到按钮点击事件:

int i = 0;
foreach (string item in listbox1.Items)
{
     If (item == textbox1.text) //textbox1.text contains the string such as 'candy'
    {
         i++;
         listbox1.Items.Remove(item);
         listbox1.Items.Add(textbox1.text + " " + i.ToString());
    }
}

您可能需要根据需要重置计数器。