如果项目存在于另一个ListBox中,则从ListBox中删除项目

时间:2014-02-10 18:36:28

标签: c# listbox

我试图从ListBox中删除数字项,如果这些值存在于另一个ListBox中。我的代码似乎不起作用,我找不到任何在线帮助。 ListBox1由Array填充,ListBox2从DataSet表(fyi)填充。

另外供参考:我没有添加项目到列表框或选择...只是想比较它们并从ListBox1中删除ListBox2项目,如果它们全部存在,只需按一下按钮即可。谢谢,

private void button1_Click(object sender, EventArgs e)
{
    foreach (int item in listBox1.Items)
    {
        if (listBox2.Items.Contains(item))
        {
            listBox1.Items.Remove(item);
        }
    }
}

2 个答案:

答案 0 :(得分:5)

嗯,你只在代码中引用一个列表框 - 我怀疑你会想要:

private void button1_Click(object sender,EventArgs e){

foreach (int item in listBox1.Items)
{
    if (listBox2.Items.Contains(item))   // notice change of reference
    {
        listBox1.Items.Remove(item);
    }
}

但是,当您在迭代它的项目时修改ListBox时,这会导致错误。安全删除项目的一种方法是在集合上向后迭代

for (int i = listBox1.Items.Count - 1; i >= 0; i--)
{
    int item = listBox1.Items[i];
    if (listBox2.Items.Contains(item))   // notice change of reference
    {
        listBox1.Items.RemoveAt(i);
    }
}

答案 1 :(得分:2)

@D Stanley

感谢您的帮助和解释。 @Yuriy - 谢谢你的澄清,

  

i> = 0

效果很好。我还将listbox转换为int32。以下是完整的代码:

    private void button1_Click(object sender, EventArgs e)
    {

        for (int i = listBox1.Items.Count - 1; i>= 0; i--)
        {
            int item = Convert.ToInt32(listBox1.Items[i]);
            if (listBox2.Items.Contains(item))
            {
                listBox1.Items.Remove(item);
            }
        }

    }