菜鸟一问(1):请问怎样检测一个窗体(Form)是否已经创建?(分有的是,问题也有的是)

IceTiger 2002-12-18 05:41:55
请问怎样在父窗体中怎样检测其中一个子窗体(不可见)是否已经create了?能给个实例吗?

谢谢了。
...全文
59 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
isadken 2002-12-19
  • 打赏
  • 举报
回复
我是这样子写的:
procedure TMainForm.N33Click(Sender: TObject);
var
CompFrame:TFrame;
begin
try
CompFrame.Free;
CompFrame:=TFrame.Create(MainForm);
With CompFrame do
begin
Parent:=Panel2;
Visible:=true;
Align:=alclient;
end;
except
end;
end;

IceTiger 2002-12-19
  • 打赏
  • 举报
回复
to zswang(伴水清清)(专家门诊清洁工)

这次可以了,但是在关闭aAdminUser时程序报错,提示后退出了
而且if 中 else的部分好像一直都没有执行
procedure TMainForm.N12Click(Sender: TObject);
var
aAdminUser:TAdminUsers;
begin
if not Assigned(Application.FindComponent('AdminUsers')) then
begin
aAdminUser:=TAdminUsers.Create(Application);
aAdminUser.Show;
end
else
begin
aAdminUser.Close;
end;
end;
IceTiger 2002-12-19
  • 打赏
  • 举报
回复
to zswang(伴水清清)(专家门诊清洁工)

我参照你的代码改了一下但还是不行,一个也建不出来。

procedure TMainForm.N12Click(Sender: TObject);
var
aAdminUser:TAdminUsers;
begin
if Assigned(Application.FindComponent('aAdminUser')) then
begin
aAdminUser:=TAdminUsers.Create(Application);
aAdminUser.Show;
end
else
begin
aAdminUser.Close;
aAdminUser.Free;
end;
end;
IceTiger 2002-12-19
  • 打赏
  • 举报
回复
通过Assigned(Form)在我上面的代码中是检测aAdminUsers吗?
bigysw 2002-12-19
  • 打赏
  • 举报
回复
procedure TMainForm.N12Click(Sender: TObject);
var
aAdminUser:TAdminUsers;
begin
aAdminUser:=Application.FindComponent('aAdminUser');
if Assigned(aAdminUser) then
begin
aAdminUser:=TAdminUsers.Create(Application);
end
else
begin
aAdminUser.Close;
end;
end;

————————————————————————————————————————————————————————————————

在 TaAdminUser 的OnClose中,添加如下代吗:

Action:=caFree;




————————————————————————————————————————————————————————————————
调试通过
liujinzhou 2002-12-19
  • 打赏
  • 举报
回复
up
simonzone 2002-12-18
  • 打赏
  • 举报
回复
to hyhgir(yy)
你错了.

因为有这句----
var
aAdminUser: TAdminUsers;
comehere 2002-12-18
  • 打赏
  • 举报
回复
用Assigned(Form)即可!
hyhgir 2002-12-18
  • 打赏
  • 举报
回复
aAdminUser:=TAdminUsers.Create(self);

应该是aAdminUser:=TAdminUser.Create(self);吧
王集鹄 2002-12-18
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
aAdminUser: TAdminUsers;
begin
aAdminUser := TForm(FindComponent('aAdminUser'));
if Assigned(aAdminUser) then begin
aAdminUser.Close;
aAdminUser.Free;
end else begin
aAdminUser := TAdminUsers.Create(Self);
aAdminUser.Name := 'aAdminUser';
aAdminUser.Show;
end;
end;
大大怪老张 2002-12-18
  • 打赏
  • 举报
回复
MyForm := TMyForm.Create(Application); //(Application)不能少!



如果缺少Application ,第一次创建不会出问题(或者是没表现出来),再次创建的时候就会出错。
王集鹄 2002-12-18
  • 打赏
  • 举报
回复
Assigned(vForm) 和 判断vForm <> nil 效果一样!~~
关键是在释放vForm的时候要把vForm赋值为nil ~~

//这样的代码是前不久学的!~建议使用~
if not Assigned(Application.FindComponent('MyForm')) then
MyForm := TMyForm.Create(Application); //(Application)不能少!
IceTiger 2002-12-18
  • 打赏
  • 举报
回复
哦,打错了,是nil
IceTiger 2002-12-18
  • 打赏
  • 举报
回复
procedure TMainForm.N12Click(Sender: TObject);
var
aAdminUser:TAdminUsers;
begin
if Assigned(aAdminUser) then aAdminUser.Close
else
begin
aAdminUser:=TAdminUsers.Create(self);
aAdminUser.Show;
end;
end;

我这样还是不对,这次是一直不能创建,难道我在var中声明aAdminUser后,aAdminUser就不为nul了?我还没有create啊。

大家再帮帮忙吧。
DelUser 2002-12-18
  • 打赏
  • 举报
回复
Assigned或者在那个Form的OnFormDestory事件中写
Form := nil;
然后就可以用if form = nil then
begin
//说明没有创建
end;
mrfanghansheng 2002-12-18
  • 打赏
  • 举报
回复
呵呵……
yang6130 2002-12-18
  • 打赏
  • 举报
回复
//初始化
initialization
ChildForm:=nil;
//释放时
FreeAndNil(ChildForm);
//检测
if Assigned(ChildForm) then
ShowMessage('已经创建')

Billy_Chen28 2002-12-18
  • 打赏
  • 举报
回复
Assigned()函数判断就可以了
jaguarcts 2002-12-18
  • 打赏
  • 举报
回复
if Assigned(ChildForm) then
ShowMessage('已经创建')

childform代表要测试的窗口
bigysw 2002-12-18
  • 打赏
  • 举报
回复
if Assigned(ChildForm) then
ShowMessage('已经创建')

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧