根据按钮的目的创建框架

时间:2018-12-12 03:52:32

标签: delphi delphi-xe2 delphi-xe

在表单上:
* 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;

但是此方法并不限制创建的帧实例的数量。

请告诉我解决方案!

1 个答案:

答案 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;