如何判断创建的窗体是否被释放? ( 积分: 0 )

  • 主题发起人 主题发起人 ronaldowyl
  • 开始时间 开始时间
R

ronaldowyl

Unregistered / Unconfirmed
GUEST, unregistred user!
form1:=Tform1.Create(self);
try
F_form1.ShowModal;
finally
F_form1.Free;
在代码中可以创建释放窗体,那么我在form2中点击某个按钮的时候如果通过代码实现判断form1是被创建了还是被释放了呢?
 
form1:=Tform1.Create(self);
try
F_form1.ShowModal;
finally
F_form1.Free;
在代码中可以创建释放窗体,那么我在form2中点击某个按钮的时候如果通过代码实现判断form1是被创建了还是被释放了呢?
 
用 assigned() 方法来判断它是否存在
 
如果你的f_form1是全局变量,在f_form1.Free后面要加一句f_form1 := nil;或者改成这样
form1:=Tform1.Create(self);
try
F_form1.ShowModal;
finally
FreeAndNil(F_form1);
判断的时候只要用
if f_form1 = nil then //已经释放
这样就可以了。
 
to reegon:
兄弟给你示例好不好?
 
用Assigned的方法:

form1:=Tform1.Create(self);
try
F_form1.ShowModal;
finally
F_form1.Free;

if Assigned(F_Form1) then
ShowMessage('窗体存在!')
else
ShowMessage('窗体已经释放!')

关于FreeAndNil 你可以看Delphi源代码
其实是先 F_Form1=nil
将对象指针指向nil
再 F_Form1.Free
释放对象
 
同意楼上的!
 
指正一下
form1:=Tform1.Create(self);
try
F_form1.ShowModal;
finally
F_form1.Free
//这一句应该改为 FreeAndNil(F_form1)

if Assigned(F_Form1) then //Assigned只是检查对象的指针是否指向Nil
ShowMessage('窗体存在!')
else
ShowMessage('窗体已经释放!')
 
不过上面指定了属主的话可以用
Self.ComponentCount
Self.Components
来循环Self 中的所有组件, 然后用 Is 来判断 其是否属于窗体

比如:

Var
i:Integer;
frm:TForm;
begin
frm:=TForm.Create(Self);
frm.Name:='TextForm';
for i:=0 to Self.ComponentCount -1 do
//if Components Is TForm then
ShowMessage(Self.Components.Name);
end;
 

Similar threads

S
回复
0
查看
681
SUNSTONE的Delphi笔记
S
S
回复
0
查看
768
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部