Динамически добавлять вкладки для управления страницей и встраивать форму?

Я работаю над модулем, состоящим из элемента управления страницей. По умолчанию этот элемент управления страницей (TPageControl) не должен иметь никаких вкладок (TTabSheet), но при инициализации он должен динамически вставлять эти страницы и вставлять внутри него форму.

Проблема связана с пониманием того, как вставить вкладку в элемент управления страницы. Как это создать? И как только он создается вместе с формами внутри каждого из них, как мне перебирать их, чтобы уничтожить формы?

Ответ 1

1. Как динамически создавать вкладку?

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

2. Как вставить форму внутри листа вкладки?

Чтобы вставить форму внутри листа вкладки, используйте просто родительское изменение:

Form2.Parent := TabSheet;
Form2.Show;

3. Должен ли я вручную освобождать формы, встроенные в лист вкладок, при их уничтожении?

Нет, достаточно освободить вкладку. В случае, если формы будут иметь вкладку или, если быть более точным, TWinControl в качестве Parent, этот родитель позаботится об их освобождении, освободив себя.

Ответ 2

Дэвид Хеффернан прав.

Form2.Parent := TabSheet;
Form2.Show;

Этот код просто означает, что родитель Form2 является TabSheet, а не владельцем.

Вы можете создать форму следующим образом:

Form2 := TForm2.Create(nil);

а затем освободите его самостоятельно. или вы можете создать такую ​​форму:

Form2 := TForm2.Create(Form1);

Form1 является владельцем Form2, и он автоматически освободит Form2, когда он будет освобожден.