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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.05.2014, 16:04
freya_pc freya_pc вне форума
Прохожий
 
Регистрация: 10.05.2014
Сообщения: 14
Версия Delphi: Delphi 7)
Репутация: 10
По умолчанию Ошибка

Привет, ребята. Есть такая странная ошибка list index out of bounds, как исправить ее? Имеется программа, вкратце:
Код:
if checklistbox[i].checked or ... then Form2.Memo1.Lines.Add('1111');
и такиз условий много, порядка 20, но после определенного кол-во ифов, начинает выдавать вот эту ошибку. Может проблема в if, что их слишком много. пока так. код выкладывать не буду, уж очень он однообразный.
Спасибо, жду советов.
Ответить с цитированием
  #2  
Старый 11.05.2014, 16:18
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Это выход из диапазона значений, т.е. идёт обращение к не существующему объекту списка. Решается заданием соответствующих условий циклу, напр.
Код:
...
for i := 0 to obj.Count - 1 do
...
При прокрутке цикла он перерабатывает заложенный диапазон на еденицу, в результате такая ошибка и вылазит
Ответить с цитированием
  #3  
Старый 11.05.2014, 16:37
freya_pc freya_pc вне форума
Прохожий
 
Регистрация: 10.05.2014
Сообщения: 14
Версия Delphi: Delphi 7)
Репутация: 10
По умолчанию

ну, у меня циклом никак не получится, потому что не для каждого i нужно выполнять действие.

при чем ошибка вылетает не всегда, а после некторого if-then.
Ответить с цитированием
  #4  
Старый 11.05.2014, 16:50
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от freya_pc
ну, у меня циклом никак не получится, потому что не для каждого i нужно выполнять действие.

при чем ошибка вылетает не всегда, а после некторого if-then.
Ну вы как раз итерацию цикла и показали отсюда выводы. А дошло, тогда уж вместо i явно указывайте к какому участнику списка обращаетесь
Ответить с цитированием
  #5  
Старый 11.05.2014, 16:55
freya_pc freya_pc вне форума
Прохожий
 
Регистрация: 10.05.2014
Сообщения: 14
Версия Delphi: Delphi 7)
Репутация: 10
По умолчанию

ок. указываю. проблема-то и в том, что, короче, вот:
Код:
begin
   if CheckListBox1.checked[2] or CheckListBox1.checked[3]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[1] or CheckListBox3.checked[2]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Генераторы шумовых сигналов');
    if CheckListBox1.checked[2] or CheckListBox1.checked[3]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[1] or CheckListBox3.checked[2]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Низкочастотные генераторы сигналов');
   if CheckListBox1.checked[2] or CheckListBox1.checked[3]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[1] or CheckListBox3.checked[2]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Усилители мощности');
   if CheckListBox1.checked[2] or CheckListBox1.checked[3]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[1] or CheckListBox3.checked[2]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Акустические излучатели');
   if CheckListBox1.checked[2] or CheckListBox1.checked[3]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[1] or CheckListBox3.checked[2]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Измерители шума и вибраций (шумомеры)');
   if CheckListBox1.checked[0]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[1] or CheckListBox3.checked[2] or CheckListBox3.checked[0]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Селективные микровольтметры, измерительные приемники (анализаторы спектра)');
   if CheckListBox1.checked[0] or CheckListBox1.checked[1] or CheckListBox1.checked[2] or CheckListBox1.checked[3]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[1] or CheckListBox3.checked[3]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Селективные нановольтметры');
   if CheckListBox1.checked[2] or CheckListBox1.checked[2]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[1] or CheckListBox3.checked[2]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Измерительные микрофоны');
   if CheckListBox1.checked[0] or CheckListBox1.checked[1]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[0]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Измерительные антенны');
   if CheckListBox1.checked[2] or CheckListBox1.checked[3]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[1] or CheckListBox3.checked[2]
   then Form2.Memo1.Lines.Add('Вибродатчики (акселерометры)');
   if CheckListBox1.checked[0] or CheckListBox1.checked[1]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[0]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Измерительные пробники');
   if CheckListBox1.checked[2] or CheckListBox1.checked[3]
    or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
    or CheckListBox3.checked[1] or CheckListBox3.checked[2]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Полосовые октавные фильтры со среднегеометри- ческими частотами 250, 500, 1000, 2000, 4000 Гц');
   if CheckListBox1.checked[0] or CheckListBox1.checked[1]
    or CheckListBox3.checked[0]
    or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
   then Form2.Memo1.Lines.Add('Осциллографы');
 { if Checklistbox6.Checked[0] or CheckListBox3.checked[0]
    or CheckListBox4.checked[0]
  then Form2.Memo1.Lines.Add('Программные средства формирования и контроля полномочий доступа в AC'); }
  if CheckListBox2.checked[3] or CheckListBox2.checked[4]or CheckListBox2.checked[5]
    or CheckListBox3.checked[0] or CheckListBox4.checked[0] 
   then Form2.Memo1.Lines.Add('Программные средства контроля целостности программ и программных комплексов');

вот до выделенного места все работает, а потом при добавлении еще одного условия, не хочет.

Извините, за громоздкий код. для наглядности
Ответить с цитированием
  #6  
Старый 11.05.2014, 16:59
freya_pc freya_pc вне форума
Прохожий
 
Регистрация: 10.05.2014
Сообщения: 14
Версия Delphi: Delphi 7)
Репутация: 10
По умолчанию

может есть ограничение, типа не больше 10 if на одну битбатон?))
Ответить с цитированием
  #7  
Старый 11.05.2014, 17:04
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Сейчас попробую оптимизировать

Последний раз редактировалось Alegun, 11.05.2014 в 17:07.
Ответить с цитированием
  #8  
Старый 12.05.2014, 09:15
Skleroz Skleroz вне форума
Прохожий
 
Регистрация: 12.05.2014
Сообщения: 3
Версия Delphi: XE2
Репутация: 10
По умолчанию

А поставить точку останова в 65 строке приведенных исходников и посмотреть, чему равны Checklistbox4.Items.Count и Checklistbox6.Items.Count?
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter