listBox selectedItem问题

时间:2012-07-19 11:27:31

标签: c# winforms listbox

这很好用:

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]

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

删除对象:

listBox1.Items.Remove(listBox1.SelectedItem);

删除索引处的对象:

listBox1.Items.RemoveAt(5);

没有RemoveRange()方法,这正是您要找的。

答案 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,复数是没有循环就无法处理的集合,单数是它可以理解的单个项目。