我想知道为什么有两种不同的清除列表视图的方法.一个是通过电话listview.clear
,另一个是listview.items.clear
.实际上,这也扩展到许多其他VCL组件.必须使用哪种方法?为什么?
kob*_*bik 21
ListView.Clear
只是周围的包装ListView.Items.Clear
带ListItems.BeginUpdate
/ ListItems.EndUpdate
.看看来源:
procedure TCustomListView.Clear;
begin
FListItems.BeginUpdate;
try
FListItems.Clear;
finally
FListItems.EndUpdate;
end;
end;
Run Code Online (Sandbox Code Playgroud)
来自文档:
BeginUpdate方法暂停屏幕重绘,直到调用EndUpdate方法.使用BeginUpdate加速处理,避免在将项目添加到集合或从集合中删除时闪烁.
更好的做法是使用BeginUpdate
/ EndUpdate
获得速度并避免闪烁.
但使用的主要原因ListView.Clear
是因为使用"高级VCL方法"(由@Arnaud评论)总是一个好主意,并且实现可能会改变(BTW,该方法在D7中引入).
编辑:我已经测试了TListView
用10K项目(D7/WinXP中):
ListView.Items.Clear
:~5500毫秒ListView.Clear
:~330毫秒结论:ListView.Clear
比ListView.Items.Clear
使用BeginUpdate
/ EndUpdate
不使用快约16倍!
归档时间: |
|
查看次数: |
3432 次 |
最近记录: |