delphi 7中<listview.clear>和<listview> .items.clear的区别究竟是什么?</listview> </listview.clear>

时间:2012-04-16 07:02:19

标签: delphi

我想知道为什么有2种不同的清除列表视图的方法。一个是致电listview.clear,另一个是listview.items.clear。实际上,这也扩展到许多其他VCL组件。必须使用哪种方法?为什么?

2 个答案:

答案 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.ClearListView.Clear / ListView.Items.Clear未使用时比BeginUpdate快约16倍!

答案 1 :(得分:1)

ListView.Clear是一种在内部调用ListView.Items.Clear的便捷方法。无论你调用哪两个,都没有语义差异。

我更喜欢第一个,因为它更短,并且没有显示内部表示,此时我对此毫无兴趣。