一个关于继承,而又想在父类的CONSTRUCTOR中实行对某个值的问题?(200分)

  • 主题发起人 主题发起人 heimukai
  • 开始时间 开始时间
H

heimukai

Unregistered / Unconfirmed
GUEST, unregistred user!
我从TFORM继承了一个类,我想设置FORM的CAPTION属性。
例如,我在设计时候设置此子类的CAPTION属性为:“AAA”,但是我在子类的CCONSTRUCTOR CREATE中写到:
inherited ;
self.Caption := '';
我想要的效果的是:一开始显示FORM的时候,他的CAPTION就为空,但是总会有一个从AAA到空值的闪烁
因为inherited一定要放到前面,执行此语句之后才能正确的访问他其他属性,否则会出现地址越界的错误。
所以我想问问各位,怎样才能做到我要求的一开始显示FORM的时候就直接显示空的CAPTION而没有从AAA到空值的这个闪烁的过程。
我这里说的AAA和空值只是打个比方,所以千万别告诉我说在设计的时候就把CAPTION的值设置成空或者你想要的
 
你在说什么呀?
我理解是在父子类中都要对一个变量赋值,要避免创建子类的实例是变量值的瞬间变化,
(父类先赋值,子类后赋值),不知道对不对。
我大概想了一下,有以下一种实现:
在父类中声明一个构造函数,把变量赋值放在这个函数中,这样只有一个赋值点,就避免了
值的瞬间变化。
父类:
声明:
TForm1 = class(TForm)
public
constructor CreateMe(AOwner: TComponent; s: string = ''); virtual;
end;
实现:
constructor TForm1.CreateMe(AOwner: TComponent; s: string);
begin
inherited Create(AOwner);
Caption := s;
end;
子类:
声明:
TForm2 = class(TForm1)
public
constructor CreateMe(AOwner: TComponent; s: string = ''); override;
end;
实现:
constructor TForm2.CreateMe(AOwner: TComponent; s: string);
begin
inherited CreateMe(AOwner, s);
end;
创建子类的实例时用CreateMe(A, 'aaa'),
当然在这里子类的CreateMe声明和实现可以不用写,直接继承父类的,写出来只是说明一下问题。

另:好长时间不用Delphi了,感觉对一些基本东西都生疏的很了,不知道有没有问题,
或者有更好的实现方法,也不知道是否符合你的问题。
 
Create 在 Show 之前就已经完成了,怎么还会有闪烁出现。
 
同意 Lyte Zeng
除非你在父类重载的Create方法中调用了Show,否则不会出现这种问题
 
有些代码在Create中设置有问题或无效时,你可以考虑在Loaded中设置。此时控件已经Create了,
但还没有Show,所以应该没有闪烁的情况。
 
后退
顶部