Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 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,691
По умолчанию

После 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,691
По умолчанию

Код:
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 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


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


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840