Как в процедуру, выполняющуюся по нажатию на кнопку, добавить переменную цикла программы? - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Всем здравствуйте. Есть программа, создающая в цикле необходимое количество форм. Формы должны закрываться по нажатию кнопки "Продолжить", но возникает проблема: Необходимо в процедуре закрытия формы указать её "экземпляр", так как формы записаны в массиве. Добавить в процедуру переменную цикла не представляется возможным (

хотя кто знает...

), так как процедура запускается по нажатию на кнопку (ANextButton.Click += ANext). Подскажите что делать, как решить проблему? Код программы прилагается :
Листинг программы
  1. {$apptype windows}
  2. {$reference 'System.Windows.Forms.dll'}
  3. {$reference 'System.Drawing.dll'}
  4. Program Math;
  5. Uses System, System.Windows.Forms, System.Drawing;
  6. Var AForm : Array [1..14] of Form;
  7. SS, TS, Err : Integer;
  8. Mg : Array [1..15] of Button;
  9. Mv : Array [2..15] of Button;
  10. SaveK : Array [1..14] of String;
  11. SaveA : Array [1..14] of String;
  12. W : Array [1..14,1..14] of TextBox;
  13. ANextButton : Button;
  14. Procedure ANext(i : Integer; sender: System.Object; e: System.EventArgs);
  15. Begin
  16. AForm[i].Close;
  17. End;
  18. Begin
  19. Begin
  20. AForm[i] := new Form;
  21. AForm[i].Text := '';
  22. AForm[i].ShowIcon := false;
  23. AForm[i].MaximizeBox := false;
  24. AForm[i].ClientSize := New System.Drawing.Size(44 * (TS + 1),(44 * (TS + 1)) + 22);
  25. AForm[i].StartPosition := System.Windows.Forms.FormStartPosition.CenterScreen;
  26. For var i1 := 1 to TS+1 do
  27. Begin
  28. Mg[i1] := new Button;
  29. Mg[i1].Width := 44;
  30. Mg[i1].Height := 44;
  31. Mg[i1].Left := 44 * (i1 - 1);
  32. Mg[i1].Top := 0;
  33. Mg[i1].BackColor := System.Drawing.SystemColors.GradientActiveCaption;
  34. Mg[1].Text := SaveK[i];
  35. If i1 > 1 then Mg[i1].Text := SaveA[i1 - 1];
  36. AForm[i].Controls.Add(Mg[i1]);
  37. End;
  38. For var i1 := 2 to TS+1 do
  39. Begin
  40. Mv[i1] := new Button;
  41. Mv[i1].Width := 44;
  42. Mv[i1].Height := 44;
  43. Mv[i1].Left := 0;
  44. Mv[i1].Top := 44 * (i1 - 1);
  45. Mv[i1].BackColor := System.Drawing.SystemColors.GradientActiveCaption;
  46. Mv[i1].Text := SaveA[i1-1];
  47. AForm[i].Controls.Add(Mv[i1]);
  48. End;
  49. For var i1 := 1 to TS do For var i2 := 1 to TS do
  50. Begin
  51. W[i1,i2] := new TextBox;
  52. W[i1,i2].Font := new System.Drawing.Font('Times New Roman', 24, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
  53. W[i1,i2].Width := 44;
  54. W[i1,i2].Height := 44;
  55. If i1 = i2 then W[i1,i2].Text := '1';
  56. W[i1,i2].Top := 44 * i1;
  57. W[i1,i2].Left := 44 * i2;
  58. W[i1,i2].TextAlign := System.Windows.Forms.HorizontalAlignment.Center;
  59. AForm[i].Controls.Add(W[i1,i2]);
  60. End;
  61. ANextButton := new Button;
  62. ANextButton.Width := 44 * (TS + 1);
  63. ANextButton.Left := 0;
  64. ANextButton.Top := 44 * (TS + 1);
  65. ANextButton.Font := New System.Drawing.Font('Times New Roman', 11, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
  66. ANextButton.Text := 'Продолжить';
  67. ANextButton.Click += ANext;
  68. AForm[i].Controls.Add(ANextButton);
  69. Application.Run(AForm[i]);
  70. End;
  71. End.

Решение задачи: «Как в процедуру, выполняющуюся по нажатию на кнопку, добавить переменную цикла программы?»

textual
Листинг программы
  1. Procedure ANext(i : Integer; sender: System.Object; e: System.EventArgs);
  2. Begin
  3.   ((sender as Button).Parent as Form).Close;
  4. End;

Объяснение кода листинга программы

В данном коде определен обработчик события нажатия кнопки с именем ANext. При нажатии этой кнопки вызывается процедура с таким же именем. Внутри этой процедуры происходит следующее:

  1. i - это параметр процедуры, который передается из вызывающего кода и имеет тип Integer. Значение этого параметра не используется в данном коде.
  2. sender - это параметр процедуры, который передается из вызывающего кода и представляет объект, который вызвал событие. В данном случае это кнопка.
  3. e - это параметр процедуры, который передается из вызывающего кода и представляет событие, которое произошло. В данном случае это событие закрытия формы.
  4. ((sender as Button).Parent as Form) - это выражение, которое используется для получения доступа к форме, которая является родителем кнопки.
  5. ((sender as Button).Parent as Form).Close - это вызов метода Close для формы, полученной в предыдущем шаге. Этот метод закрывает форму. Таким образом, при нажатии на кнопку с именем ANext происходит закрытие формы, которая является родителем этой кнопки.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы