首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

紧急create一个Form后,该Form关闭,close事件caFree了,可是为什么assigned(myFormvar)还是为true呢?解决办法

2012-03-02 
紧急:create一个Form后,该Form关闭,close事件caFree了,可是为什么assigned(myFormvar)还是为true呢?那么应

紧急: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

热点排行