gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:08:07 25 4
gpt4 key购买 nike

希望我能正确地表达这一点。我的表单上有一个 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

如有任何帮助,我们将不胜感激。

最佳答案

您可以在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

关于delphi - 从滚动列表中删除动态创建的面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50030879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com