![]() |
|
|
|
|
#1
|
|||
|
|||
|
Привет, ребята. Есть такая странная ошибка list index out of bounds, как исправить ее? Имеется программа, вкратце:
Код:
if checklistbox[i].checked or ... then Form2.Memo1.Lines.Add('1111');Спасибо, жду советов. |
|
#2
|
||||
|
||||
|
Это выход из диапазона значений, т.е. идёт обращение к не существующему объекту списка. Решается заданием соответствующих условий циклу, напр.
Код:
... for i := 0 to obj.Count - 1 do ... |
|
#3
|
|||
|
|||
|
ну, у меня циклом никак не получится, потому что не для каждого i нужно выполнять действие.
при чем ошибка вылетает не всегда, а после некторого if-then. |
|
#4
|
||||
|
||||
|
Цитата:
отсюда выводы. А дошло, тогда уж вместо i явно указывайте к какому участнику списка обращаетесь |
|
#5
|
|||
|
|||
|
ок. указываю. проблема-то и в том, что, короче, вот:
Код:
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
|
|||
|
|||
|
может есть ограничение, типа не больше 10 if на одну битбатон?))
|
|
#7
|
||||
|
||||
|
Сейчас попробую оптимизировать
Последний раз редактировалось Alegun, 11.05.2014 в 17:07. |
|
#8
|
|||
|
|||
|
А поставить точку останова в 65 строке приведенных исходников и посмотреть, чему равны Checklistbox4.Items.Count и Checklistbox6.Items.Count?
|