|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Проблемы при удалении строк с Listview1
Всем привет - В чем проблема - почему не удаляеться выбранные
Код:
var i:integer; begin for i:=0 to ListView1.Items.Count-1 do if ListView1.Items[i].Checked then begin listview1.Items.Delete(i); end; end; При удалении выдает ощибку Access violation at address 00443F78 in module 'Project1.exe'. Read of address 00000004. |
#2
|
|||
|
|||
Если не ошибаюсь то проблема вообще не в этой процедуре..Попробуй пошагово прогнать каждый модуль отдельно..
Ну а если уж и так не пошло то зачем тебе мучиться попробуй так: listview1.Items.Delete(listview1.ItemIndex) Писал на память могу и ошыбаться Последний раз редактировалось Кодер, 04.07.2008 в 07:04. |
#3
|
|||
|
|||
Проблема именно в этой процедуре. Человек забыл, что при удалении элемента из списка меняется количество этих элементов. Если были удаления элементов в цикле, то обращение, по крайней мере, к последнему элементу, которого уже нет в списке, даст ошибку. Цикл for выполняется столько раз, сколько было элементов в самом начале.
Удаление нескольких элементов из списка надо делать через цикл while. Не забывайте делать резервные копии |
#4
|
||||
|
||||
Буду очень благодарен если кто то поможет с этой задачой - можно пример??
Заранее очень благодарен ......... |
#5
|
|||
|
|||
Во вроде так должно работать
Код:
var i: Integer; begin i := 0; while i <= ListBox1.Count - 1 do begin if ListBox1.Selected[i] then ListBox1.Items.Delete(i) else Inc(i); end; Не проверял) Потестите отпишитесь |
#6
|
||||
|
||||
СПАСИИИИБО
|