控件设计: 如何为自定义控件实现 OnCreate() 事件? ( 积分: 50 )

  • 主题发起人 主题发起人 cxjlike
  • 开始时间 开始时间
C

cxjlike

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
Txxx = class(TComponent)
private
FOnCreate:TNotifyEvent;
public
constructor Create(AOwner: TComponent); override;
published
property OnCreate:TNotifyEvent read FOnCreate write FOnCreate;
end;

.............
constructor Txxx.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

if Assigned(FOnCreate) then
FOnCreate(self); //此时判断为假,事件无法被执行.

//我想,因为此时 .dfm 中保存的值 OnCreate 的方法指针,还没有读出,
//所以认为此事件未设置.
//可是,为什么 TForm.OnCreate() 可以实现?
//观察了TForm的代码,也没看懂,请各位献计
end;



换句话说,在构造器中,还不能访问到此对象实例在IDE中被设置的值.不但方法指针,其它属性也是.比如在IDE中设置Tag=5,在此处也读不出这个5.
如果能主动调用某方法,将保存在 dfm 中的值读出来应该就能解决问题了.
可怎么读?
 
Responds after the last constructor has executed.

Delphi syntax:

procedure AfterConstruction; virtual;

C++ syntax:

virtual void __fastcall AfterConstruction();

Description

AfterConstruction is called automatically after the object’s last constructor has executed. Do not call it explicitly in your applications.

The AfterConstruction method implemented in TObject does nothing. Override this method when creating a class that takes some action after the object is created. For example, TCustomForm overrides AfterConstruction to generate an OnCreate event.
 
请详细说说?不是太明白,谢谢.
 
重载AfterConstruction;方法后,在此方法中仍然无法访问 onCreate的方法指针.此时此方法指针还没有从.dfm流出.
换个说法,在IDE中设置 tag:=5, 在此方法中访问 tag得到的值还只是0,而不是5.因为设计期值还没有从 .dfm取出.
所以,在此处仍是无法实现 onCreate事件.

是否还有更详细需要设置?
 
可以试一下重载Loaded方法.
 
后退
顶部