Delphi - 如何在TFrame中关闭所在窗体?

4
在Delphi 2010中,我正在创建一个表单,然后创建一个TFrame,并将TFrame.Parent分配给表单,最后以模态方式显示表单。一切正常...该框架具有DBNavigator、DBFields等字段。当用户单击“发布/保存”时,我希望自动关闭表单。我尝试了一些方法,例如Close、Action = caFree、(DBNav.parent.parent) as TForm.Free等,但似乎都不起作用。怎样才能在TFrame中从内部关闭表单呢?
创建此内容的代码是...
 // Create the Window
    ThisWin := TEmptyFrameWin.Create(nil);

  // Create the Frame for the Window
  ThisFrame := TFrameUsage.Create(Application);

  ThisFrame.Parent := ThisWin;

  // Load the data
  ThisFrame.tUsage.Open;
  ThisFrame.tUsage.FindKey([StrToInt(ID)]);
  ThisFrame.LoadDateFields;

  ThisWin.Caption := 'Change Appointment Information';
  // Only show the POST button    
  ThisFrame.UsageNav.VisibleButtons := [sbPost];

  try
    ThisWin.ShowModal;
  finally
    ThisWin.Free;
  end;

感谢您的来信,
GS

1
对于TForm的子类,请使用“Release”而不是“Free”。 - Marcus Adams
1
这里不需要这样做,@Marcus。Release 是用于当窗体或其控件的消息处理程序正在销毁时。从此处所示的代码来看,在调用 Free 时,窗体不可能在处理任何消息,所以没问题。 - Rob Kennedy
1个回答

8

从框架类中的一个方法中,您可以通过调用GetParentForm来访问宿主表单。因此,以下内容将满足您的需求:

GetParentForm(Self).Close;

+1 不知道这个函数。我自己为不同的项目实现了几次。谢谢! - jpfollenius
这段代码实现了OP所要求的功能,但如果我在审核OP的代码时,我会说“这太糟糕了”。应该为框架添加一个OnRequestClose属性/事件(实际上是回调函数),并让拥有者窗体决定是否关闭以及在关闭前要执行什么逻辑,甚至是否连接回调函数。 - Warren P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接