Как в процедуру, выполняющуюся по нажатию на кнопку, добавить переменную цикла программы? - PascalABC.NET
Формулировка задачи:
Всем здравствуйте. Есть программа, создающая в цикле необходимое количество форм. Формы должны закрываться по нажатию кнопки "Продолжить", но возникает проблема: Необходимо в процедуре закрытия формы указать её "экземпляр", так как формы записаны в массиве. Добавить в процедуру переменную цикла не представляется возможным (
хотя кто знает...
), так как процедура запускается по нажатию на кнопку (ANextButton.Click += ANext). Подскажите что делать, как решить проблему? Код программы прилагается :
Листинг программы
- {$apptype windows}
- {$reference 'System.Windows.Forms.dll'}
- {$reference 'System.Drawing.dll'}
- Program Math;
- Uses System, System.Windows.Forms, System.Drawing;
- Var AForm : Array [1..14] of Form;
- SS, TS, Err : Integer;
- Mg : Array [1..15] of Button;
- Mv : Array [2..15] of Button;
- SaveK : Array [1..14] of String;
- SaveA : Array [1..14] of String;
- W : Array [1..14,1..14] of TextBox;
- ANextButton : Button;
- Procedure ANext(i : Integer; sender: System.Object; e: System.EventArgs);
- Begin
- AForm[i].Close;
- End;
- Begin
- Begin
- AForm[i] := new Form;
- AForm[i].Text := '';
- AForm[i].ShowIcon := false;
- AForm[i].MaximizeBox := false;
- AForm[i].ClientSize := New System.Drawing.Size(44 * (TS + 1),(44 * (TS + 1)) + 22);
- AForm[i].StartPosition := System.Windows.Forms.FormStartPosition.CenterScreen;
- For var i1 := 1 to TS+1 do
- Begin
- Mg[i1] := new Button;
- Mg[i1].Width := 44;
- Mg[i1].Height := 44;
- Mg[i1].Left := 44 * (i1 - 1);
- Mg[i1].Top := 0;
- Mg[i1].BackColor := System.Drawing.SystemColors.GradientActiveCaption;
- Mg[1].Text := SaveK[i];
- If i1 > 1 then Mg[i1].Text := SaveA[i1 - 1];
- AForm[i].Controls.Add(Mg[i1]);
- End;
- For var i1 := 2 to TS+1 do
- Begin
- Mv[i1] := new Button;
- Mv[i1].Width := 44;
- Mv[i1].Height := 44;
- Mv[i1].Left := 0;
- Mv[i1].Top := 44 * (i1 - 1);
- Mv[i1].BackColor := System.Drawing.SystemColors.GradientActiveCaption;
- Mv[i1].Text := SaveA[i1-1];
- AForm[i].Controls.Add(Mv[i1]);
- End;
- For var i1 := 1 to TS do For var i2 := 1 to TS do
- Begin
- W[i1,i2] := new TextBox;
- W[i1,i2].Font := new System.Drawing.Font('Times New Roman', 24, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
- W[i1,i2].Width := 44;
- W[i1,i2].Height := 44;
- If i1 = i2 then W[i1,i2].Text := '1';
- W[i1,i2].Top := 44 * i1;
- W[i1,i2].Left := 44 * i2;
- W[i1,i2].TextAlign := System.Windows.Forms.HorizontalAlignment.Center;
- AForm[i].Controls.Add(W[i1,i2]);
- End;
- ANextButton := new Button;
- ANextButton.Width := 44 * (TS + 1);
- ANextButton.Left := 0;
- ANextButton.Top := 44 * (TS + 1);
- ANextButton.Font := New System.Drawing.Font('Times New Roman', 11, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
- ANextButton.Text := 'Продолжить';
- ANextButton.Click += ANext;
- AForm[i].Controls.Add(ANextButton);
- Application.Run(AForm[i]);
- End;
- End.
Решение задачи: «Как в процедуру, выполняющуюся по нажатию на кнопку, добавить переменную цикла программы?»
textual
Листинг программы
- Procedure ANext(i : Integer; sender: System.Object; e: System.EventArgs);
- Begin
- ((sender as Button).Parent as Form).Close;
- End;
Объяснение кода листинга программы
В данном коде определен обработчик события нажатия кнопки с именем ANext
. При нажатии этой кнопки вызывается процедура с таким же именем. Внутри этой процедуры происходит следующее:
i
- это параметр процедуры, который передается из вызывающего кода и имеет тип Integer. Значение этого параметра не используется в данном коде.sender
- это параметр процедуры, который передается из вызывающего кода и представляет объект, который вызвал событие. В данном случае это кнопка.e
- это параметр процедуры, который передается из вызывающего кода и представляет событие, которое произошло. В данном случае это событие закрытия формы.((sender as Button).Parent as Form)
- это выражение, которое используется для получения доступа к форме, которая является родителем кнопки.((sender as Button).Parent as Form).Close
- это вызов методаClose
для формы, полученной в предыдущем шаге. Этот метод закрывает форму. Таким образом, при нажатии на кнопку с именемANext
происходит закрытие формы, которая является родителем этой кнопки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д