用的是DELPHI7,程序有几个窗体组成,分别为主窗体Form1,子窗体Form2、Form3(子窗体用于从数据库中查询)。Form1的类型为fsnormal,Form2、Form3的l类型也为fsnormal。在主窗体Form1上有两个Button,
点击时执行以下代码创建子窗体:
if not Assigned(Form2) then
Application.CreateForm(TForm2, Form2);现在有一个问题,如果点击Button按钮创建子窗体Form2、Form3并执行相关查询,之后不关闭Form2、Form3,而直接关闭主窗体Form1,程序报错。而如果先关闭子窗体Form2、Form3,再关闭主窗体Form1,程序可正常退出,这是为什么呢??
请问怎样在点击关闭主窗体前把之前打开的子窗体先关闭掉再关闭主窗体呢??
点击时执行以下代码创建子窗体:
if not Assigned(Form2) then
Application.CreateForm(TForm2, Form2);现在有一个问题,如果点击Button按钮创建子窗体Form2、Form3并执行相关查询,之后不关闭Form2、Form3,而直接关闭主窗体Form1,程序报错。而如果先关闭子窗体Form2、Form3,再关闭主窗体Form1,程序可正常退出,这是为什么呢??
请问怎样在点击关闭主窗体前把之前打开的子窗体先关闭掉再关闭主窗体呢??
不清楚你的子窗体在关闭的时候做了什么事情。最好贴点代码。
是不是form2,3中有其它的需要释放的没释放
跟踪调试下看具体是哪几行代码引起的
Aform := TForm2.create(application);
try
aform.showmodal;
finally
aform.free;
end;
if Assigned(Form2) then freeandnil(form2);
Application.CreateForm(TForm2, Form2);
Action := cafree;
请问是在Form1的OnClose事件中添加:
freeandnil(form2);
freeandnil(form3);
吗?是这样释放吗?
MDIChildren[i].Free;
可以类似于这种方法处理。