首页 > Windows开发 > 详细

Delphi 退出时注销子窗口应注意的问题

时间:2021-04-18 11:00:50      阅读:18      评论:0      收藏:0      [点我收藏+]

主Form建议多页面程序,一般都将子Form存放在一个List里,

procedure TForm1.FormCreate(Sender: TObject);
begin
 FList:=TStringList.Create;
 form2:=tForm2.Create(Application);
 Form2.Parent:=Self.Panel1;
 Form2.Show;
 FList.AddObject(‘11‘,Form2);

end;

  

 

程序退出,应该将子Form对将注销掉,例如下面的代码。

 

procedure Tform1.FreeForm;
var
  I:integer;
begin
  IF not Assigned(FList) then exit;
  for I:=0 to FList.Count-1 do
   begin
     IF not Assigned(FList.Objects[I]) then Continue;
     TForm(FList.Objects[I]).Free;
     FList.Objects[I]:=nil;
   end;
  FreeAndNil(FList);
end;

  但我们不要将他放在FormDestroy里面,

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeForm;
end;

  而应该在FormDestroy之前,例如FormClose里将他之注销

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  IF Self.chkFreeChildForm.Checked then
     FreeForm;
end;

 否则退出时会出现AV错误

技术分享图片

 

如果你一定要在FormDestroy中执行 FreeForm,那么建方子窗口时不要用 form2:=tForm2.Create(Application);而是用 form2:=tForm2.Create(nil);或者 form2:=tForm2.Create(self);

 

 

Delphi 退出时注销子窗口应注意的问题

原文:https://www.cnblogs.com/wuxi15/p/14672654.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!