如何在运行时分配MDIChild的OnClose事件?

时间:2013-11-16 04:42:07

标签: delphi event-handling delphi-7

这是主表单中的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  AForm : array [1..5] of TForm;
  i : Integer;
begin
  For i:= 1 to 5 do begin
    AForm[i]:= TForm.Create(nil);
    With AForm[i] do begin
      Parent := Self;
      BorderStyle:= bsSizeToolWin;
      OnClose <<< Here i would like change Action to caFree
      FormStyle:=fsMDIChild;
      Show;
      Caption:=IntToStr(i);
    end;
    if i mod 2 = 0 Then AForm[i].Color:=clRed else AForm[i].Color:=clBlue;
  end;
end;

有没有办法分配子表单的OnClose事件?

1 个答案:

答案 0 :(得分:4)

您需要创建一个事件处理程序,并将其分配给表单的OnClose事件。

由于您还没有为MDI子窗体创建新类,因此很可能将事件处理程序放在主窗体中。

procedure TForm1.ChildFormClose(Sender: TObject; 
  var Action: TCloseAction);
begin
  Action := caFree;
end;

像这样分配:

OnClose := ChildFormClose;

在适当的时候,我希望你能为你的MDI孩子们上课。您可以将事件移动到这些新类或公共基础。那就是说,我可能不会这样做。这是一种非常适合主要形式的方法。

一些旁白。我不相信你应该为MDI孩子指定Parent。我记得,框架自动定位单个MDI窗口。我认为你的Parent设置被忽略,没有效果,所以应该删除。我也很好奇MDI儿童边框风格的设置。那会有什么影响吗?