C# - 从列表框中删除所有项目

5

我有一个使用绑定列表作为数据源的 C# Winform,其中包含一个列表框。该列表由计算机上的文本文件创建。我正在尝试为此列表框创建一个“全部删除”按钮,但遇到了一些问题。

首先,这是相关代码:

private void btnRemoveAll_Click(object sender, EventArgs e)
    {
        // Use a binding source to keep the listbox updated with all items
        // that we add
        BindingSource bindingSource = (BindingSource)listBox1.DataSource;

        // There doesn't seem to be a method for purging the entire source,
        // so going to try a workaround using the main list.
        List<string> copy_items = items;
        foreach (String item in copy_items)
        {
            bindingSource.Remove(item);
        }
    }

我尝试使用foreach绑定源,但它会给出枚举错误并且无法工作。据我所知,没有代码可以清除整个源,因此我尝试通过遍历列表本身并通过项名称删除它们,但是这也不起作用,因为foreach实际上返回一个对象或其他东西而不是字符串。
您有如何解决这个问题的建议吗?

你尝试过使用 Clear() 方法吗? - LightStriker
https://dev59.com/0nE85IYBdhLWcg3wyGp_ http://www.java2s.com/Code/CSharp/GUI-Windows-Form/ClearallitemsinaListBox.htm http://www.codeproject.com/Articles/19698/How-to-Move-List-Box-Items-to-another-List-Box-in 尝试阅读这三篇文章。第一篇涉及到如何移除所有 listBox 项目,第二篇是关于清空 listBox 中的所有项,第三篇介绍了如何将 listBox 项目移动到另一个 listBox 中。 - Elyor
@LightStriker,我已经尝试了clear();。 - Eric
@lelyor,由于某些原因,我无法访问所有这些链接,都是404错误。 - Eric
2个回答

14

你可以直接通过输入来完成

listBox1.Items.Clear();

3
如果您将Listbox绑定到使用某些通用列表的BindingSource,则可以执行以下操作:
BindingSource bindingSource = (BindingSource)listBox1.DataSource;
IList SourceList = (IList)bindingSource.List;

SourceList.Clear();

另一方面,在您的表单、视图模型或其他位置保持对底层列表的引用也可以起到同样的作用。
编辑: 仅当您的列表为ObservableCollection时,此方法才有效。对于普通的List,您可以尝试在BindingSource上调用ResetBindings()来强制刷新。

我刚试着使用IList并清空它,但似乎不起作用。它没有报错或其他任何提示,但是没有清除列表中的任何内容。或者说,如果它确实清除了,它也没有更新列表框或绑定。编辑:它没有更新绑定。在点击“全部删除”后添加一个项目,只会在列表中显示该项目。 - Eric
抱歉,只有在基础列表为ObservableCollection的情况下才能正常工作。当访问List属性时,您是否会得到一个IList返回?编辑:Clear()并添加新项后仅看到1个项的事实表明您确实获得了列表 :)请改用ObservableCollection而不是普通列表,或尝试在Bindinglist上调用ResetBindings()。 - Mecaveli
谢谢,ResetBindings() 就是我需要的! - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接