我想这样做,但是,列表框在每次删除时都会改变,所以即使我试图创建一个新对象,它也会抛出运行时异常。
我试过这样做:
ListBox.SelectedObjectCollection selectedItems = new ListBox.SelectedObjectCollection(lstClientes);
selectedItems = lstClientes.SelectedItems;
if (lstClientes.SelectedIndex != -1)
{
foreach (string s in selectedItems)
lstClientes.Items.Remove(s);
}
else
MessageBox.Show("Debe seleccionar un email");
发布于 2012-10-31 08:24:15
在迭代(使用foreach
)集合时,不能修改集合。相反,使用反向for
循环:
ListBox.SelectedObjectCollection selectedItems = new ListBox.SelectedObjectCollection(lstClientes);
selectedItems = lstClientes.SelectedItems;
if (lstClientes.SelectedIndex != -1)
{
for (int i = selectedItems.Count - 1; i >= 0; i--)
lstClientes.Items.Remove(selectedItems[i]);
}
else
MessageBox.Show("Debe seleccionar un email");
使用反向循环可以确保您在删除它们之后不会跳过它们。
发布于 2012-10-31 08:21:57
selectedItems = lstClientes.SelectedItems;
这一行不会创建新的集合,但会设置对列表框中集合的引用。因此,您正在迭代一个集合,并尝试一次从集合中移除项。这是不可能的
您可以使用此命令,例如:
foreach (string s in lstClientes.SelectedItems.OfType<string>().ToList())
lstClientes.Items.Remove(s);
发布于 2013-08-06 23:41:37
就像这样简单:
while (lst.SelectedItems.Count > 0)
{
lst.Items.Remove(lst.SelectedItems[0]);
}
https://stackoverflow.com/questions/13149486
复制相似问题