Объединить вкладки из дочерней формы в основную форму

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

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

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

3 ответа

Решение

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

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

  • Создайте вкладку в главном элементе управления страницы формы, соответствующую дочерней вкладке

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

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

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

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

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

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

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

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

Другие вопросы по тегам