我从 TPanel 继承类,想重载他的 Caption 属性,有些问题 ( 积分: 50 )

  • 主题发起人 主题发起人 searoom
  • 开始时间 开始时间
S

searoom

Unregistered / Unconfirmed
GUEST, unregistred user!
我重载他的目的就是想载用户更改 Caption 时触发一些动作
问题出现了:

原始的 TPanel 控件在我们往窗体上新加时会自动给 Caption 赋值,但我重载替换掉 Caption 后不会自动了,不知道该怎么办。

一般来说我们想覆盖掉父类原有的 属性应该怎么做?
我是在子类重新加一个 fCaption 成员,感觉这样不是很对
 
我重载他的目的就是想载用户更改 Caption 时触发一些动作
问题出现了:

原始的 TPanel 控件在我们往窗体上新加时会自动给 Caption 赋值,但我重载替换掉 Caption 后不会自动了,不知道该怎么办。

一般来说我们想覆盖掉父类原有的 属性应该怎么做?
我是在子类重新加一个 fCaption 成员,感觉这样不是很对
 
重新声明一下
 
重新声明一下?

我是在 Private 区新加了一个 fCaption 字段啊
然后在 Published 区新加了 Caption 属性。

我感觉这样做仅仅是把父类中的 Caption 属性屏蔽掉了
其结果便是该类并不会自动给 Caption 属性赋值
 
示例:
type
TMyPanel = class(TPanel)
private
FCaption: TCaption;
procedure SetCaption(const Value: TCaption);
function GetCaption: TCaption;
published
property Caption: TCaption read GetCaption write SetCaption;
end;

{ TMyPanel }

function TMyPanel.GetCaption: TCaption;
begin
FCaption := inherited Caption;
//Do some other thing
Result := FCaption;
end;

procedure TMyPanel.SetCaption(const Value: TCaption);
begin
FCaption := Value;
//Do some other thing
inherited Caption := Value;
end;
 
后退
顶部