首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从列表框中删除所选项目

从列表框中删除所选项目
EN

Stack Overflow用户
提问于 2012-10-31 08:16:49
回答 9查看 96.1K关注 0票数 23

我想这样做,但是,列表框在每次删除时都会改变,所以即使我试图创建一个新对象,它也会抛出运行时异常。

我试过这样做:

代码语言:javascript
复制
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");
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-10-31 08:24:15

在迭代(使用foreach)集合时,不能修改集合。相反,使用反向for循环:

代码语言:javascript
复制
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");

使用反向循环可以确保您在删除它们之后不会跳过它们。

票数 40
EN

Stack Overflow用户

发布于 2012-10-31 08:21:57

代码语言:javascript
复制
selectedItems = lstClientes.SelectedItems;

这一行不会创建新的集合,但会设置对列表框中集合的引用。因此,您正在迭代一个集合,并尝试一次从集合中移除项。这是不可能的

您可以使用此命令,例如:

代码语言:javascript
复制
foreach (string s in lstClientes.SelectedItems.OfType<string>().ToList())
   lstClientes.Items.Remove(s);
票数 9
EN

Stack Overflow用户

发布于 2013-08-06 23:41:37

就像这样简单:

代码语言:javascript
复制
while (lst.SelectedItems.Count > 0)
{
   lst.Items.Remove(lst.SelectedItems[0]);
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13149486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档