如何检查 Delphi 表单是否存在

axkjgtzd  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(122)

我使用字符串来创建可用的表单,但我不知道如何测试表单是否已经创建。我只需要每个表单的一个示例。

Procedure TMainForm.CreateFormFromName(const FormName:String);
var
 fc:TFormClass;
 f:Tform
begin
  fc := TFormClass(FindClass(FormName));
  f := fc.Create(Application);
  f.show
end;
 
Procedure TMainForm.FormCreate(Sender:TObject);
begin
  RegisterClass(TfrmTest);
end;

我可以发送一个字符串到表单,它确实创建了表单。但是,我如何锁定第二次尝试创建相同的形式?

uklbhaso

uklbhaso1#

由于表单的所有者可能不是在所有情况下都是Application,因此迭代Screen.Forms/Screen.FormCount可能是更好的方法。
如果这些形式不是从TForm导出的,而是从TCustomForm导出的,那么还有Screen.CustomForms/Screen.CustomFormCount

8yparm6h

8yparm6h2#

所有表单的所有者都是Application,所以只要检查它是否已经用必要的类约束了表单:

function IsFormAlreadyCreated(AFormClass : TClass) : boolean;
 var
   i : integer;
   cmp : TComponent;
 begin
   Result := false;
   for i := 0 to Application.ComponentCount - 1 do
   begin
     if Application.Components[i].ClassType = AFormClass then
     begin
       Result := true;
       break;
     end;
   end;
 end;

用你想搜索的类调用它,f.e.:

if IsFormAlreadyCreated(TForm1) then ...

相关问题