我可以将表单类存储在数组中吗? (Delphi)

Can I store formclass in array? (Delphi)

我当前的代码有很多代码重复,我想通过使用数组来减少它,这样我就可以遍历数组并获得我需要创建的 class 表单。对于创建的每个标签表,它将在其中创建一个表单。这是我当前的代码:

 var TabSheet := TcxTabSheet.Create(cxPageControl1);
 TabSheet.Caption := 'Page 1';
 TabSheet.PageControl := cxPageControl1;
 cxPageControl1.Properties.ActivePage := TabSheet;

 with TForm1.Create(nil) do begin
   Parent := TabSheet;
   Height := TabSheet.Height;
   Width := TabSheet.Width;
   Anchors := [akLeft, akTop, akRight, akBottom];
   Show;
 end;

 var TabSheet := TcxTabSheet.Create(cxPageControl1);
 TabSheet.Caption := 'Page 2';
 TabSheet.PageControl := cxPageControl1;

 with TForm2.Create(nil) do begin
   Parent := TabSheet;
   Height := TabSheet.Height;
   Width := TabSheet.Width;
   Anchors := [akLeft, akTop, akRight, akBottom];
   Show;
 end;

//and so on ...

所以我想通过遍历数组来减少它,这样我就不必一次又一次地重新输入它。有没有办法在阵列中做到这一点?或者谁有其他建议。我尝试在顶部声明一个 var fm: TForm 然后在每个循环中像 fm := TForm1.Create(nil) 一样分配它但是这样,我无法访问 TForm1.

中定义的方法和组件

你可以这样做:

type
  TFormClass = class of TForm;
  TFormDef = record
      FormClass : TFormClass;
      Caption   : String;
  end;

const FormDefs : array [0..1] of TFormDef = (
                     (FormClass : TForm1; Caption : 'Page 1'),
                     (FormClass : TForm2; Caption : 'Page 2')
                 );

var
    FormDef  : TFormDef;
    Form     : TForm;
    TabSheet : TTabSheet;
begin
    for FormDef in FormDefs do begin
        TabSheet             := TTabSheet.Create(Self);
        TabSheet.Caption     := FormDef.Caption;
        TabSheet.PageControl := PageControl1;
        Form                 := FormDef.FormClass.Create(Self);
        Form.Parent          := TabSheet;
        Form.Width           := TabSheet.Width;
        Form.Height          := TabSheet.Height;
        Form.Anchors         := [akLeft, akTop, akRight, akBottom];
        Form.Show;
    end;
    PageControl1.ActivePageIndex := 0;
end;