C# 清空列表视图
我有一个简单的Windows窗体,其中包含一个名为C# 清空列表视图,c#,.net,winforms,C#,.net,Winforms,我有一个简单的Windows窗体,其中包含一个名为list的ListView对象。在表单上,一个按钮允许我使用list.Items.Clear()单击清空列表。这个很好用 现在我有一个单独的类Test,它的方法update()在表单外部的一些事件上被调用。在构造表单时,我使用SetList方法传递对列表的引用。在调试模式下,对我触发的事件调用update(),并执行其内容,但我的列表未清除 为什么会这样?参考设置正确,我检查过了 class Test { private ListView
list
的ListView
对象。在表单上,一个按钮允许我使用list.Items.Clear()
单击清空列表。这个很好用
现在我有一个单独的类Test
,它的方法update()
在表单外部的一些事件上被调用。在构造表单时,我使用SetList
方法传递对列表的引用。在调试模式下,对我触发的事件调用update()
,并执行其内容,但我的列表未清除
为什么会这样?参考设置正确,我检查过了
class Test
{
private ListView list;
public void setList(ListView list)
{
this.list = list;
}
public void update()
{
this.list.Items.Clear();
}
}
当我通过在update()中放置断点来仔细查看正在修改的列表时,列表将被清理并保持清理状态。这真的好像是另一个列表正在修改,但我只有一个,从来没有做任何新的对它 使用下面修改的
更新方法:
public void update()
{
this.list.Items.Clear();
this.list.Update(); // In case there is databinding
this.list.Refresh(); // Redraw items
}
如果这不起作用,很明显您正在修改列表
对象的另一个实例。在本例中,临时修改对象的声明,如下图所示,并查看是否有任何更改。如果确实如此,则需要检查代码以确保清除列表的正确实例:
private static ListView list;
在我的例子中,我没有使用数据绑定,而是使用add()在循环中显式地添加项。在我看来,ListView.Clear()
和ListView.Items.Clear()
不起作用
事实证明…ListView实际上被清除了,但我没有清除输入列表,所以我实际上是在清除,然后用以前清除的项重新填充ListView
有时候这是最简单的事情…哦 如果通过数据源绑定的项目尝试list.DataSource=null;list.DataBind()代码>我猜它不是。我总是通过this.list.Items.add方法添加这样的代码,95%的几率是您正在清除另一个表单实例的listview,该实例不可见,因为您是使用new而不是visible表单实例创建的。请尝试在this.list.Items.Clear()之后的下一行设置断点
并在调试器中查看项目是否已清除,可能是一些外部代码添加了项目,谁知道应用程序中发生了什么…它是否已清除,但随后立即再次填充?