【问题标题】:Create Frame depending on the purpose of the button根据按钮的用途创建框架
【发布时间】:2018-12-12 03:52:32
【问题描述】:

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

但是这种方法不限制创建的框架实例的数量。

请告诉我解决办法!

【问题讨论】:

  • 当然,您需要做的就是检查是否已添加相关框架类的实例,如果已添加则中止创建新实例?
  • @MartynA 需要检查框架是否存在,如果存在则显示消息,否则创建。以及破坏创建框架的能力

标签: delphi delphi-xe2 delphi-xe


【解决方案1】:

您可以使用过程TForm1.CreateFrm() 中的tags: Integer 值来确定框架是否已存在于PageControl1 中。

在创建框架并将其添加到PageControl1 之前,请检查任何现有页面是否已经在tag 属性中具有tags 的值:

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;

【讨论】:

  • 酷!一切都解决了。但问题仍然是如何关闭框架。
  • 通过添加数组决定关闭 - Frames: array [0 .. 29] of TFrame;
猜你喜欢
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多