Удалить динамически созданную панель из списка прокрутки - PullRequest
0 голосов
/ 25 апреля 2018

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

procedure TSettings.AddWFOnclick(Sender: TObject);
var
    dlg : TWFDetail;
    panel: TPanel;
    i    : Integer;
begin
    panel := TPanel.Create(self);

    dlg := TWFDetail.Create(self);

    panel.Parent := WFList;
    panel.clientheight := dlg.height;
    panel.align := alTop;
    panel.Top := 330;
    panel.Left := 0;

    dlg.Parent := panel;
    dlg.align := alClient;

    dlg.visible := True;

    dlg.Show;

end;

Вышеописанное прекрасно работает, чтобы добавить мою форму и панель.Как видно здесь: Add Panel Working

Проблема возникает, когда я пытаюсь закрыть dlg и удалить панель.У меня нет примера кода для этого.Я пробовал дюжину разных вещей и не могу понять это.Я закрываю форму закрытием вызова по нажатию красной буквы X, затем панель остается.Видно здесь: The issue

Мне нужно убрать пустую панель и сдвинуть все вверх.Я просто не могу обернуться вокруг него, так как панель создается динамически.

Структура родительских функций: TScrollBox> TPanel> MyForm

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете использовать TNorifyEvent в форме TWFDetail .Определите его:

property OnCloseForm:TNotifyEvent read FOnCloseForm write FOnCloseForm;

Когда вы закрываете форму, запустите событие, если назначено:

  Self.Close;

  if Assigned(OnCloseForm) then
    OnCloseForm(Self);

При создании формы присвойте событие OnCloseForm:

...
dlg.OnCloseForm := CloseForm;
...

И определите простую CloseForm процедуру для освобождения панели, которую вы используете для хранения формы:

var
  pnl:TPanel;
begin
  if (Sender is TWFDetail) then begin
    if TWFDetail(Sender).Parent is TPanel then begin
      pnl := TPanel(TWFDetail(Sender).Parent);
      pnl.Free;
    end;
  end;
end;

Есть несколько других способов сделать это, но это работает нормально.

enter image description here

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