在表单上:
* TCategoryButtons(例如,共有3个类别,每个类别中有10个按钮)
* TPageControl(干净)
创建了30个(例如)不同的帧。
按下按钮时有必要:
1.检查是否已创建框架(一个按钮只有一个框架)。
2.在TPageControl中创建一个选项卡并激活它。
3.创建一个与按钮相对应的框架,并将其放入创建的选项卡中(如果该选项卡已关闭,请杀死它和该框架)。
这就是我可以做的:
procedure TForm1.CategoryButtons1Categories0Items0Click(Sender: TObject);
var
Client: TTabSheet;
begin
if (not Assigned(Frame2)) then
begin
Client := TTabSheet.Create(Self);
Client.PageControl := PageControl1;
Client.Caption := CategoryButtons1.Categories[0].Items[0].Caption;
PageControl1.ActivePage := Client;
Frame2 := TFrame2.Create(nil);
Frame2.Parent := Client;
end;
end;
我试图这样做:
type
TFrameClass = class of tframe;
function GetFrClass(const aClassID: Integer): TFrameClass;
begin
case aClassID of
1:
Result := TFrame2;
2:
Result := TFrame3;
else
Result := nil;
end;
end;
procedure TForm1.CreateFrm(tags: Integer; NameTSh: string);
var
FrClass: TFrameClass;
Frame: tframe;
Client: TTabSheet;
begin
FrClass := GetFrameClass(tags);
if (FrClass <> nil) then
begin
Client := TTabSheet.Create(Self);
Client.PageControl := PageControl1;
Client.Caption := NameTSh;
Frame := FrClass.Create(Client);
Frame.Parent := Client;
end;
end;
但是此方法并不限制创建的帧实例的数量。
请告诉我解决方案!
答案 0 :(得分:1)
您可以在过程tags: Integer
中使用TForm1.CreateFrm()
值来确定帧PageControl1
中是否已经存在。
在创建框架并将其添加到PageControl1
之前,请检查tags
属性中是否有任何现有页面已经具有值tag
:
procedure TForm1.CreateFrm(tags: Integer; NameTSh: string);
var
i: integer;
...
begin
for i := 0 to PageControl1.PageCount-1 do
if PageControl1.Pages[i].tag = tags then
Exit;
FrClass := GetFrameClass(tags);
...
在CreateFrm()
过程的最后,您存储了tags
PageControl1.Pages[PageControl1.PageCount-1].Tag := tags;
end;