if Assigned(ChildForm) then ShowMessage('已经创建')childform代表要测试的窗口
Assigned()函数判断就可以了
//初始化 initialization ChildForm:=nil; //释放时 FreeAndNil(ChildForm); //检测 if Assigned(ChildForm) then ShowMessage('已经创建')
Assigned或者在那个Form的OnFormDestory事件中写 Form := nil; 然后就可以用if form = nil then begin //说明没有创建 end;
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啊。大家再帮帮忙吧。
Assigned(vForm) 和 判断vForm <> nil 效果一样!~~ 关键是在释放vForm的时候要把vForm赋值为nil ~~//这样的代码是前不久学的!~建议使用~ if not Assigned(Application.FindComponent('MyForm')) then MyForm := TMyForm.Create(Application); //(Application)不能少!
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;
to hyhgir(yy) 你错了.因为有这句---- var aAdminUser: TAdminUsers;
通过Assigned(Form)在我上面的代码中是检测aAdminUsers吗?
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;
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;
我是这样子写的: 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;
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; ———————————————————————————————————————————————————————————————— 调试通过
ShowMessage('已经创建')
ShowMessage('已经创建')childform代表要测试的窗口
initialization
ChildForm:=nil;
//释放时
FreeAndNil(ChildForm);
//检测
if Assigned(ChildForm) then
ShowMessage('已经创建')
Form := nil;
然后就可以用if form = nil then
begin
//说明没有创建
end;
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啊。大家再帮帮忙吧。
关键是在释放vForm的时候要把vForm赋值为nil ~~//这样的代码是前不久学的!~建议使用~
if not Assigned(Application.FindComponent('MyForm')) then
MyForm := TMyForm.Create(Application); //(Application)不能少!
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;
你错了.因为有这句----
var
aAdminUser: TAdminUsers;
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;
而且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;
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;
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;
————————————————————————————————————————————————————————————————
调试通过