首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> 语言基础 >> 正文
C++ Builder 初学问与答(5)
作者:ch_build…    文章来源:ch_builder    更新时间:2006-7-8 21:48:58
要注意一般你可能不喜欢用上面的那种形式,而写成如下格式:


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的开头部分加入:


#include “Unit2.h”

 

  在要调用的地方加入:


Form2->Show();//或是Form2->ShowModal();

 

  两者的区别在于若使用了ShowModal()则必须关闭Form2,才能处理其它窗口的内容,而Show()则不用。当然你可以直接在Form2直接创建一个Button1来关闭她,程序内容如下:


void _fastcall TForm2::Button1Click(Tobject *Sender)

{

 Close();

}

 

  在Close前,不需要加上Form2,因为这行程序就是在Form2上运行的,所以默认的父组件就是Form2。

相关文章:
调用挂机键时行为发生变化
S60平台: 使用DBMS APIs —DBMS的管理结构和元素(3)
C++ Builder 初学问与答(4)
C++ Builder 初学问与答(3)
C++ Builder 初学问与答(2)
C++ Builder 初学问与答(1)
Series60中如何动态改变按钮或关闭它们?
小心使用symbian的文件系统
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号