这很好用:
private void btnDelete_Click(object sender, EventArgs e)
{
for (int i = 0; i < listBox1.SelectedItems.Count; i++)
{
listBox1.Items.Remove(listBox1.SelectedItems[i].ToString());
i--;
}
}
但这不起作用:
private void btnDelete_Click(object sender, EventArgs e)
{
listBox1.Items.Remove(listBox1.SelectedItems);
}
为什么第二个btnDelete_Click
无效?我的意思是我用鼠标在listBox1
上选择了一行,然后按下按钮。
.Remove
函数不能识别我选择的行吗?即使我说.Remove(listBox1.SelectedItem)
,是否必须拥有和selectedItem数组? SelectedItems
这个词不是不言自明的吗?自从我用鼠标点击listBox1
上的行后,程序或IDE无法理解选择了哪一行?为什么我仍然必须使用SelectedItems[i]
?
答案 0 :(得分:1)
我认为SelectedItems需要减号。 也许这就是你不能删除任何项目的原因。
答案 1 :(得分:1)
listBox1.SelectedItems
返回所选项目的集合。要删除项目,您只能使用Remove()
传递集合中的单个对象,或使用RemoveAt()
传递集合中对象的索引。
删除对象:
listBox1.Items.Remove(listBox1.SelectedItem);
删除索引处的对象:
listBox1.Items.RemoveAt(5);
没有RemoveRange()方法,这正是您要找的。 p>
答案 2 :(得分:1)
也改变了
for (int i = 0; i < listBox1.SelectedItems.Count; i++)
{
listBox1.Items.Remove(listBox1.SelectedItems[i].ToString());
i--;
}
到
for (int i = (listBox1.SelectedItems.Count - 1); i >= 0; i--)
{
listBox1.Items.Remove(listBox1.SelectedItems[i]);
}
这应该是
listBox1.Items.Remove(listBox1.SelectedItem);
答案 3 :(得分:1)
ListBox.Items.Remove()
要求删除 一个项 ,而ListBox.SelectedItems
会返回 项目集合 < / strong>(SelectedObjectCollection
) - 即使只选择了一个项目!
您可以编写一个扩展方法来删除所有选定的项目:
public static class ListBoxExtension
{
public static void RemoveSelectedItems(this ListBox source)
{
if(source==null) return;
while(source.SelectedItems.Count!=0)
{
source.Items.Remove(source.SelectedItems[0]);
}
}
}
可以这样使用:
this.listbox1.RemoveSelectedItems();
答案 4 :(得分:1)
第二个示例不起作用的原因是因为您尝试以集合的形式传递多个项目以便立即删除。
要删除项目,您需要一次删除一项,这就是 需要 循环的原因。
另外,我建议您使用ListView
吗?我个人发现它们更容易使用更多选项。
例如,您可以使用此
为ListView
创建循环
foreach (ListViewItem item in listView1.SelectedItems)
{
item.Remove();
}
如果您尝试一次只删除一个项目,则执行
listBox1.Items.Remove(listBox1.SelectedItem);
SelectedItem
而不是SelectedItems
,复数是没有循环就无法处理的集合,单数是它可以理解的单个项目。