2

这工作正常:

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]

4

5 回答 5

1

我认为 SelectedItems 需要索引号。也许这就是你不能删除任何项目的原因。

于 2012-07-19T11:29:07.063 回答
1

ListBox.Items.Remove()期望删除一个项目,同时ListBox.SelectedItems返回项目集合( 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();
于 2012-07-19T11:41:21.527 回答
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);
于 2012-07-19T11:33:58.113 回答
1

listBox1.SelectedItems返回所选项目的集合。要删除项目,您只能使用 传入集合中的单个对象Remove(),或者使用 为集合中的对象提供索引RemoveAt()

移除一个对象:

listBox1.Items.Remove(listBox1.SelectedItem);

删除索引处的对象:

listBox1.Items.RemoveAt(5);

没有您正在寻找的 RemoveRange() 方法。

于 2012-07-19T11:32:10.653 回答
1

第二个示例不起作用的原因是因为您试图以集合的形式传递多个项目,以便一次删除。

要删除一个项目,您需要一次完成一个,因此您需要一个循环。

另外,我可以建议使用 aListView代替吗?我个人发现它们更容易使用更多的选项。

例如,你可以ListView用这个来制作你的循环

foreach (ListViewItem item in listView1.SelectedItems)
{
    item.Remove();
}

如果您尝试一次只删除一个被选中的项目,那么您可以

listBox1.Items.Remove(listBox1.SelectedItem);

SelectedItem而不是SelectedItems,复数是它没有循环就无法处理的集合,单数是它可以理解的单个项目。

于 2012-07-19T11:59:25.237 回答