powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Правильно ли так чистить TListView?
7 сообщений из 7, страница 1 из 1
Правильно ли так чистить TListView?
    #40031096
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для обычного ListView используется метоl Clear, но он не трогает свойство Items[i].Data, т.к. не знает что за данные в нем лежат, т.е. чистить должен пользователь. Я решил сделать хелпер который этим займется, вот что вышло:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Type
  TListHelper = class helper for TListView
   procedure Clear;
  end;

procedure TListHelper.Clear;
var
  Item: TListItem;
begin
 for Item in Items
 do if Assigned(Item.Data)
    then if TObject(Item.Data) is TUserData
         then TUserData(Item.Data).Free;
 inherited Clear;
end;


Он работает, но может так неправильно делать или вообще я зря это делаю?
...
Рейтинг: 0 / 0
Правильно ли так чистить TListView?
    #40031102
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъОн работает, но может так неправильно делать или вообще я зря это делаю?

Зря. В твоём приложении проще написать одну строчку в TListView.OnDelete, а любое другое
твой хэлпер будет крашить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильно ли так чистить TListView?
    #40031103
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет TListView.OnDelete возможно и лучше, но и так не крашится. А с чего вдруг? Там вроде все проверяется, даже если просто число завернуть в объект, все равно будет объект.
...
Рейтинг: 0 / 0
Правильно ли так чистить TListView?
    #40031104
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъА с чего вдруг? Там вроде все проверяется, даже если просто число завернуть в объект, все
равно будет объект.

А если не заворачивать, а прямо привести?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильно ли так чистить TListView?
    #40031136
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если не заворачивать, а прямо привести?..
Убедили, не стоит как хэлпер это делать, в крайнем случае, исключительно для своего приложения, а городить огород, что-бы убедиться, что это именно потомок объекта тоже смысла нет.
Тему можно закрыть. Спасибо.
...
Рейтинг: 0 / 0
Правильно ли так чистить TListView?
    #40031205
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ,

Код: pascal
1.
if TObject(Item.Data) is TUserData


Вот эта строчка лезет в память по адресу Pointer(Item.Data) - X, а что будет если это не класс, а, например, TObject(число)?..
...
Рейтинг: 0 / 0
Правильно ли так чистить TListView?
    #40031748
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у вас в Data лежат только объекты, то достаточно такого кода
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TListHelper.Clear;
var
  Item: TListItem;
begin
  for Item in Items do 
    Item.Data.Free;
 inherited Clear;
end;

Но там могут лежать не только объекты и про OnDelete уже говорили
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Правильно ли так чистить TListView?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]