我有一个包含两列的列表视图,我正在使用上下文菜单来允许用户删除所选行。要删除所选行,我已尝试使用以下代码,但它不起作用:
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
listView1.SelectedItems.Clear();
}
我怀疑这是因为listview有两列,但我找不到删除所选行的解决方案。删除所有行适用于:listView1.Items.Clear();
。
答案 0 :(得分:5)
BeefTurkey的最新示例看起来是正确的,但他应该在删除所选项目后减少变量i
:
for (int i = 0; i < listView1.Items.Count; i++ )
{
if (listView1.Items[i].Selected)
{
listView1.Items[i].Remove();
i--;
}
}
删除后,大于i
的项目索引减1。因此,您应该重新定位i
以匹配下一个未测试的项目。
答案 1 :(得分:2)
while (listBox1.SelectedItems.Count > 0)
{
listBox1.Items.Remove(listBox1.SelectedItem);
}
答案 2 :(得分:1)
foreach(ListViewItem lvItem in lvDocument.SelectedItems)
{
lvDocument.Items.Remove(lvItem);
}
答案 3 :(得分:0)
这似乎有效:
for (int i = 0; i < listView1.Items.Count; i++ )
{
if (listView1.Items[i].Selected)
{
listView1.Items[i].SubItems.Clear();
}
}
有没有办法删除项目并重新排序listView,以便在其他行的中间没有空行?
答案 4 :(得分:0)
这似乎是一个更好的解决方案:
for (int i = 0; i < listView1.Items.Count; i++ )
{
if (listView1.Items[i].Selected)
{
listView1.Items[i].Remove();
}
}
答案 5 :(得分:0)
你能做什么:
foreach (ListViewItem Item in LstvClients.Items)
{
if (item.Selected)
{
LstvClients.Items.Remove(Item);
}
}
(你的更好,item.Remove())
答案 6 :(得分:0)
我一直在使用与其他产品略有不同的东西来从ListView控件中删除所有选定的项目:
foreach (ListViewItem listViewItem in listView1.SelectedItems)
{
listView1.Items.Remove(listViewItem);
}
我不确定这与大型列表上的其他发布方法在性能方面是如何匹配的,但我认为在不存在问题的情况下看起来更清晰。
答案 7 :(得分:0)
这是删除所有选定项目的正确方法。该方法始终使用索引0访问第一个选定项目并循环,直到不再有选定项目为止。您不能安全地使用绝对索引引用集合内的其他项目,因为一旦删除其中一个项目,索引就会更改。
while( listView1.SelectedItems.Count > 0)
{
listView1.Items.Remove(lvFiles.SelectedItems[0]);
}
答案 8 :(得分:0)
do
{
this.listView1.CheckedItems[0].Remove();
} while (this.listView1.CheckedItems.Count > 0);
效果更好