Overload Create->FormCreate->FormShow事件的执行顺序疑问...(50分)

  • 主题发起人 gondsoft
  • 开始时间
G

gondsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
constructor Create(AOwner: TComponent;s:String);overload;

implementation

constructor TForm.Create(AOwner: TComponent;s:String);
begin
//执行FormCreate事件中的代码
inherited Create(AOwner)
//执行此句后跳到下面的FormCreate事件中执行
ShowMessage(s);
end;

procedure TForm.FormCreate(Sender: TObject);
begin
s:=s+Caption

//问题:执行此句后为何进入FormShow事件中执行? 怎么不是执行上面的Showmessage语句呢?
//FormShow事件应该是调用窗口实例调用.Show时才会执行呀,这是怎么回事?
//若我想实现在上面Create事件中的代码执行完后再让程序执行这里(FormCreate)的代码该怎么做?
end;
 
inherited Create(AOwner)本来就是调用FormCreate(),
所以“//执行此句后跳到下面的FormCreate事件中执行”也就不足为奇了。

至于“ s:=s+Caption
//问题:执行此句后为何进入FormShow事件中执行?”,
那时因为修改了与界面相关的内容,所以回进入FormShow。

“//若我想实现在上面Create事件中的代码执行完后再让程序执行
这里(FormCreate)的代码该怎么做?”
这也简单,
constructor TForm.Create(AOwner: TComponent;s:String);
begin
//执行需要先执行的代码
ShowMessage(s);
inherited Create(AOwner)
//这行放在最后
end;
不过这样做有可能不安全,因为“执行需要先执行的代码”中如果包含
Create之后才能访问的属性就可能出错。
如果作过组件就应该清楚,在Create中应该先调用基类的Create,
而Destory刚好相反,应该先调用继承类的Destory,再调用基类的Destory。

 
>>原来如此:是因为修改了与界面相关的内容才会进入FormShow的呀。
谢谢了!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
919
DelphiTeacher的专栏
D
顶部