Я сам сделал MRE, так как вы чувствовали, что вам не нужно его предоставлять. Далее Form1
является основной формой, а Form2
- дочерней формой
. Когда вы закрываете форму (например, Form2.Close;
), которая НЕ является основной формой, она не обязательно уничтожается. Действие закрытия по умолчанию для формы - caHide
, которое устанавливает только ее свойство Visible = False
, которое оставляет его существующим в памяти и готовым к повторному вызову.
Компоненты в вашей дочерней форме все еще являются родительскими до TLayout
в основной форме, поэтому скрытие дочерней формы не влияет на видимость компонентов. Чтобы исправить это, вы можете переместить компоненты обратно из основной формы в дочернюю форму:
procedure TForm2.Button1Click(Sender: TObject);
begin
Layout1.Parent := Self; // add this
Self.Close;
end;
или , вы можете уничтожить дочернюю форму в ее OnClose()
событии:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := TCloseAction.caFree;
end;
Это работает без переопределения компонентов, поскольку Form2 по-прежнему является владельцем компонентов, даже если родительский объект - Form1.