从滚动列表中删除动态创建的面板

时间:2018-04-25 20:32:21

标签: delphi delphi-10-seattle

希望我能恰当地表达出来。我在表单上有一个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 :(得分:2)

您可以在 TWFDetail 表单上使用TNorifyEvent。定义它:

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