What exactly is the difference between <listview.Clear> and <listview>.items.clear in delphi 7?
delphi
Solution
`ListView.Clear` is just a wrapper around `ListView.Items.Clear` with `ListItems.BeginUpdate`/`ListItems.EndUpdate`. look at the source:
procedure TCustomListView.Clear;
begin
FListItems.BeginUpdate;
try
FListItems.Clear;
finally
FListItems.EndUpdate;
end;
end;
From the docs:
The BeginUpdate method suspends screen repainting until the EndUpdate method is called. Use BeginUpdate to speed processing and avoid flicker while items are added to or deleted from a collection.
A better practice is to use `BeginUpdate`/`EndUpdate` for speed and avoiding flicker. But the main reason to use `ListView.Clear` is because using a "high-level VCL methods" (As well commented by @Arnaud) is always a good idea, and the implementation might change (BTW, the method was introduced in D7).
EDIT: I have tested the `TListView` with 10k Items (D7/WinXP):
- `ListView.Items.Clear`: ~5500 ms
- `ListView.Clear`: ~330 ms
Conclusion: `ListView.Clear` is about 16 times faster than `ListView.Items.Clear` when `BeginUpdate`/`EndUpdate` is not used!
Problem
I would like to know why are there 2 different ways of clearing out a listview. One is by calling `listview.clear` and other is `listview.items.clear`. Actually, this extends to many other VCL components too. which method must be used and why?