我想这样做,但是列表框在每次删除时都会更改,因此即使我尝试创建一个新对象,它也会引发运行时异常。

我这样尝试过:

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");

最佳答案

您无法在迭代集合时(使用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");

使用反向循环可确保您在删除它们后不会跳过任何内容。

关于c# - 从列表框中删除所选项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13149486/

10-12 07:10