C#列表框复制不移动

时间:2016-02-02 20:50:22

标签: c# listbox listboxitems

我需要将Listbox1中的项目复制到Listbox2。我正在使用此MOVE代码段。对于单个项目(btnAdd1),我只是注释掉了'删除'线和所有工作按预期。但是对于多重选择(btnAdd2),如果我注释掉了'删除'该程序挂起...然而,如果我把它留下来,它的工作原理。有什么想法吗?

private void btnAdd1_Click_1(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex == -1)
        {
            MessageBox.Show("Please Select an Item");
        }
        else
        {
            if (!listBox2.Items.Contains(listBox1.SelectedItem))
            {
                listBox2.Items.Add(listBox1.SelectedItem);
            }
         }
    }

    private void btnAdd2_Click(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex == -1)
        {
            MessageBox.Show("Please Select Multiple Items");
        }
        else
        {
            while(listBox1.SelectedItems.Count != 0)
            {
                if (!listBox2.Items.Contains(listBox1.SelectedItem))
                {
                    listBox2.Items.Add(listBox1.SelectedItems[0]);
                    // If this line is missing, the program hangs
                    listBox1.Items.Remove(listBox1.SelectedItems[0]);
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

你有一个while循环。如果删除该行,则while循环的条件将为true。 你的代码应该是这样的:

foreach(var item in listbox1.SelectedItems)
if (!listbox2.items.contain(item)
    listbox2.items.add(item);

答案 1 :(得分:0)

谢谢大家,我已经采用了其中的一些方法,现在一切正常,就像我想要的那样。这是最终的代码。

private void btnAdd2_Click(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex == -1)
        {
            MessageBox.Show("Please Select Multiple Items");
        }
        else
        {
            if (!listBox2.Items.Contains(listBox1.SelectedItem))
            {
                foreach (var item in listBox1.SelectedItems)
                {
                    listBox2.Items.Add(item);
                }
            }
        }
    }