从滚动列表中删除动态创建的面板
Remove a Dynamically Created Panel from Scroll List
希望我能正确表达这一点。我在表格上有一个 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
如有任何帮助,我们将不胜感激。
您可以在 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;
还有一些其他方法可以做到这一点,但这个工作正常。
希望我能正确表达这一点。我在表格上有一个 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
如有任何帮助,我们将不胜感激。
您可以在 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;
还有一些其他方法可以做到这一点,但这个工作正常。