0

Удаление срабатывает визуально, но при сохранении и загрузке (ini) как будто удаления не было.

Удаление:

j:=0;
For i := 0 to ListView1.Items.Count-1 do begin
if ListView1.Items[i].SubItems[j]='' then
ListView1.Items.Item[i].Delete;
end;

Сохранение:

var
  Ini: Tinifile;
  ListItem: TListItem;
  i: integer;
  n: String;
begin
Ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'\file.ini');
for i:= 0 to ListView1.Items.Count  -1 do
  begin
    listitem := ListView1.Items[i];
    n := 'l' + IntToStr(i) + '.';
    Ini.WriteString('Section', n + '#',listitem.Caption);
    Ini.WriteString('Section', n + 'Столбик 2',listitem.SubItems.Strings[0]);
    Ini.WriteString('Section', n + 'Столбик 3',listitem.SubItems.Strings[1]);
    Ini.WriteString('Section', n + 'Столбик 4',listitem.SubItems.Strings[2]);
    Ini.WriteString('Section', n + 'Столбик 5',listitem.SubItems.Strings[3]);
    Ini.WriteString('Section', n + 'Столбик 6',listitem.SubItems.Strings[4]);

  end;
  Ini.Free;
end;
1
  • Все должно сохраняться. Предполагаю что ListView вы заполнили в дизайнере и либо не делаете загрузку содержимого ListView из файла при старте программы, либо что-то в вашей загрузке работает не так. Покажите как у вас происходит загрузка из файла. 26 июн 2014 в 13:31

1 ответ 1

0

И еще хорошо бы почистить INI-файл перед сохранением. И удаление элементов нужно делать с конца, т.к. если у вас будет 3 элемента и 1-ый или 2-ой вы удалите, то на третьем у вас будет AV, потому что после первого удаления 3-ий станет 2-ым, а 3-его уже не будет.

for i := ListView1.Items.Count - 1 downto 0 do
begin
  {проверка длины строки работает быстрее чем сравнение строк}
  if Length(ListView1.Items[i].SubItems[j]) = 0 then
    ListView1.Items[i].Delete;
end;
1
  • 1
    Да, действительно. Очистка ini решила проблему. Премного благодарен! 26 июн 2014 в 14:15

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.