我也觉得是这问题,可能是释放的不干净的原因。那么:如何在关闭form2时释放窗口呢?
1.在用按纽关闭时:form.close;或if application.messagebox('确认退出?','确认框',49)= 1 then
close 的时候应该如何释放?2。按右上角的小X关闭时又是如何释放?
我在rocedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Application.MessageBox('确认退出?','确认框',MB_OKCANCEL+MB_ICONQUESTION)=IDOK then
canclose:=true
else
canclose:=false
end;
这种情况下如何释放?
1.在用按纽关闭时:form.close;或if application.messagebox('确认退出?','确认框',49)= 1 then
close 的时候应该如何释放?2。按右上角的小X关闭时又是如何释放?
我在rocedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Application.MessageBox('确认退出?','确认框',MB_OKCANCEL+MB_ICONQUESTION)=IDOK then
canclose:=true
else
canclose:=false
end;
这种情况下如何释放?
但我不喜欢这种编法
form2:=Tform2.Create(Application);
form2.OnDestroy := Form2Destroy;
end;
form2.Show;procedure Form2Destroy(sender : TObject);
begin
form2 := nil;
end;如果在Tform2的定义中没有用到OnDestroy的话我建议你这样试试
if not Assigned(form2) then form2:=Tform2.Create(Application);
form2.Show;在创建出的窗口的onclose中加入:
action:=cafree;
form2:=nil;
form2.Show;或if not Assigned(form2) then begin
form2:=Tform2.Create(Application);
form2.OnDestroy := Form2Destroy;
end;
form2.Show;这种代码写法里?
例子:
var
i:Integer;
b: Boolean;
begin
//b := false;
for i := 0 to MDIChildCount-1 do
if MDICHildren[i] is TForm2 then
begin
MDIChildren[i].BringToFront;
b := true;
break;
end;
if not b then
TForm2.Create(Application).Show;
end
if not Assigned(form2) then
try
form2:=Tform2.Create(Application);
form2.OnDestroy := Form2Destroy;
except
form2.free;
form2 := nil;
raise;
end;form2.Show;
action:=cafree;
ondetroy
form2:=nil;