Delphi在页面控件中按标签号显示帧

Delphi在页面控件中按标签号显示帧,delphi,delphi-2007,Delphi,Delphi 2007,我有一个独特的问题。我正在WindowsXP上使用Delphi2007。我有一个带有TPageControl组件的表单。我创建了一个要在该页面控件中显示的框架。我将创建许多其他帧,这些帧将基于按钮单击事件显示。是否可以使用框架的tag属性,以便在按下按钮时,可以将标记号传递到通用函数或过程中,以便可以对所有按钮重复使用这些函数或过程。另一个想法是使用tabsheets索引属性并将其与框架标记号匹配。任何建议都很好。提前感谢。您需要一个将标记号映射到frame类的函数,如下所示: type T

我有一个独特的问题。我正在WindowsXP上使用Delphi2007。我有一个带有TPageControl组件的表单。我创建了一个要在该页面控件中显示的框架。我将创建许多其他帧,这些帧将基于按钮单击事件显示。是否可以使用框架的tag属性,以便在按下按钮时,可以将标记号传递到通用函数或过程中,以便可以对所有按钮重复使用这些函数或过程。另一个想法是使用tabsheets索引属性并将其与框架标记号匹配。任何建议都很好。提前感谢。

您需要一个将标记号映射到frame类的函数,如下所示:

type
  TFrameClass = class of TFrame;

function GetFrameClass(const aClassID: Integer): TFrameClass;
begin
  case aClassID of
    1 : Result := TFrameFoo;
    2 : Result := TFrameBar;
    else Result := nil;
  end;
end;
然后可以创建框架:

var FrClass: TFrameClass;
    Frame: TFrame;
begin
  FrClass := GetFrameClass(btn.Tag);
  if(FrClass <> nil)then begin
     Frame := FrClass.Create(tabsheet);
     Frame.Parent := tabsheet;
  end;
var-FrClass:TFrameClass;
帧:TFrame;
开始
FrClass:=GetFrameClass(btn.Tag);
如果(FRL等级为零),则开始
Frame:=FrClass.Create(tabsheet);
Frame.Parent:=tabsheet;
结束;

简单高效,但不太通用。无论何时添加帧,现在都需要修改
GetFrameClass
函数。更一般的做法是,让所有帧从公开类函数
GetId
(或类似函数)的公共祖先继承,并让每个帧类向工厂注册,然后工厂可以根据按钮的标记返回帧类。通过在帧单元的初始化部分注册,您可以在应用程序中添加和删除帧,而无需更改某些
GetFrameClass
函数。