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

Вниз

Удаление в ListView   Найти похожие ветки 

 
Kolya   (2006-01-06 04:30) [0]

Привет! Я использую следующее:

for i:=1 to spPlayListListView1.Items.Count-1 do
begin
   if not FileExists(spPlayListListView1.Items[i].Caption) then
   spPlayListListView1.Items.Delete(i);

для удаления из списка несуществующих файлов. При нажатии удалить возникает ошибка Access violation. Как написать правильно? Может, дело в колонках (их у меня 3)?


 
Almaz ©   (2006-01-06 06:14) [1]


> При нажатии удалить возникает ошибка Access violation. Как
> написать правильно? Может, дело в колонках (их у меня 3)?

Правильно, что возникает. Дело в том, что количество итераций цикла рассчитывается один раз - перед началом цикла. Теперь представте, что вы удалили несколько записей - тогда spPlayListListView1.Items.Count уменьшится, однако цикл повторится столько раз, сколько записей было на момент его начала - пройдясь по уже несуществующим записям. Отсюда и ошибка.
Решение ее предельно просто - сделать цикл не на возрастание, а на убывание, т.е.

for i:=spPlayListListView1.Items.Count-1 downto 0 do
begin
  if not FileExists(spPlayListListView1.Items[i].Caption) then
  spPlayListListView1.Items.Delete(i);


И еще, обратите внимание - индекс элементов начинается с нуля, а не 1.

Удачи.



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

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

Наверх




Память: 0.46 MB
Время: 0.049 c
10-1111786286
Grey_F_O_X
2005-03-26 00:31
2006.01.22
Проверка письма в outlook перед прочтением


5-1122036485
DimaBr
2005-07-22 16:48
2006.01.22
Handle компонента


2-1135758308
Tomkat
2005-12-28 11:25
2006.01.22
модульное приложение


4-1131705864
Eraser
2005-11-11 13:44
2006.01.22
Разрешения в winNT/2K/XP


2-1136447864
Zhekson
2006-01-05 10:57
2006.01.22
Как сделать добавление недостающей части слова на подобие IE?