怎么使用父类的私有变量(50分)

  • 主题发起人 主题发起人 dyzw
  • 开始时间 开始时间
D

dyzw

Unregistered / Unconfirmed
GUEST, unregistred user!
自己写了一个类 TMyScrollBox = Class(TScrollBox)
实现的时候想调用FControlState这个变量,怎么试都不行,请高手指点!
代码如下:
TMyScrollBox = Class(TScrollBox)
private
procedure OnResizeA(Sender: TObject);
procedure WMPaint(var Message: TWMPaint);
message WM_PAINT;
protected
procedure PaintWindow(DC: HDC);
override;
public
constructor Create(Owner: TComponent);
override;
destructor Destroy;
override;
end;
。。。。。。
procedure TMyScrollBox.WMPaint(var Message: TWMPaint);
begin
Include(Self.FControlState, csCustomPaint);
PaintHandler(Message);
end;
 
子类不能调用父类的private区内的变量/函数/过程
只能把父类的相应变量写到protected区
或者,还有一种情况,就是跟父类写在同一个单元文件里,这样的话,这两个类就互为友元类,子类可以调用父类的private区里的内容。
但不建议这样做,破坏了OOP的原则。
 
dyzw兄不看源码吧?FControlState有public里面的property啊!干嘛要访问FControlState,直接访问ControlState就可以了啊。

TControl = class(TComponent)
private
//...
FControlState: TControlState;
//...
public
//...
property ControlState: TControlState read FControlState write FControlState;
//...
end;
 
受教了,一下子学到了两个知识。非常感谢!
还想问的是:
Include(ControlState, csCustomPaint);
这句话报错,说:Left side cannot be assigned to
如果用ControlState := ControlState + [csCustomPaint];
就可以了,这是什么原因
 
貌似做为Property的话,只能用ControlState := ControlState + [csCustomPaint];
如果做为字段的话,,可以用FControlState := FControlState + [csCustomPaint];
OR
Include(FControlState, csCustomPaint);
唉~也不知道对不对,呵呵。。。
 
要用include也行,不过要借助一个变量
var
CS: TControlState;
begin
CS := ControlState;
Include(CS, csCustomPaint);
ControlState := CS;
...
end;
不过这样做实在是多余,直接用+就可以了!Delphi自己也用的+。
 
顺便发个交流群:delphi天堂群:4654765,不去是你的损失 ,长期不发言者勿入
 
非常感谢
 
后退
顶部