我正在使用 RAD Studio 10 处理 Windows VCL 应用程序。我有两个表单,Form1
(MainForm in Unit1.cpp
)和一个辅助表单Form2
(in Unit2.cpp
)。我设法嵌入Form2
到Form1
. 这只是说明问题的设置。我的真实项目有多个表格。
关闭时Form2
,VCL 触发Form2::OnClose()
事件。知道这Form2
是在Form1
(MainForm)中动态创建的,是否有一个Form1
事件会在Form2
关闭时触发?或者内部Form1
知道Form2
正在关闭的东西?
- 我正在考虑自定义一个事件处理程序,
OnChildFormClose
但我做不到。 - 我尝试将要在关闭
Form1
时执行的代码包装Form2
在公共函数中并在Form2::OnClose()
事件中调用它,并且它在一定程度上起作用,但如果您有多个表单,这不是一个好方法。
//FROM THE unit1.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//-----------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-----------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-----------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TForm2 *form2 = new TForm2(this);
form2->ManualDock(container);
form2->Show();
}
//FROM unit2.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
//-----------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//-----------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//-----------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Close();
}
//-----------------------------------------------------------------------
我可以用一个我们可以动态转换来检查它是否是的OtherFormsonClose(*Sender)
事件,或者我错了?我会很感激一些指导。Form1
Sender
Form2