关于关闭一个动态建立的form.(50分)

  • 主题发起人 主题发起人 hejiesi
  • 开始时间 开始时间
H

hejiesi

Unregistered / Unconfirmed
GUEST, unregistred user!
动态建立一个Form,Form上有一个Button,在button的click事件写
下面的代码
form1.close;
为什么会出错?
 
在form1.onclose事件中加入 action:=cafree 即可!
 

自己窗口中的button释放自己?buttonclick过程来没完,你叫他怎么释放?
得在创建同级的过程中释放,如果是showmodal的,直接给modalresult赋值吧。

 
/////
procedure TForm1.Button1Click(Sender: TObject);
begin
form2:=tform2.create(self);
form2.Visible := true;
end;
////
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.close;//或form1.close; // <font color=red>都没问题</font>
end;

要不把你的原码贴出来!
 
动态建立的 Form 是叫 Form1 吗?
 
上面这种动态建立的FORM是FORM2
 
错了,应该说是在你动态建立的那个窗口的ON CLOSE中加入 action:=cafree.
 
如果form2为上面这种动态建立的FORM,form1为主窗口。则你是否试图关闭主窗口?请提供原程序。
 
form2是设计时设计好的,只不过把他从auto-create forms里移到available forms里,
在程序运行时不自动创建!要在程序里CREATE。
 
改成:
self.close;

然后,onclose事件中加入 action:=cafree;
即可。

你的错在于,Form1还没创见,就调用了。(我估计是)
 
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses unit2;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
Form2:TForm2;
begin
Form2:=Tform2.create(nil);
form2.Show;
end;
end.


unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.Close;
end;
end.

这样的话不会出错但Form2却不能关闭,why?

 
var
Form2:TForm2;
问题出在这里!
如果不定义FORM2:TFORM2,直接引用FORM2则不会出错!

如果你一定要定义FORM2:TFORM2,则要把FORM2.CLOSE改成SELF.CLOSE,这样就没问题了!

 
接受答案了.
 
后退
顶部