Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2021, 19:43   #1
Pascalius
Пользователь
 
Аватар для Pascalius
 
Регистрация: 22.10.2011
Сообщений: 18
По умолчанию delphi 7 при удалении дубликатов строк в ListView выходит ошибка debugger exception notification

Здравствуйте

имеется код на кнопке

begin
if ListView.Items.Count>0 then
for i:=ListView.Items.Count-1 downto 1 do begin
str:=ListView.Items[i].SubItems.Strings[0];
for j:=i-1 downto 0 do
if str=ListView.Items[j].SubItems.Strings[0] then
ListView.Items[j].Delete;
end;
end;

и при его выполнении (в принципе удаление дубликатов происходит) показывает что строки как бы удалились, в ListView имеется 2 столбца и 3 одинаковые строчки (3 строки с одинаковыми данными в обоих столбцах), так вот! показывает что как бы удалилось все, и осталась 1 последняя строка, как бы так и должно быть НО! выходит ошибка debugger exception notification

Screenshot_1.png

ПРОСТИТЕ ЗАБЫЛ ДОПИСАТЬ!

+ подсвечивается код в данном месте

Screenshot_2.png

Заранее спасибо

Последний раз редактировалось Pascalius; 05.01.2021 в 19:59. Причина: Забыл дополнить!
Pascalius вне форума Ответить с цитированием
Старый 05.01.2021, 20:50   #2
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Если вместо
Код:
for i:=ListView.Items.Count-1 downto 1 do begin
сделать
Код:
for i:=ListView.Items.Count-1 downto 0 do begin
Shouldercannon вне форума Ответить с цитированием
Старый 05.01.2021, 21:47   #3
Pascalius
Пользователь
 
Аватар для Pascalius
 
Регистрация: 22.10.2011
Сообщений: 18
По умолчанию

Shouldercannon,

СНАЧАЛА БЫЛО ТАК

Спасибо помогло только теперь удаляются ВСЕ! строки и список пуст

ПОТОМ опять тоже самое то есть я удалил 1 раз и все снова ошибка и + ко всему ? (если вдруг получится решить данную проблему) а можно так сделать что бы осталась 1-а запись так как было 3-и записи, а по идее должно удалится 2-е записи и одна остаться.

СПАСИБО!

Последний раз редактировалось Pascalius; 05.01.2021 в 21:54.
Pascalius вне форума Ответить с цитированием
Старый 05.01.2021, 23:35   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

После того как проработает внутренний цикл и что-то удалит, счетчик внешнего цикла может указать на несуществующий элемент списка. Цикл от N-1 до 0 помог бы, если бы удалялся текущий рассматриваемый элемент.
Код:
i := 0;
while i < ListView.Items.Count do begin
    str := ListView.Items[i].SubItems.Strings[0];
    inc(i);
    for j := ListView.Items.Count - 1 downto i do
        if str = ListView.Items[j].SubItems.Strings[0] then
            ListView.Items[j].Delete;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 05.01.2021 в 23:38.
BDA вне форума Ответить с цитированием
Старый 06.01.2021, 00:57   #5
Pascalius
Пользователь
 
Аватар для Pascalius
 
Регистрация: 22.10.2011
Сообщений: 18
По умолчанию

BDA
Спасибо ОГРОМНОЕ! всё ОК

Тема закрыта
Pascalius вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция при опросе ip компьютера по snmp выдает ошибку debugger Exception Notification 'Socket Error # 10054 Chikoy Работа с сетью в Delphi 0 19.05.2012 18:30
При выполнение кода выводится Debugger exception notification sasha198407 БД в Delphi 0 31.03.2012 11:50
Ошибка Debugger Exception Notification VKorablev C++ Builder 5 24.11.2011 16:58
Ошибка - Debugger exception notification Football_lady БД в Delphi 1 15.01.2010 19:07