首页 文章

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

提问于
浏览
2

我试图从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 回答

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

相关问题