Forms Delphi-如何从表单上的TFrame中关闭表单?

Forms Delphi-如何从表单上的TFrame中关闭表单?,forms,delphi,tframe,Forms,Delphi,Tframe,在Delphi2010中,我创建一个表单,然后创建一个TFrame,将TFrame.Parent分配给表单,然后以模态方式显示表单。工作很好。。。框架有一个DBNavigator、一个DBFields等。当用户单击Post/Save时,我想自动关闭表单。我尝试了一些方法,比如Close,Action=caFree,(DBNav.parent.parent)作为TForm.Free,等等,但似乎没有任何效果。如何从TFrame中关闭表单 创建这个东西的代码是 // Create the Wind

在Delphi2010中,我创建一个表单,然后创建一个TFrame,将TFrame.Parent分配给表单,然后以模态方式显示表单。工作很好。。。框架有一个DBNavigator、一个DBFields等。当用户单击Post/Save时,我想自动关闭表单。我尝试了一些方法,比如Close,Action=caFree,(DBNav.parent.parent)作为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

从frame类中的方法,可以通过调用
GetParentForm
来访问宿主窗体。因此,以下内容将满足您的需要:

GetParentForm(Self).Close;

成功了。谢谢。+1不知道这个函数。我自己为不同的项目实施了几次。谢谢这是OP要求的,但如果我在查看OP的代码,我会说“太糟糕了”。让框架有一个
OnRequestClose
属性/事件(实际上是一个回调),让所有者表单决定是否关闭,关闭前它想做什么逻辑,甚至是否连接回调。对于TForm的子类,使用
Release
而不是
Free
。这里不需要这样做,@Marcus
Release
用于从表单或其某个控件的消息处理程序中销毁表单。从这里显示的代码来看,表单不可能在调用
Free
时处理任何消息,因此一切正常。