窗体在执行Close来关闭时,如果它是子窗体,实际上只等于将其隐藏,只有当该窗体是
主窗(程序的第一个创建的窗体或是唯一的窗体)时才会将其销毁并释放。
要想子窗被释放,应在其OnClose事件中执行Free,关键看你是怎样创建并打开的子窗,
如果是在创建后再打开的,才应该手动地Free之,而如果你的子窗是在项目文件*.dpr
里就定义了创建的,就不应手动地将其Free。
建议:在项目文件*.dpr中把创建子窗的语句删除,而只保留创建主窗的语句
Application.Initialize;
Application.CreateForm(TForm1, Form1); //假设Form1是主窗
Applicatoin.CreateForm(TForm2, Form2); //假设Form2是子窗,把这一行删除
Application.Run;
然后在你的菜单命令里加入:
begin
Form2 := TForm2.Create(Form1);
try
Form2.ShowModal; //以模态方式打开
finally
FreeAndNil(Form2);
//在关闭窗体时释放窗体,在此情况下就不要在Form2的OnClose事件上加入Free了。
end;
end;