Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Правильно ли так чистить TListView? / 7 сообщений из 7, страница 1 из 1
25.12.2020, 13:15
    #40031096
Страдалецъ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильно ли так чистить TListView?
Для обычного 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
25.12.2020, 13:29
    #40031102
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильно ли так чистить TListView?
СтрадалецъОн работает, но может так неправильно делать или вообще я зря это делаю?

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

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

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


Вот эта строчка лезет в память по адресу Pointer(Item.Data) - X, а что будет если это не класс, а, например, TObject(число)?..
...
Рейтинг: 0 / 0
28.12.2020, 12:59
    #40031748
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильно ли так чистить TListView?
Если у вас в 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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Правильно ли так чистить TListView? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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