怎么关闭用字符串传递名称的窗体

且行且知 2022-06-22 01:10:15

我需要用字符串传递窗体名称,并且关闭它(这些窗体是由系统已经自动创建好了的,无需再次手动创建)

以下代码可以用字符串方式打开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;

 

...全文
90 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复

找组件,不要找类。
Application.FindComponent
如果没找到
递归向下搜索
Application.Components[i].FindComponent
Application.Components[i].Components[x].FindComponent
...
知道找到或者递归完毕(如果某一级的ComponentCount = 0则返回上一级)

  • 打赏
  • 举报
回复
hj8090 06-22

简单点就把
var aform:TForm;
作为作为全局变量,释放时先判断
if Assigned(aform) then
FreeAndNil(aform);
要不就遍历。

  • 打赏
  • 举报
回复
tanqth 06-22

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;

  • 打赏
  • 举报
回复
hj8090 06-22

var
aform:TForm;
begin
aform:=TFormClass(FindClass(formClassName)).Create(Application);
aform.ShowModal;
freeandnil(aform);
end;

  • 打赏
  • 举报
回复
@hj8090 二楼,没看题。不需要创建,系统已经创建过了,我只需要查找并关闭。
  • 举报
回复
tanqth 06-22
@且行且知 他也没说错的,你如果使用ShowModal,当这个窗体显示的时候,你不会打开其他窗体的。所以,ShowModal后面就可以是直接释放。
  • 举报
回复
相关推荐
发帖
Delphi

5124

社区成员

Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
帖子事件
编辑了帖子
2022-06-22 01:11
编辑了帖子 (查看)
2022-06-22 01:10
创建了帖子 (查看)
2022-06-22 01:10
社区公告
暂无公告