Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
ВнизУдаление в 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;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.043 c