紧急:create一个Form后,该Form关闭,close事件caFree了,可是为什么assigned(myFormvar)还是为true呢? 那么应该如何判断一个Form已经释放了呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通常就if assigned(myFormvar) and (myFormvar <> nil) then XXX 如果这样,全局变量myFormVar:TFTEST;button1事件中,myFormVar:=TFTEST.create;myFormVar.showModal;执行后,弹出一模特窗口,点关闭(close事件里action := caFree),应该是释放了该Formbutton2事件中,assigned(myFormvar) 为true(myFormvar < > nil) 为true Assigned是用来判断一个对象是否为nil,Delphi对象Free后,并不=nil,所以用Assigned不能进行有效判断,必须将对象设置为nil Assigned是用来判断一个对象是否不为nil 但是在FormTEST窗口中,close事件中caFree,self := Nil(或者FFormTest := Nil),还是无济于事。 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, 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;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin if not Assigned(Form2) then Form2 := TForm2.Create(Application); if not Form2.Visible then Form2.Show;end;end.unit Unit2;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm2 = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form2: TForm2;implementation{$R *.dfm}procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);begin Action := caFree;end;procedure TForm2.FormDestroy(Sender: TObject);begin Form2 := nil;end;end. myFormVar:=TFTEST.create; myFormVar.showModal; 可以不用CaFree的:myFormVar.Free;myFormVar := nil; 阿发伯你好,你的方法不行,测试还是跟以前一样。liuyang你好,因为程序中不是个模特窗口,是个appwindow,以及其它原因,不能在主窗口中free和nil with TFTEST.Create( Owner ) dobegin showmodal; destroy;end; 谢谢各位大侠。真奇怪,如果直接使用Form2变量就可以,如果定义全局变量yyy:TForm2,就不行。 定义全局变量yyy:TForm2那得要看其宿主对象了,如果是application则是在退出整个程序的时候又application来负责释放的如果是self或nil则用Freeandnil(yyy)应该可以满足assigned(yyy)为false 阿发伯你那个procedure TForm2.FormDestroy(Sender: TObject); begin Form2 := nil; end; 这个Form2:=nil;中的Form2能不能用变量表示 关于delphi继承的疑惑 请问怎么去掉,运行程序时候的,SQL数据库连接密码输入框 怎样把EXCEL数据导入到数据库里面去? dggrid背景色问题 哪里有delphi6.0自带的安装程序呀InstallShield 还是一个关于dbgrid的奇怪问题,不要见笑 请大家帮忙,急,急,急,急,急,! [提问] 变长字符串在行文件(流文件)中的存取及其他 名字中间的•如何处理 怎么在DELPHI6.0中实现查看自己的IP的功能 在代码中如何捕捉存储过程中定义的错误? delphi如何读取.bin文件?
if assigned(myFormvar) and (myFormvar <> nil) then XXX
button1事件中,
myFormVar:=TFTEST.create;
myFormVar.showModal;执行后,弹出一模特窗口,点关闭(close事件里action := caFree),应该是释放了该Formbutton2事件中,
assigned(myFormvar) 为true
(myFormvar < > nil) 为true
Windows, Messages, SysUtils, Variants, 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;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
if not Assigned(Form2) then
Form2 := TForm2.Create(Application);
if not Form2.Visible then
Form2.Show;
end;end.unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm2 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2 := nil;
end;end.
myFormVar.showModal;
可以不用CaFree的:myFormVar.Free;
myFormVar := nil;
liuyang你好,因为程序中不是个模特窗口,是个appwindow,以及其它原因,不能在主窗口中free和nil
with TFTEST.Create( Owner ) do
begin
showmodal;
destroy;
end;
真奇怪,如果直接使用Form2变量就可以,如果定义全局变量yyy:TForm2,就不行。
那得要看其宿主对象了,如果是application则是在退出整个程序的时候又application来负责释放的
如果是self或nil则用Freeandnil(yyy)应该可以满足assigned(yyy)为false
你那个
procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2 := nil;
end;
这个Form2:=nil;中的Form2能不能用变量表示