动态添加标签页到页面控件并嵌入表单?

Jer*_*dge 14 delphi tpagecontrol

我正在研究一个由页面控件组成的模块.默认情况下,此页面控件(TPageControl)不应该有任何选项卡表(TTabSheet),但在初始化时,它应该动态插入这些页面并在其中嵌入一个表单.

问题在于知道如何将标签页插入页面控件.我该如何创建呢?一旦它被创建,以及每个窗体内的表单,我如何迭代它们来销毁表单?

TLa*_*ama 28

1.如何动态创建标签页?

procedure TForm1.Button1Click(Sender: TObject);
var
  TabSheet: TTabSheet;
begin
  TabSheet := TTabSheet.Create(PageControl1);
  TabSheet.Caption := 'New Tab Sheet';
  TabSheet.PageControl := PageControl1;
end;
Run Code Online (Sandbox Code Playgroud)

2.如何在表格中嵌入表格?

要在选项卡表内插入表单,只需使用父更改:

Form2.Parent := TabSheet;
Form2.Show;
Run Code Online (Sandbox Code Playgroud)

3.在销毁时,我是否需要手动释放嵌入到标签页中的表单?

不,它足以释放标签页.在情况下,当形成将具有标签纸,或者更精确地说,TWinControl作为其Parent,该父将释放本身时照顾他们的释放.

  • @TLama [是(见这里)](http://stackoverflow.com/questions/7075637/delphi-ownership-confusion/7077151#7077151),父母也照顾孩子的破坏. (4认同)
  • 是不是所有权而不是控制生命的父母/子女? (3认同)
  • @David,好吧,我长期以来一直依赖它,但这是调试的结果。在`TWinControl`析构函数中,有一个(这里是简化的)循环,如ControlCount <> 0 do Controls [ControlCount-1] .Destroy;。这个循环会导致所有孩子死亡,所以现在我真的很困惑,如果所有这些答案都是正确的,那就是所有者和唯一的所有者负责组件的销毁是正确的,因为父母身份似乎是一样的。 (2认同)