delphi - 从滚动列表中删除动态创建的面板
问题描述
希望我能正确地表达这一点。我有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
任何帮助,将不胜感激。
解决方案
您可以使用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;
还有其他一些方法可以做到这一点,但这工作正常。
推荐阅读
- azerothcore - 在哪里设置辛达苟萨的泰尔粉碎法术范围
- pyspark - AttributeError:“NoneType”对象在 model.surrogateDF 上没有属性“setCallSite”
- javascript - 在 Firefox 的页面中找到添加以下 html 的源
- java - 尝试按日期查询时如何使用 Spring JPA 进行自定义查询?
- c# - 从 CMD 控制台运行已发布的 Web (C# MVC)
- python - 使用 Plotly 绘制密度直方图
- windows - 作业成功运行时出现 Rundeck 错误
- date - 在 Markdown 文本中查找和替换日期格式
- python - 如何从头开始将map和reduce函数实现为python中的递归函数?
- python - 超声波传感器不适用于树莓派