紧急:create一个Form后,该Form关闭,close事件caFree了,可是为什么assigned(myFormvar)还是为true呢?
那么应该如何判断一个Form已经释放了呢?
[解决办法]
通常就
if assigned(myFormvar) and (myFormvar <> nil) then XXX
[解决办法]
Assigned是用来判断一个对象是否为nil,Delphi对象Free后,并不=nil,所以用Assigned不能进行有效判断,必须将对象设置为nil
[解决办法]
Assigned是用来判断一个对象是否不为nil
[解决办法]
unit Unit1;
interface
uses
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;
implementation
uses 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;
interface
uses
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;
[解决办法]
阿发伯你好,你的方法不行,测试还是跟以前一样。
======================================================================
不可能的,我已经测试过的。
[解决办法]
- Delphi(Pascal) code
with TFTEST.Create( Owner ) dobegin showmodal; destroy;end;
[解决办法]
定义全局变量yyy:TForm2
那得要看其宿主对象了,如果是application则是在退出整个程序的时候又application来负责释放的
如果是self或nil则用Freeandnil(yyy)应该可以满足assigned(yyy)为false