Динамически добавлять вкладки в элемент управления страницы и вставлять форму?
Я работаю над модулем, который состоит из элемента управления страницы. По умолчанию этот элемент управления страницы (TPageControl
) не должно быть никаких вкладок (TTabSheet
), но после инициализации он должен динамически вставлять эти страницы и вставлять в них форму.
Проблема заключается в том, чтобы знать, как вставить вкладку в элемент управления страницы. Как мне это создать? И как только он будет создан, вместе с формами внутри каждой, как мне пройти через них, чтобы уничтожить формы?
3 ответа
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
этот родитель позаботится об их освобождении при освобождении.
Дэвид Хеффернан прав.
Form2.Parent := TabSheet;
Form2.Show;
Этот код означает, что родитель Form2 - это TabSheet, а не его владелец.
Вы можете создать форму следующим образом:
Form2 := TForm2.Create(nil);
и затем освободите это самостоятельно. или вы можете создать такую форму:
Form2 := TForm2.Create(Form1);
Form1 является владельцем Form2, и она автоматически освобождает Form2, когда сама освобождается.
Я делаю то же самое в проекте, который имеет более 100 форм (по одной на DLL). Я установил действие FormClose на caFree — некоторые клиенты используют этот продукт круглосуточно в течение пары лет без проблем. Утечки обнаружены только в Borland VCL. Проект начался в D5, затем в D7, и мы находимся в процессе переноса на Alexandria 11.2 (думаю, на D35). Я могу портировать на Lazarus и мигрировать на пользователей настольных компьютеров Mac и Linux.