【发布时间】:2013-12-31 16:20:52
【问题描述】:
我有一对组件,其中一个组件通过设置属性“附加”到另一个组件。比如……
type
TMain = class(TComponent)
...
published
property Default: Integer read FDefault write SetDefault;
end;
TSub = class(TComponent)
...
published
property Value: Integer read GetValue write SetValue;
property Main: TMain read FMain write SetMain;
end;
所以在TSub 的对象检查器中,用户会选择与之关联的TMain。
在子组件中,我有一个属性Value,它有一个getter 和一个setter。如果子组件的值设置为0,则getter 会从它所附加的TMain 中获取Default 属性...
function TSub.GetValue: Integer;
begin
if FValue = 0 then begin
if Assigned(FMain) then begin
Result:= FMain.Default;
end else begin
Result:= 0;
end;
end else begin
Result:= FValue;
end;
end;
这使得对象检查器(以及其自身的属性)从主检查器返回默认值,而不是设置的 0 值。
我想做的是确保当 TSub 组件的属性保存到 DFM 时,如果它是 0,它不会保存此属性(因此使用 main 中的默认值)。目前,在保存 DFM 后,来自 main 的默认值的任何值都将保存在 sub 的值中,这不是我想要的。
自然地,属性将被标记为default 0;,例如表示如果属性的值设置为0,则该属性将不会保存到 DFM 中。但由于默认值可能会有所不同,因此我无法为该属性标记默认值(因为它需要定义默认值)。
如果TSub 组件已设置为0,我如何构造TSub 组件以不将此属性保存到DFM,而是使用属性getter 中main 中的默认值? p>
【问题讨论】:
标签: delphi properties components delphi-xe2 default-value