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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2009, 22:39   #1
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию List index out of bounds (44)

Код:
  for I := 0 to listbox1.count - 1 do
  begin
  for a := 0 to listbox2.count - 1 do
  begin
  if listbox1.Items.Strings[i]=listbox2.Items.Strings[a] then
  begin
  listbox1.Items.Delete(i);
  end;
  end;
Почему ошибка возникает? Вроде все верно...
KoBRaAndrey вне форума Ответить с цитированием
Старый 11.12.2009, 22:45   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

После listbox1.Items.Delete(i); в этом самом listbox1 строк станет меньше, т.е. поменяется listbox1.count. Но переменная I об этом ничего не узнает и попытается читать "дальше конца", что и вызывает ошибку. Надо использовать while или repeat
eoln вне форума Ответить с цитированием
Старый 11.12.2009, 22:47   #3
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

Можно пример?
KoBRaAndrey вне форума Ответить с цитированием
Старый 11.12.2009, 22:54   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

лучше писать так
Код:
 for I := listbox1.count - 1 downto 0 do
soleil@mmc вне форума Ответить с цитированием
Старый 11.12.2009, 22:59   #5
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

Спасибо работает
KoBRaAndrey вне форума Ответить с цитированием
Старый 11.12.2009, 23:03   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Код:
var i,a:integer;
begin
  for a := 0 to listbox2.Items.Count - 1 do
  begin
    i := 0;
    while i < listbox1.Items.Count do
      if listbox1.Items.Strings[i]=listbox2.Items.Strings[a] then
      listbox1.Items.Delete(i) else inc(i);
  end
end;

Последний раз редактировалось eoln; 11.12.2009 в 23:05.
eoln вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Трудный list index out of bounds Gypsy Общие вопросы Delphi 8 11.11.2009 15:12
Сообщение об ошибке LIST INDEX OUT IF BOUNDS cowboy Общие вопросы Delphi 9 16.10.2009 13:34
обход ошибки List index out of bounds (0) Яр|/||< (^_^) Общие вопросы Delphi 3 29.06.2009 12:45
Табулирование функции. Ошибка 'List index out of bounds(0)' Мэр Общие вопросы Delphi 2 03.06.2009 09:11