我试图从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);
}
}
}
答案 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);
}
}
}