首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态创建自定义TabSheet运行时

如何动态创建自定义TabSheet运行时
EN

Stack Overflow用户
提问于 2014-11-28 12:40:56
回答 2查看 3.2K关注 0票数 0

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

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-28 12:51:47

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

代码语言:javascript
复制
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),并将其实例宿主到所有新选项卡。

票数 2
EN

Stack Overflow用户

发布于 2014-11-28 19:03:21

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

代码语言:javascript
复制
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和选项卡中使用的标题来调用它。

代码语言:javascript
复制
var
  ts : TTabSheet;
. . .
  ts := add_ts_mmo( myPageControl, ExtractFileName( text_file_nm ) );

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

代码语言:javascript
复制
TMemo(ts.Tag).Lines.LoadFromFile( text_file_nm );

不需要子类。您也可以在Result.Caption := caption行之后在表表上创建任何其他组件。只需确保将他们的.Parent属性设置为Result

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27188910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档