请教一个简单的问题,我实在有点糊涂

yasaka 2002-03-06 04:14:06
在C++Builder中,窗体(TForm)有一个常用事件OnCreate,在Form1被创建的时候触发,
void __fastcall TForm1::FormCreate(TObject *Sender)
{

}
那么,在该窗体的构赵造函数TForm1也是在Form1创建的时候被调用

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

}
这两者有什么区别吗?
菜鸟级问题,让各位高手见笑了!
...全文
110 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxgxxggxxgxx 2002-03-08
  • 打赏
  • 举报
回复

OnCreate/OnClose主要用于

当类不是你自己定义的情况

比如TImage的OnCreate等

当然TForm1是你定义的,一般就用TForm1::TForm1()处理
而不轻易用OnCreate事件
Wingsun 2002-03-08
  • 打赏
  • 举报
回复
一个是构造函数,一个是消息相应函数,两者的调用先后次序受到OldCreateOrder的影响。
kingcaiyao 2002-03-08
  • 打赏
  • 举报
回复
FormCreate函数应是BCB对WM_CREATE消息的封装,而构造函数是没有返回值的,构造函数应先于FormCreate函数执行,FormCreate函数是响应OnCreate事件时执行,而OnCreate应是对WM_CREATE消息的封装,它是通知类型的事件即:TNotifyEvent有一个参数Sender,即指向该窗体的指针,事实上BCB使用的是事件委托机制,它发送WM_CREATE消息时,交由该OnCreate事件来处理,而OnCreate事件处理函数就是FormCreate
marcal 2002-03-07
  • 打赏
  • 举报
回复
pp616(平平) 说:“如果你在构造中去用了窗体中的控件那就会出错。”
但是实际上我专门试过
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Button1->Caption="qqqq";
}
是没有问题的,所以我对pp616(平平)这种看法表示反对!!
TR@SOE 2002-03-07
  • 打赏
  • 举报
回复
根据TEAM B的建议,应该使用构造/析构函数,而不应该使用OnCreate/OnClose,后者是由于VCL来源于OBJECT PASCAL而产生的。不是标准的C++构造/析构方法。

详情可以参阅www.trackon.net/bcblist/resource.asp里的一篇文章。
xyzguan 2002-03-07
  • 打赏
  • 举报
回复
楼上的有理
勉励前行 2002-03-07
  • 打赏
  • 举报
回复
事件函數可以重復調用 ,
構造函數就請不要調用了.....會出錯的。
xxgxxggxxgxx 2002-03-07
  • 打赏
  • 举报
回复

pp616(平平)说的也不错

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Button1->Caption="qqqq";
}

因为继承自TForm::TForm() ,而又不动态创建组件
所以:自动创建(设计时)子组件的功能已经由TForm::TForm()继承下来
Behard 2002-03-06
  • 打赏
  • 举报
回复
还是用 DEBUG 看一看,哪一个先吧!
pp616 2002-03-06
  • 打赏
  • 举报
回复
构造函数是C++创建一个类的实例时运行。
而FormCreate事件是在窗体已经实例话了。在显示之前触发的时间。
一般在构造函数中放一些初始化类的代码如分配内存什么的。
而在FormCreate中放一写窗体设置的代码。
如果你在构造中去用了窗体中的控件那就会出错。

marcal 2002-03-06
  • 打赏
  • 举报
回复
通过以下程序知道是先运行构造函数,然后才是FormCreate
//------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ShowMessage("TForm1::TForm1");
}
//------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
ShowMessage("FormCreate");
}
//------------------------------------------------------------------
sliant 2002-03-06
  • 打赏
  • 举报
回复
第一个:TForm1::FormCreate
这是个事件,是windows在窗口创建时发给窗口的消息;
第二个:TForm1::TForm1
这是构件函数,是C++编译器在new一个对象时自动调用的构建函数

TForm1::TForm1要比TForm1::FormCreate先;两个都是在form显示之前就会运行的
wltom 2002-03-06
  • 打赏
  • 举报
回复
说说我的一点看法:

1、一个是事件函数,一个是构造函数,所以一个有返回值,一个没有;
2、构造函数是在初始对象时就执行,先于事件函数执行

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧