Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使listbox项不会在C中复制到listbox的下一行_C#_Winforms_Listbox - Fatal编程技术网

C# 如何使listbox项不会在C中复制到listbox的下一行

C# 如何使listbox项不会在C中复制到listbox的下一行,c#,winforms,listbox,C#,Winforms,Listbox,因此,我通过单击图像在列表框中添加一个项目。 如果多次单击或添加该项,它会将自身复制到列表框的下一行。我想要的是该项有一个计数器,用于计算它被单击的实例数 以下是我目前的代码: int ctr = 1; private void item_img1_Click(object sender, EventArgs e) { if (!orderList.Items.Contains(item1.Text)) {

因此,我通过单击图像在列表框中添加一个项目。 如果多次单击或添加该项,它会将自身复制到列表框的下一行。我想要的是该项有一个计数器,用于计算它被单击的实例数

以下是我目前的代码:

int ctr = 1;
 private void item_img1_Click(object sender, EventArgs e)
        {

            if (!orderList.Items.Contains(item1.Text))
            {
                orderList.Items.Add(item1.Text + ctr);
                ctr++;
            }

        } 

请注意,您实际上并没有添加item1.Text;您正在添加item1.Text+ctr。这就是为什么if子句不能阻止您添加重复项。

使用以下代码:

class ItemWrapper
{
    public object item;
    public string text;
    public int ctr = 1;
    public override string ToString()
    {
        return text + " (" + ctr + ")";
    }
}

private void item_img1_Click(object sender, EventArgs e)
{
    bool found = false;
    foreach (var itm in orderList.Items)
        if ((itm as ItemWrapper).text == item1.Text)
        {
            (itm as ItemWrapper).ctr++;
            found = true;
            break;
        }
    if (!found)
        orderList.Items.Add(new ItemWrapper() { item = item1, text = item1.Text, ctr = 1 });
}

其中ItemWrapper是item对象的包装器,覆盖其中的ToString方法允许listBox将对象显示为您定义的格式。

如果您希望只允许添加此图像类型的一个项目,为什么不在成功添加第一个实例后删除click事件?