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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.01.2008, 02:24
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Вопрос В чем ошибка ?

Имеем ListBox(cd), нужно проанализировать и удалить оттуда ненужные строки.
Вот код:
Код:
var
i:integer;
begin
  for i:=1 to cd.Items.Count do begin
  if cd.Items[i] = 'test1' then cd.Items.Delete(i);
  if cd.Items[i] = 'test2' then cd.Items.Delete(i);
  if cd.Items[i] = 'test' then cd.Items.Delete(i);
  end;
end;
Как правильно удалить и пробовал ставить Refresh, не помогает, подскажите что делаю не так
Ответить с цитированием
  #2  
Старый 13.01.2008, 02:30
aleksnine aleksnine вне форума
Начинающий
 
Регистрация: 08.03.2007
Сообщения: 151
Репутация: 12
По умолчанию

Код:
var
i:integer;
begin
  for i:=cd.Items.Count-1 downto 0 do begin
  if cd.Items[i] = 'test1' then cd.Items.Delete(i);
  if cd.Items[i] = 'test2' then cd.Items.Delete(i);
  if cd.Items[i] = 'test' then cd.Items.Delete(i);
  end;
Ответить с цитированием
  #3  
Старый 13.01.2008, 04:03
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Радость

Всё дело в том, что когда из списка удаляется элемент, то все идущие после него сдвигаются(напр: идёшь от 1 до 5 - удалил 3 элемент и 4 и 5 стали 3 и 4, отсюда все ошибки), поэтому и надо проверять список с конца.
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием
  #4  
Старый 13.01.2008, 12:49
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Радость

Цитата:
Сообщение от aleksnine
Код:
var
i:integer;
begin
  for i:=cd.Items.Count-1 downto 0 do begin
  if cd.Items[i] = 'test1' then cd.Items.Delete(i);
  if cd.Items[i] = 'test2' then cd.Items.Delete(i);
  if cd.Items[i] = 'test' then cd.Items.Delete(i);
  end;
Этот код тоже дает ошибку, вот как правильно обрабатывается:
Код:
  for i:=cd.Items.Count-1 downto 0 do begin
  if cd.Items[i] = 'test1' then cd.Items.Delete(i);
end;
  for i:=cd.Items.Count-1 downto 0 do begin
  if cd.Items[i] = 'test2' then cd.Items.Delete(i);
end;
  for i:=cd.Items.Count-1 downto 0 do begin
  if cd.Items[i] = 'test' then cd.Items.Delete(i);
end;
Ответить с цитированием
  #5  
Старый 13.01.2008, 12:53
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

А не легче
Код:
for i:=cd.Items.Count-1 downto 0 do 
if (cd.Items[i] = 'test1') or (cd.Items[i] = 'test2') or (cd.Items[i] = 'test')  then cd.Items.Delete(i);
?
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #6  
Старый 13.01.2008, 13:03
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Радость

Цитата:
Сообщение от The Shadow
А не легче
Код:
for i:=cd.Items.Count-1 downto 0 do 
if (cd.Items[i] = 'test1') or (cd.Items[i] = 'test2') or (cd.Items[i] = 'test')  then cd.Items.Delete(i);
?
И правда легче, спасибо, как-то сразу не догадался.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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