gpt4 book ai didi

delphi - 通过包含表单的按钮在运行时删除选项卡

转载 作者:行者123 更新时间:2023-12-01 19:17:29 26 4
gpt4 key购买 nike

我在运行时创建选项卡,如下所示:

procedure TForm1.ShowFormOnTab(pProcName:String);
var
Newform: TForm;
ClassToUse: TFormClass;

NewTab: TTabSheet;
FormName: String;

begin
NewTab := TTabSheet.Create(PageControl1);
NewTab.PageControl:= PageControl1;

PageControl1.ActivePage := NewTab;

if pProcName='ProcfrmSetupItemCategories' then
ClassToUse := TfrmSetupItemCategories
else if pProcName='ProcfrmZones' then
ClassToUse := TfrmZones
else
ClassToUse := nil;
if Assigned(ClassToUse) then
begin
NewForm := ClassTouse.Create(NewTab);
NewTab.Caption := NewForm.Caption;
end;

现在,选项卡可以正确显示,并且表单也可以显示在选项卡上。我需要这样做,因为表单+选项卡是在运行时创建的。

但这是我的问题:表单上有一个关闭按钮,单击该按钮可释放表单的资源。但我也希望在单击表单按钮时关闭选项卡。

我该如何解决这个问题?

谢谢!

最佳答案

您只需释放标签页即可。您不需要单独释放选项卡的子项。只需在选项卡上调用 Free 即可完成。

但是,如果该按钮位于正在释放的选项卡上,则该按钮将不起作用。无法从按钮的 OnClick 事件处理程序中释放按钮的父级。

解决方案是给自己发一条消息。该消息需要包含释放选项卡所需的信息。通过发布消息,您可以允许 OnClick 事件处理程序在处理排队的消息之前运行完成。

const
WM_FREECONTROL = WM_USER;
....
PostMessage(Self.Handle, WM_FREECONTROL, 0, LParam(TabSheet));

然后将消息的处理程序添加到表单:

procedure WMFreeControl(var Message: TMessage); message WM_FREECONTROL;

并像这样实现它:

procedure TForm1.WMFreeControl(var Message: TMessage);
begin
TObject(Message.LParam).Free;
end;

现在,写完这篇冗长的回复后,请务必明确,第 2 段以后的建议仅适用于按钮是正在释放的控件的子级的情况。

关于delphi - 通过包含表单的按钮在运行时删除选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13826623/

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