Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.07.2008, 23:52
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание Проблемы при удалении строк с 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  
Старый 04.07.2008, 00:13
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию

Если не ошибаюсь то проблема вообще не в этой процедуре..Попробуй пошагово прогнать каждый модуль отдельно..

Ну а если уж и так не пошло то зачем тебе мучиться попробуй так:

listview1.Items.Delete(listview1.ItemIndex)


Писал на память могу и ошыбаться

Последний раз редактировалось Кодер, 04.07.2008 в 07:04.
Ответить с цитированием
  #3  
Старый 04.07.2008, 06:52
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Проблема именно в этой процедуре. Человек забыл, что при удалении элемента из списка меняется количество этих элементов. Если были удаления элементов в цикле, то обращение, по крайней мере, к последнему элементу, которого уже нет в списке, даст ошибку. Цикл for выполняется столько раз, сколько было элементов в самом начале.

Удаление нескольких элементов из списка надо делать через цикл while.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #4  
Старый 19.08.2008, 22:09
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

Буду очень благодарен если кто то поможет с этой задачой - можно пример??

Заранее очень благодарен .........
Ответить с цитированием
  #5  
Старый 19.08.2008, 22:57
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Во вроде так должно работать
Код:
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  
Старый 20.08.2008, 00:33
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

СПАСИИИИБО
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter