|
#1
|
|||
|
|||
Не видит индекс
Доброе утро. Пожалуйста, посмотрите кусок кода, который не совсем корректно работает:
В Unit1 : Код:
procedure TForm1.Makro(Var U8, U5, MU8, MU5, O1, MO1, MU : TMasMin); var f: File of TElementi; U8w, U5w, O1w : TElementi; i, j: integer; begin .................. Form3.ComboBox4.Clear; Form3.ComboBox4.Items.Add('U238'); Form3.ComboBox4.Items.Add('U235'); Form3.ComboBox4.Items.Add('U'); if Form3.RadioButton1.Checked = True then Form3.ComboBox4Change(Form3.ComboBox4 , 0, MU5, MU8, MO1, MU); end; ........ end; В Unit3 : Код:
procedure TForm3.ComboBox4Change(Sender: TObject; k: integer; var MU5w, MU8w, MO1w, MUw: TMasMin); var i, j : integer; begin if k = 0 then begin case Form3.ComboBox4.ItemIndex of 0: VivodMakr(MU8w); 1: VivodMakr(MU5w); 2: begin for i:=1 to 4 do for j:=1 to 4 do MUw[i, j]:=MU5w[i, j]+MU8w[i, j]; VivodMakr(MUw); end; end; end; end; Процедура VivodMakr должна должна выводить предложенный ей массив TMasMin: array[1..4, 1..4] of real в таблицу StringGrid. И, собственно, без процедуры Код:
procedure TForm3.ComboBox4Change(Sender: TObject; k: integer; var MU5w, MU8w, MO1w, MUw: TMasMin); Код:
procedure TForm3.ComboBox4Change(Sender: TObject; k: integer; var MU5w, MU8w, MO1w, MUw: TMasMin); |
#2
|
||||
|
||||
Цитата:
Цитата:
Вот как твоя TForm3.ComboBox4Change выглядит отформатированной: Код:
procedure TForm3.ComboBox4Change(Sender: TObject; k: integer; var MU5w, MU8w, MO1w, MUw: TMasMin); var i, j: integer; begin if k = 0 then begin case Form3.ComboBox4.ItemIndex of 0: VivodMakr(MU8w); 1: VivodMakr(MU5w); 2: begin for i := 1 to 4 do for j := 1 to 4 do MUw[i, j] := MU5w[i, j] + MU8w[i, j]; VivodMakr(MUw); end; end; end; end; |
#3
|
|||
|
|||
Я подразумевал, что при изменении ItemIndex ComboBox4 в Unit3.
Это прописано процедурой VivodMakr(var Q: TMAsMin); -- она работает корректно -- проверял, да, и если убрать чехарде с Combobox4 она заработает |
#4
|
||||
|
||||
Цитата:
При визуальном изменении ItemIndex (т.е. при выборе из выпадающего списка нужного элемента) событие OnChange срабатывает, но для этого нужно чтобы обработчик события был присвоен свойству события (например в инспекторе объектов на вкладке Events), но твою TForm3.ComboBox4Change туда присвоить не получится, так как типы параметров и их количество у неё не совпадают с теми которые там нужны. |
#5
|
|||
|
|||
Понял, почти. Спасибо
|
#6
|
||||
|
||||
Цитата:
|
#7
|
|||
|
|||
А вызвал я её правильно с Unit1, если теперь оставить только Sender: TObject?
Код:
Form3.ComboBox4Change(Form3.ComboBox4); |
#8
|
||||
|
||||
Цитата:
А если в обработчике события не проверяется кто вызвал это событие, то можно ещё и так вызывать: Код:
Form3.ComboBox4Change(nil); |
#9
|
|||
|
|||
Спасибо большое.
|