Forms Delphi-如何从表单上的TFrame中关闭表单?
在Delphi2010中,我创建一个表单,然后创建一个TFrame,将TFrame.Parent分配给表单,然后以模态方式显示表单。工作很好。。。框架有一个DBNavigator、一个DBFields等。当用户单击Post/Save时,我想自动关闭表单。我尝试了一些方法,比如Close,Action=caFree,(DBNav.parent.parent)作为TForm.Free,等等,但似乎没有任何效果。如何从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
// 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
。这里不需要这样做,@MarcusRelease
用于从表单或其某个控件的消息处理程序中销毁表单。从这里显示的代码来看,表单不可能在调用Free
时处理任何消息,因此一切正常。