我可以将表单类存储在数组中吗? (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;
我当前的代码有很多代码重复,我想通过使用数组来减少它,这样我就可以遍历数组并获得我需要创建的 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;