Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.23;
Скачать: CL | DM;

Вниз

ListView2.Items.Delete   Найти похожие ветки 

 
Zalumhan ©   (2008-10-15 11:12) [0]

У меня такая проблема. Нужно из ListView удалить те строки, которые удовлетворяют условию [Code]StrToInt(listView2.Items[i].Caption) < 10[/Code].
Если делать так:
[Code]
begin
   for i:=0 to ListView.Items.Count-1 do
   begin
    if StrToInt(listView2.Items[i].Caption) < 10 then
    begin
      ListView2.Items.Delete(i);
    end;
   end;
end;[/Code], то будут удаляться не все нужные строки,т.к. после первого удаления номера строк поменяются(т.е.первоначально 1-я строка станет 0-ой,...5-я станет 4-й и т.д.).
Т.е. мне нужно что-то типа такого:
[Code]
begin
   j:=0;
   for i:=j to ListView.Items.Count-1 do
   begin
    if StrToInt(listView2.Items[i].Caption) < 10 then
    begin
      ListView2.Items.Delete(i);
      j:=i;
    end;
   end;
end;[/Code], но этот код тоже неправильно работает.


 
Cosinus   (2008-10-15 11:17) [1]

Как вариант, копировать все нужные строки в TempListView, потом полная очистка твоего ListView и обратно.


 
Плохиш ©   (2008-10-15 11:22) [2]


> Zalumhan ©   (15.10.08 11:12)  

Используй вместо for .. to .. вариант for .. downto ..


 
Ega23 ©   (2008-10-15 11:54) [3]


> Как вариант, копировать все нужные строки в TempListView,
>  потом полная очистка твоего ListView и обратно.


Застрелись, советчик.

for i:=0 to ListView.Items.Count-1 do
  begin
   if StrToInt(listView2.Items[i].Caption) < 10 then
   begin
     ListView2.Items.Delete(i);
   end;


Такой for тут нельзя использовать. Либо как Плохиш сказал,
for i:=ListView.Items.Count-1 downto 0 do
либо while с условием.


 
Cosinus   (2008-10-15 12:05) [4]


> Ega23 ©   (15.10.08 11:54) [3]

Вы абсолютно правы. Downto - это первое, что мне пришло в голову, но прикинув в голове (как оказалось, криво), решил, что так тоже не прокатит. Полностью признаю, что ступил. Тем более, что всегда делал, как предложил Плохиш (глянул в проекты).


 
Ega23 ©   (2008-10-15 12:08) [5]


> о прикинув в голове (как оказалось, криво), решил, что так
> тоже не прокатит.


Ради интереса, можно посмотреть на варианты реализации методов Delete и Clear для различных списков.


 
Zalumhan ©   (2008-10-15 13:41) [6]

Спасибо за
for i:=ListView.Items.Count-1 downto 0 do
Работает!



Страницы: 1 вся ветка

Текущий архив: 2008.11.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
2-1223802966
@!!ex
2008-10-12 13:16
2008.11.23
Если ли у процсса кнопка на таскбаре?


2-1224079903
Дмитрий
2008-10-15 18:11
2008.11.23
Определить, когда форма УЖЕ развёрнута


2-1223561533
Виталий_2
2008-10-09 18:12
2008.11.23
Снимок области экрана


2-1223738842
Andrew
2008-10-11 19:27
2008.11.23
Как правильно скопировать строки


2-1224054082
cosinus@bk.ru
2008-10-15 11:01
2008.11.23
Вывод из неконсольного приложения в консоль...