【问题标题】:How to dynamically create customized TabSheet runtime如何动态创建自定义的 TabSheet 运行时
【发布时间】:2014-11-28 12:40:56
【问题描述】:

我想创建一个必须在运行时创建的 TTabsheet。 TTabSheet 有几个组件,但所有这些组件在每个选项卡上都是相同的。是否可以创建一个每次都会创建这些选项卡的“类型”变量?

谢谢

【问题讨论】:

  • 听起来你需要一个 TTabControl 来代替

标签: delphi dynamic types ttabsheet


【解决方案1】:

是的。您可以从 TTabSheet 创建继承类

TCustomTabSheet = class(TTabSheet)
public
  constructor Create(AOwner : TComponent); override;
public
   FTestButton : TButton;
end;

constructor TCustomTabSheet.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  FTestButton := TButton.Create(Self);
  FTestButton.Parent := Self;
  FTestButton.Left := 1;
  FTestButton.Top := 1;
  FTestButton.Width := 20;
  FTestButton.Heigth := 10;
  FTestButton.Caption := 'Cool button!';
  FTestButton.Name := 'TestButton';
end;

您还可以在设计时使用您的自定义控件创建一个框架 (TFrame),并将其实例托管到所有新选项卡。

【讨论】:

  • 非常感谢。在编程方面我还是个新手 :) 之后可以更改某些组件的名称吗?而“继承的创建”命令又是做什么的呢?
  • 稍微更新了示例。继承调用默认的 TTabSheet 构造函数以确保正确的控件初始化。
  • 好的。谢谢你。会试一试
  • 为什么要关心控件的名称?
  • @Ari 你需要设置控件Parent
【解决方案2】:

只是为了好玩,这是我定期使用的一段代码,用于将标签页添加到上面有 TMemo 的 TPageControl。例如,如果您有一个用于编辑文本文件的表单,则可以使用它。您可以调用它来添加一个以文件名作为标题的新选项卡,然后从文件内容中加载备忘录的 .Line 属性。

function TMy_form.add_ts_mmo( ntbk : TPageControl; caption : string ) : TTabSheet;
var mmo : TMemo;
begin
  Result := TTabSheet.Create(self);
  Result.PageControl := ntbk;
  Result.Caption := caption;
  mmo := TMemo.Create(self);
  Result.Tag := Integer(mmo);
  mmo.Parent := Result;
  mmo.Font.Name := 'Courier New';
  mmo.Font.Size := 10;
  mmo.Align := alClient;
  mmo.ScrollBars := ssBoth;
  mmo.WordWrap := true;
end;

你可以通过给它一个你希望它被添加到的 PageControl 和一个在选项卡中使用的标题来调用它。

var
  ts : TTabSheet;
. . .
  ts := add_ts_mmo( myPageControl, ExtractFileName( text_file_nm ) );

请注意,我将新备忘录的指针保存在 ts.Tag 中,以便稍后通过强制转换轻松找到它。

TMemo(ts.Tag).Lines.LoadFromFile( text_file_nm );

不需要子类化。在Result.Caption := caption 行之后,您也可以在标签页上创建您可能需要的任何其他组件。请务必将其.Parent 属性设置为Result

可以在设计时或运行时创建 PageControl。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多