Create过程到底干了什么?(100分)

  • 主题发起人 主题发起人 j5203
  • 开始时间 开始时间
J

j5203

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个控件,在它的Create过程中只有一句话:showmessage(self.Name);
constructor Tp.Create(AOwner: TComponent);
begin
showmessage(self.Name);
end;
在我把这个控件放到Form上时,这个消息框弹出了,但是没有提示的内容,也就是说
self.name为空(这是我观察object inspector,name属性已经给出了默认值p1)。
我更改name属性的值,然后运行这个程序,消息框再次弹出,同样没有提示的内容,
也就是说self.name还是为空。
这就说明Create过程并没有给控件的属性赋值,那Create过程到底干了什么?
控件的初值的赋值到底是在什么时候,由哪个过程完成的?
 
試一下,我也不知道行不行,不過你可以跟蹤源碼,看看name是什么時候賦值的.
constructor Tp.Create(AOwner: TComponent);
begin
inherited Create(AOwen);
showmessage(self.Name);
end;
 
onactive事件上操作是经典的解决办法
 
设计时设置的 Name 被保存到 dfm 文件中,它实际是一种资源文件,保存了你的 Form(或
Frame) 和该 Form 上所有组件的非缺省的属性,dfm 会被链接到生成的 exe文件中,运行
时,一个 Form(或 Frame) 创建时,会从程序资源中读取自己对应的 dfm 文件的内容,将
其中保存的属性值并赋给自己及子组件相应的属性。具体可以看看 TCustomForm.Create
方法。运行时 Form 上组件被创建时这些属性包括 Name 还未从资源中恢复。你可以
override TComponent.Loaded 方法,在该方法中 Self.Name 应该已被赋为设计时的值。
 
后退
顶部