我想这样做但是,列表框会在每次删除时发生更改,因此即使我尝试执行新对象,它也会引发运行时异常.
我试过这样的:
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");
Run Code Online (Sandbox Code Playgroud)
Pat*_*irk 31
foreach
通过它迭代(使用a )时无法修改集合.而是使用反向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");
Run Code Online (Sandbox Code Playgroud)
使用反向循环可确保您在删除后不会跳过任何内容.
selectedItems = lstClientes.SelectedItems;
Run Code Online (Sandbox Code Playgroud)
此行不会创建新集合,但会设置对列表框中的集合的引用.因此,您正在遍历集合并尝试立即从中删除项目.这不可能
你可以使用它,例如:
foreach (string s in lstClientes.SelectedItems.OfType<string>().ToList())
lstClientes.Items.Remove(s);
Run Code Online (Sandbox Code Playgroud)
简单就像这样:
while (lst.SelectedItems.Count > 0)
{
lst.Items.Remove(lst.SelectedItems[0]);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
lst.Items.Remove(lst.Items[lst.SelectedIndex]);
Run Code Online (Sandbox Code Playgroud)
如果您不想循环,可以使用它
注意:这只适用于删除 1 个项目(多选只会删除第一个选定的项目)
归档时间: |
|
查看次数: |
71907 次 |
最近记录: |