Vb.net 如何有效地在ListView的开头插入多行?
我有一个ListView和一组ListViewItem。我只想在列表视图的顶部插入集合中的所有项 目前,我是这样做的:Vb.net 如何有效地在ListView的开头插入多行?,vb.net,winforms,Vb.net,Winforms,我有一个ListView和一组ListViewItem。我只想在列表视图的顶部插入集合中的所有项 目前,我是这样做的: CollectionFlistViewItems.Sort(新的CustomComparer(SortOrder.Descending)) 对于CollectionFlistViewItems中的每个lvi作为ListViewItem TargetListView.Items.Insert(0,lvi) 下一个 由于每个插入操作都将移动ListView中的所有项,因此每个插入
CollectionFlistViewItems.Sort(新的CustomComparer(SortOrder.Descending))
对于CollectionFlistViewItems中的每个lvi作为ListViewItem
TargetListView.Items.Insert(0,lvi)
下一个
由于每个插入操作都将移动ListView中的所有项,因此每个插入操作都将花费O(n)时间,这似乎有点浪费
有没有更好的方法可以做到这一点?请注意,我知道但不幸的是,该方法不适用于集合
ListView.Items
无论您是追加还是插入项目,每当您对ListView进行重大更改时,都应该在进行更改之前调用BeginUpdate()
,然后在进行更改之后调用EndUpdate()
。这将阻止ListView直观地更新其项(这是花费时间最多的部分)
您的代码应该如下所示:
TargetListView.BeginUpdate()
For Each lvi As ListViewItem In CollectionOfListViewItems
TargetListView.Items.Insert(0, lvi)
Next
TargetListView.EndUpdate()
参考资料:
- : 防止控件在调用方法之前绘制
InsertRange()
而不是AddRange()
。@Burhan啊,好的。不管怎样,答案都是一样的。使用BeginUpdate()
和EndUpdate()
可以显著缩短执行循环所需的时间。