我想知道为什么有2种不同的清除列表视图的方法。一个是致电listview.clear
,另一个是listview.items.clear
。实际上,这也扩展到许多其他VCL组件。必须使用哪种方法?为什么?
答案 0 :(得分:21)
ListView.Clear
只是ListView.Items.Clear
/ ListItems.BeginUpdate
的{{1}}封装。看看来源:
ListItems.EndUpdate
来自文档:
BeginUpdate方法暂停屏幕重绘,直到EndUpdate 方法被调用。使用BeginUpdate加速处理并避免 将项目添加到集合或从集合中删除时闪烁。
更好的做法是使用procedure TCustomListView.Clear;
begin
FListItems.BeginUpdate;
try
FListItems.Clear;
finally
FListItems.EndUpdate;
end;
end;
/ BeginUpdate
来提高速度并避免闪烁
但使用EndUpdate
的主要原因是因为使用“高级VCL方法”(由@Arnaud评论)总是一个好主意,并且实现可能会改变(BTW,该方法在D7中引入) )。
编辑:我已使用 10k 项目(D7 / WinXP)测试了ListView.Clear
:
TListView
:~5500 ms ListView.Items.Clear
:~330 ms 结论:ListView.Clear
在ListView.Clear
/ ListView.Items.Clear
未使用时比BeginUpdate
快约16倍!
答案 1 :(得分:1)
ListView.Clear
是一种在内部调用ListView.Items.Clear
的便捷方法。无论你调用哪两个,都没有语义差异。
我更喜欢第一个,因为它更短,并且没有显示内部表示,此时我对此毫无兴趣。