非自动创建的窗体关闭问题(100分)

  • 主题发起人 主题发起人 Godfear
  • 开始时间 开始时间
G

Godfear

Unregistered / Unconfirmed
GUEST, unregistred user!
var
form2: TForm2;
begin
form2:= TForm2.create(application);
form2.show;
//form1.close;
//form1.hide;
form1.free;
end;
问题是这样的,我想关闭form1(或者让它不显示),有什么办法?
用form2.showmodal虽然可以在后面form1.free关闭掉,但是form1比form2大,
form2显示后,后面有个form1的窗体,很影响美观!
测试了很多办法都不能解决!
 
form2是在form1中调用的?
 
你这个要分两种情况看,一个是Form1是主窗体。
这个时候的调用form2的代码是:
Form2:=TForm2.create(NIL);
Form1.Hide;
Form2.Show;
然后在Form2的close事件里加这个代码: Form1.show;
Action:=caFree;
 
form1不是主窗体呢?
 
第二种情况是form1和form2中没有主窗体。
如form1是主窗体,现在要在form1中调用form2,然后在form2中调用form3,调用form3的时候同时关闭form2。
form1中的代码:procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.create(NIL);
Form1.Hide;
Form2.Show;
end;
form2中的代码:
Form3:=TForm3.create(NIL);
Form2.Close;
Form3.show;
fmor3中的代码:
procedure TForm3.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Form1.show;
ACtion:=caFree;
end;

procedure TForm3.FormDestroy(Sender: TObject);
begin
Form3:=NIL;
end;
 
动态创建的窗体一般要在窗体的close事件中加上:action:=caFree;在Destroy加上:Form:=NIL;这样能保证引用不出错。
还有就是调用时要检查一下窗体是不是已经创建:
if not assigned(form1) then
form1:=Tform1.create(NIL);
Form1.show.
 
不可以,
FORM2调用FORM3时,close报地址错误!
这时候我试过了,HIDE也报错,只能FREES,而FREE窗体还在....
是不是要在FORM2或FROM3的close事件中写些什么啊?
action:= caFree;?
action:= caHide;?
都不行!或者DESTROY是清空也不行!
 
还是没有解决!不使用动态创建那很简单.......
到底那里不对啊?
 
xcplates老大在吗?在线等......
 
这里不能加附件,给我你的信箱,我发给你我写的代码。
 
jiangno123@yahoo.com.cn
 
接受答案了.
 
谢谢xcplates老大,是我代码中重复引用了FORM1,FORM2等引起的问题!
 
后退
顶部