【问题标题】:Delphi display a frame by tag number in page controlDelphi在页面控件中按标签号显示框架
【发布时间】:2013-01-13 17:14:31
【问题描述】:

我有一个独特的问题。我在 Windows XP 上使用 Delphi 2007。我有一个带有 TPageControl 组件的表单。我创建了一个要在该 PageControl 中显示的框架。我将创建许多其他将基于按钮单击事件显示的框架。无论如何都要使用框架的标签属性,以便在按下按钮时标签号可以传递给通用函数或过程,以便可以将函数或过程重用于所有按钮。另一个想法是使用 tabsheets 索引属性并将其与框架标记号匹配。任何建议都会很棒。提前致谢。

【问题讨论】:

    标签: delphi delphi-2007


    【解决方案1】:

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

    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;
    

    【讨论】:

    • 简单高效,但不是很通用。每当您添加一个框架时,您现在都需要修改GetFrameClass 函数。更通用一点是让所有框架都来自一个共同的祖先,该祖先公开一个 类函数 GetId(或类似的),并让每个框架类向一个工厂注册自己,然后可以返回基于按钮标签的框架类。通过在框架单元的初始化部分注册,您可以在应用程序中添加和删除框架,而无需更改某些 GetFrameClass 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多