我尝试使用RemoveAt()
方法从列表视图中删除特定项目。但当我第一次删除它时,一些物品会留下来。
例如:见下图
代码:
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].SubItems[0].Text == "A1")
{
listView1.Items.RemoveAt(i);
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
for(int i = 0; i<3; i++)
{
ListViewItem lvi = new ListViewItem("A1");
lvi.SubItems.AddRange(new string[] {"desc" + i.ToString(), i.ToString()});
listView1.Items.Add(lvi);
}
for (int i = 0; i < 2; i++)
{
ListViewItem lvi = new ListViewItem("A2");
lvi.SubItems.AddRange(new string[] { "desc" + i.ToString(), i.ToString() });
listView1.Items.Add(lvi);
}
}
答案 0 :(得分:5)
请参阅备注部分中的MSDN。
从中移除项目时 集合,索引改变了 集合中的后续项目。 有关已删除项目的所有信息 被删除。您可以使用此方法 从中删除特定项目 通过指定索引来收集 要从中删除的项目 采集。要指定项目 删除而不是索引 item,使用Remove方法。去除 集合中的所有项目,使用 清晰的方法。
修改:请参阅Moot的回答。上面的链接/参考也适用于他/她的答案。
编辑2:
如果找到匹配项,只需将计数器放回原位。
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].SubItems[0].Text == "A1")
{
listView1.Items.RemoveAt(i);
i--; // Back counter up one
}
}
答案 1 :(得分:4)
删除第一个A1时,列表缩小,1和2处的元素成为0和1处的元素。因此,当循环递增时,它会删除1处的A1(第三个)并跳过一个向下移动到0。
答案 2 :(得分:2)
执行以下操作:
private void button1_Click(object sender, EventArgs e)
{
var itemsToRemove = new List<ListViewItem>();
foreach (ListViewItem item in listView1.Items)
{
if (item.SubItems[0].Text == "A1")
itemsToRemove.Add(item);
}
foreach (var item in itemsToRemove)
listView1.Items.Remove(item);
}
祝你好运!