Объединить вкладки из дочерней формы в основную форму - PullRequest
2 голосов
/ 26 августа 2009

У меня есть элемент управления страницы в основной форме и элементы управления страницы в дочерней форме, я поместите дочернюю форму в основную форму, используя функции закрепления.

Я не использую стиль MDI

Теперь обе формы имеют вкладки в элементе управления страницей, и мне нужно объединить дочернюю форму вкладки в основной элемент управления страницы формы, как это лучше всего сделать?

Ответы [ 3 ]

4 голосов
/ 26 августа 2009

Самый простой и лучший способ обработки нескольких вкладок в элементе управления страницы - это обычно Frames. Возьмите содержимое каждой вкладки и разбейте их на отдельные рамки для каждой вкладки. Переместите любые общие компоненты, состояние и код в модуль данных. Затем просто поместите эти фреймы на вкладки вашего элемента управления страницы.

2 голосов
/ 27 августа 2009

Это довольно простой подход, который может или не может удовлетворить ваши потребности.

Для каждой дочерней вкладки необходимо объединить:

  • Создать вкладку на главной странице формы контроль, соответствующий ребенку Вкладка

  • Перебрать элементы управления в дочерней вкладке и измените Parent свойство на вкладке вы просто создано

Вам не нужно иметь дело с элементами управления, которые являются потомками других элементов управления. например если на дочерней вкладке есть групповой ящик, то при изменении его родителя и его родительский элемент , и все элементы управления в нем будут переданы новому родителю.

Если вам нужно в любой момент «разложить» ваши вкладки, вам нужно будет разработать какой-то механизм, чтобы отслеживать, откуда поступили элементы управления, чтобы вы могли восстановить исходный Parent как / когда нужно.

Чтобы немного упростить задачу, вы можете поместить TPanel на дочерние вкладки, установив для свойства Align значение alClient . Поместите все элементы управления во вкладку на этой панели, а затем, когда вам нужно объединить / удалить, вам нужно только установить Parent панели управления.

0 голосов
/ 27 августа 2009

Я только что попробовал

procedure TForm1.Button1Click(Sender: TObject);
begin
  while Form2.PageControl1.PageCount > 0 do
    Form2.PageControl1.Pages[0].PageControl := PageControl1;
end;

и все работало нормально. Я упускаю что-то очевидное или почему все предлагают такие сложные решения? : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...