5,927
社区成员




我需要用字符串传递窗体名称,并且关闭它(这些窗体是由系统已经自动创建好了的,无需再次手动创建)
以下代码可以用字符串方式打开form2的,但是我的form2已经无需再次创建了,并且我需要的是关闭,请问要怎么写呢?
var
aform:TForm;
begin
aform:=TFormClass(FindClass(formClassName)).Create(Application);
aform.ShowModal;
end;
我改过的写法,会报错。
var
aform:TForm;
begin
aform:=TForm(TFormClass(FindClass('TForm2')));
aform.close;
end;
找组件,不要找类。
Application.FindComponent
如果没找到
递归向下搜索
Application.Components[i].FindComponent
Application.Components[i].Components[x].FindComponent
...
知道找到或者递归完毕(如果某一级的ComponentCount = 0则返回上一级)
简单点就把
var aform:TForm;
作为作为全局变量,释放时先判断
if Assigned(aform) then
FreeAndNil(aform);
要不就遍历。
FMX的窗体处理与VCL的是不同的。
procedure TForm1.btnCreaeClick(Sender: TObject);
var
aform:TForm;
begin
aform:=TFormClass(FindClass('TForm2')).Create(Application);
aform.Show;
end;
procedure TForm1.btnCloseClick(Sender: TObject);
var
i: integer;
formCls: TFormClass;
begin
i := 0;
while i<Application.ComponentCount do
begin
if (Application.Components[i].ClassName='TForm2') then
begin
Application.Components[i].Free;
end
else Inc(i);
end;
end;
var
aform:TForm;
begin
aform:=TFormClass(FindClass(formClassName)).Create(Application);
aform.ShowModal;
freeandnil(aform);
end;