希望我能恰当地表达出来。我在表单上有一个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;
当我尝试关闭dlg并删除面板时,会出现问题。我没有任何示例代码。我已经尝试了十几种不同的东西,似乎无法弄明白。我点击红色X时关闭表格,然后面板保持不变。见到这里:
我需要能够移除空白面板并将所有内容都移开。因为面板是动态创建的,所以我似乎无法绕过它。
育儿结构为TScrollBox
> TPanel
> MyForm
任何帮助都将不胜感激。
答案 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;
还有其他一些方法,但这很好。