|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
list index out of bounds (0)
Здравствуйте!
ошибка list index out of bounds (0) подскажите в чем ошибка? Код:
procedure TForm2.Button5Click(Sender: TObject); begin for i := 0 to Form2.ListBox1.Count-1 do if (Form2.ListBox1.Items[i] = 'Лиття під тиском')then if (Form2.ListBox1.Items[i] = 'Виконати лиття') then begin a1:=50000; {вартість станка} a2:= 8; {кількість годин на добу} a3:= 250; {Робочих днів на рік} a4:= 1.15; {витратин на обслуговування} a5:= 5; {термін окупності} a6:= 1.05; {витрати на інструмент} a7:=0.75; {потужність станка} a8:= 2.13; {тариф за електроенегрію} a9:= 500; {зарплата робітника за 1 зміну} a10:= 2; {ваговий коефіціент(податкиі зарплата)} a11:= 2; {ваговий коефіціент (статистичнйи показник)} a12:= 4; {ваговий коефіціент (статистичний показник)} a13:= 0.4; {час роботи станка)} a:=((((a1*a6*a4)/(a2*a3*a5))+(a7*a8)+((a9*a10)/a2)+((a9*a10)/2*a2)+((a9*a10)/4*a2))*(1+(a14/100)))/a15; end; Спасибо! Последний раз редактировалось Admin, 06.10.2019 в 17:07. |
#2
|
||||
|
||||
В приведенном коде ошибку "list index out of bounds (0)" ничего не вызывает. А сама ошибка говорит о том, что индекс списка к которому идет обращение лежит в не границ. Другими словами, обращение идет к несуществующему индексу списка.
А вот здесь у меня вопрос. Код:
if (Form2.ListBox1.Items[i] = 'Лиття під тиском')then if (Form2.ListBox1.Items[i] = 'Виконати лиття') then P.S.: заверните свой код в тег, или же получите предупреждение. Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
#3
|
|||
|
|||
да, но ошибка появляется при нажатии на эту кнопку.
по поводу этих 2-х строчек, мне необходимо чтобы проверялось 2 условия эсли в списку есть первое слово и второе слово тогда выполняется формула. Последний раз редактировалось ____jarik____, 06.10.2019 в 12:39. |
#4
|
|||
|
|||
вот полный текст программы, но она еще недописанная до конца.
Код:
unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm2 = class(TForm) ListBox1: TListBox; Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Button1: TButton; Button2: TButton; Edit3: TEdit; Button3: TButton; Edit4: TEdit; Button4: TButton; Button5: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; a,b:Double; i:integer; a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15:Double; implementation {$R *.dfm} uses Unit5; procedure TForm2.Button1Click(Sender: TObject); begin if (Edit1.Text = 'Лиття під тиском') or (Edit1.Text = 'Віброабразивна') or (Edit1.Text = 'Слюсарна') or (Edit1.Text = 'Фрезерна') or (Edit1.Text = 'Свердлильна') or (Edit1.Text = 'Хімічне окислення') or (Edit1.Text = 'Маркування') or (Edit1.Text = 'Контроль') then ListBox1.Items.Add(Edit1.Text) else ShowMessage('Не правильна назва операції'); Edit1.Clear end; procedure TForm2.Button2Click(Sender: TObject); begin if (Edit2.Text = 'Виконати лиття') or (Edit2.Text = 'Виконати обробку заготовок') or (Edit2.Text = 'Встановити, закріпити, зняти') or (Edit2.Text = 'Запилити і розчистити місце роз’єму') or (Edit2.Text = 'Фрезерувати пов.21, 22') or (Edit2.Text = 'Зняти задирки') or (Edit2.Text = 'Фрезерувати пов.6, 3,16 Попередньо ') or (Edit2.Text = 'Фрезерувати пов.2, 3, 4, 10, 11, 19 начисто') or (Edit2.Text = 'Фрезерувати пов.23') or (Edit2.Text = 'Свердлити отв. 12 під різьбу М3-6Н') or (Edit2.Text = 'Свердлити отв.5, 8 під різьбу М2-6Н') or (Edit2.Text = 'Перевстановити') or (Edit2.Text = 'Свердлити отв.20') or (Edit2.Text = 'Свердлити отв.9 під різьбу М2-6Н') or (Edit2.Text = 'Розточити отв.7') or (Edit2.Text = 'Розточити отв.6') or (Edit2.Text = 'Розточити отв.16') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 2 отв. Поз.9 ') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 4 отв. Поз.5') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 3 отв. Поз.8') or (Edit2.Text = 'Змінити інструмент') or (Edit2.Text = 'Нарізати різьбу М3-6Н в 1 отв. Поз.12') or (Edit2.Text = 'Нанести хімічне покриття') or (Edit2.Text = 'Маркувати умовний порядковий номер') or (Edit2.Text = 'Контролювати паралельність поверхонь') then ListBox1.Items.Add(Edit2.Text) else ShowMessage('Не правильна назва переходу'); Edit2.Clear end; procedure TForm2.Button3Click(Sender: TObject); begin a14:=StrToInt(Edit3.Text); Edit3.Clear end; procedure TForm2.Button4Click(Sender: TObject); begin a15:=StrToInt(Edit4.Text); Edit4.Clear end; procedure TForm2.Button5Click(Sender: TObject); begin for i:=0 to ListBox1.Count-1 do if (Form2.ListBox1.Items[i] = 'Лиття під тиском') and (Form2.ListBox1.Items[i] = 'Виконати лиття') then begin a1:=50000; {вартість станка} a2:= 8; {кількість годин на добу} a3:= 250; {Робочих днів на рік} a4:= 1.15; {витратин на обслуговування} a5:= 5; {термін окупності} a6:= 1.05; {витрати на інструмент} a7:=0.75; {потужність станка} a8:= 2.13; {тариф за електроенегрію} a9:= 500; {зарплата робітника за 1 зміну} a10:= 2; {ваговий коефіціент(податкиі зарплата)} a11:= 2; {ваговий коефіціент (статистичнйи показник)} a12:= 4; {ваговий коефіціент (статистичний показник)} a13:= 0.4; {час роботи станка)} a:=((((a1*a6*a4)/(a2*a3*a5))+(a7*a8)+((a9*a10)/a2)+((a9*a10)/2*a2)+((a9*a10)/4*a2))*(1+(a14/100)))/a15; end; if (Form2.ListBox1.Items[i] = 'Віброабразивна')then if Form2.ListBox1.Items[i] = 'Виконати обробку заготовок' then begin a1:=50000; {вартість станка} a2:= 8; {кількість годин на добу} a3:= 250; {Робочих днів на рік} a4:= 1.15; {витратин на обслуговування} a5:= 5; {термін окупності} a6:= 1.05; {витрати на інструмент} a7:=0.75; {потужність станка} a8:= 2.13; {тариф за електроенегрію} a9:= 500; {зарплата робітника за 1 зміну} a10:= 2; {ваговий коефіціент(податкиі зарплата)} a11:= 2; {ваговий коефіціент (статистичнйи показник)} a12:= 4; {ваговий коефіціент (статистичний показник)} a13:= 0.4; {час роботи станка)} a:=((((a1*a6*a4)/(a2*a3*a5))+(a7*a8)+((a9*a10)/a2)+((a9*a10)/2*a2)+((a9*a10)/4*a2))*a14)/a15; end ; Form5.Label1.Caption:='a' ; Form5.Show end; end. Последний раз редактировалось Admin, 06.10.2019 в 17:08. |
#5
|
||||
|
||||
А вот это
Код:
if (Edit1.Text = 'Лиття під тиском') or (Edit1.Text = 'Віброабразивна') or (Edit1.Text = 'Слюсарна') or (Edit1.Text = 'Фрезерна') or (Edit1.Text = 'Свердлильна') or (Edit1.Text = 'Хімічне окислення') or (Edit1.Text = 'Маркування') or (Edit1.Text = 'Контроль') Код:
if (Edit2.Text = 'Виконати лиття') or (Edit2.Text = 'Виконати обробку заготовок') or (Edit2.Text = 'Встановити, закріпити, зняти') or (Edit2.Text = 'Запилити і розчистити місце роз’єму') or (Edit2.Text = 'Фрезерувати пов.21, 22') or (Edit2.Text = 'Зняти задирки') or (Edit2.Text = 'Фрезерувати пов.6, 3,16 Попередньо ') or (Edit2.Text = 'Фрезерувати пов.2, 3, 4, 10, 11, 19 начисто') or (Edit2.Text = 'Фрезерувати пов.23') or (Edit2.Text = 'Свердлити отв. 12 під різьбу М3-6Н') or (Edit2.Text = 'Свердлити отв.5, 8 під різьбу М2-6Н') or (Edit2.Text = 'Перевстановити') or (Edit2.Text = 'Свердлити отв.20') or (Edit2.Text = 'Свердлити отв.9 під різьбу М2-6Н') or (Edit2.Text = 'Розточити отв.7') or (Edit2.Text = 'Розточити отв.6') or (Edit2.Text = 'Розточити отв.16') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 2 отв. Поз.9 ') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 4 отв. Поз.5') or (Edit2.Text = 'Нарізати різьбу М2-6Н в 3 отв. Поз.8') or (Edit2.Text = 'Змінити інструмент') or (Edit2.Text = 'Нарізати різьбу М3-6Н в 1 отв. Поз.12') or (Edit2.Text = 'Нанести хімічне покриття') or (Edit2.Text = 'Маркувати умовний порядковий номер') or (Edit2.Text = 'Контролювати паралельність поверхонь') Далее... Как это по Вашему должно сработать? Код:
for i:=0 to ListBox1.Count-1 do if (Form2.ListBox1.Items[i] = 'Лиття під тиском') and (Form2.ListBox1.Items[i] = 'Виконати лиття') then Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
Этот пользователь сказал Спасибо Kailon за это полезное сообщение: | ||
____jarik____ (06.10.2019)
|
#6
|
|||
|
|||
это моя первая программа, не знаком с " ComboBox'e ",
Задача следующая: у меня есть тех. процесс производства детали мне необходимо его ввести в программу, название операции и название перехода. и оценить стоимость каждого перехода по формуле. в некоторых операциях есть одинаковые названия переходов (например установка) , мне необходимо чтобы программа понимала что это относится к разным операциям и у этих переходов разная стоимость. Большое спасибо! |
#7
|
|||
|
|||
"ListBox это ведь список строк, а Вы хотите чтобы она, строка из списка, равнялась и "Лиття під тиском" и "Виконати лиття" одновременно. Это как?"
хотел задать условие чтобы в списке была строка "Лиття під тиском" и строка "Виконати лиття". не одна и также строка, а просто чтобы в списке били эти 2 строки. |
#8
|
||||
|
||||
Вот набросал на скорую руку. Разбирайся, спрашивай.
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
Этот пользователь сказал Спасибо Kailon за это полезное сообщение: | ||
____jarik____ (06.10.2019)
|
#9
|
|||
|
|||
Спасибо, большое!
но есть несколько вопросов, если можно? как сделать так чтобы при выборе первого условия второе условие менялось? например чтобы когда я выбрал в 1 условии "Лиття під тиском" то во втором не мог выбрать "Фрезерувати пов.21, 22". как сделать чтобы в листбоксе отображался весь тех процесс который был задан. и сумма была по переходам, а потом общая сумма всего процесса. тех процесс. 005 Лиття під тиском Виконати лиття 010 Віброабразивна Виконати обробку заготовок 015Слюсарна Встановити, закріпити, зняти Запилити і розчистити місце роз’єму 020 Фрезерна Встановити, закріпити, зняти Фрезерувати пов.21, 22 020 Слюсарна Зняти задирки 030 Фрезерна Встановити, закріпити, зняти Фрезерувати пов.6, 3,16 Попередньо Фрезерувати пов.2, 3, 4, 10, 11, 19 начисто Фрезерувати пов.23 035 Слюсарна Зняти задирки 040 Свердлильна Встановити, закріпити, зняти Свердлити отв. 12 під різьбу М3-6Н Свердлити отв.5, 8 під різьбу М2-6Н Перевстановити Свердлити отв.20 Перевстановити Свердлити отв.9 під різьбу М2-6Н Перевстановити Розточити отв.7 Розточити отв.6 Розточити отв.16 045 Слюсарна Зняти задирки 050 Слюсарна Встановити, закріпити, зняти Нарізати різьбу М2-6Н в 2 отв. Поз.9 Нарізати різьбу М2-6Н в 4 отв. Поз.5 Нарізати різьбу М2-6Н в 3 отв. Поз.8 Змінити інструмент Нарізати різьбу М3-6Н в 1 отв. Поз.12 055 Хімічне окислення Нанести хімічне покриття 060 Маркування Встановити, закріпити, зняти Маркувати умовний порядковий номер 065 Контроль Встановити, закріпити, зняти Контролювати паралельність поверхонь Спасибо! |
#10
|
||||
|
||||
Цитата:
Цитата:
Цитата:
А вообще для этой задачи подойдет база данных. Тут и фильтрация и суммы и справочники и прочее... Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
#11
|
|||
|
|||
подскажите где должно быть условие?
и как правильно его записать if...? case cbCondition_1.ItemIndex of 0: (условие?) case cbCondition_2.ItemIndex of здесь? что обозначают "0:", "1:"? большое спасибо за то что потратили и так много времени на меня) и еще, можно у вас купить такую программу? или подскажите кто может помочь сделать за деньги. Просто времени мало осталось, а разбираться мне еще много в программе ( |
#12
|
||||
|
||||
Цитата:
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
#13
|
||||
|
||||
Но локализацию скорее всего придется делать самому ибо украинскую мову не каждый разумеет.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |