| 要注意一般你可能不喜欢用上面的那种形式,而写成如下格式:
|
void _fastcall TForm1::Button1Click(TObject *Sender)
{
Tform2 *Forms;
Form2=new TForm2(Application);//动态创建Form2
……
} |
你要记住,无论你的子窗体创建是否完成,你都必须运行delete来释放你刚才创建的子窗体,当然你也可以把释放的过程写在OnClose事件函数内,这个函数有一个参数为Action,它有四个取值:caNone为不关闭窗体,什么也不操作;caHide为不关闭窗体,但把它隐藏起来;caFree为关闭窗体,同时释放内存;caMinimize为最小化窗体,不关闭。所以我们也可以象下面这样来释放子窗体。
|
void _fastcall TForm2::FormClose(Tobject *Sender,TcloseAction &Action)
{
Action=caFree;
} |
9)问:为什么我们用Close()不能关闭我当前活动的子窗体?
答:关闭当前活动窗体,很多人会用如下的方法:
|
void _fastcall TForm1::Button2Click(Tobjcet *Sender)
{
ActiveMDIChild->Close();//注意这是在主窗体(或者说在其它窗体)中来关闭当前活动的子窗体,这样做不好,一般的关闭应该象10)问中那样来做
} |
此时窗体并没有关闭,而是最小化了,因此要在子窗体的OnClose事件中用如下代码来关闭。
|
void _fastcall TForm2::FormClose(Tobject *Sender,TCloseAction &Action)
{
Action=caFree;
} |
这段程序不用多说了,上面都说过了。
这里有一点要说明一下,就是在调用Close()时,会自动触发OnClose事件,而由上我们知道窗体没有关闭,而是最小化,说明在OnClose中Action的此时的值为caMinimize。所以我们要写上面的方法来关闭。
10)问:Show()与ShowModal()有什么不同?
答:我们的程序中不可能就只有一个Form,比如,有Form1和Form2两个窗口,我们在Form1中调用Form2应该先在Unit1.cpp的开头部分加入:
在要调用的地方加入:
|
Form2->Show();//或是Form2->ShowModal(); |
两者的区别在于若使用了ShowModal()则必须关闭Form2,才能处理其它窗口的内容,而Show()则不用。当然你可以直接在Form2直接创建一个Button1来关闭她,程序内容如下:
|
void _fastcall TForm2::Button1Click(Tobject *Sender)
{
Close();
} |
在Close前,不需要加上Form2,因为这行程序就是在Form2上运行的,所以默认的父组件就是Form2。 |