如何有条件地将属性保存到 DFM?
Posted
技术标签:
【中文标题】如何有条件地将属性保存到 DFM?【英文标题】:How to conditionally make a property save to the DFM or not? 【发布时间】: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>
【问题讨论】:
docwiki.embarcadero.com/RADStudio/en/… 【参考方案1】:property Value: Integer read GetValue write SetValue stored IsValueStored;
在哪里
function TSub.IsValueStored: Boolean;
begin
Result := (FValue <> 0) or (FMain = nil);
end;
如果我猜对了。
【讨论】:
@Jerry - 谢谢。不要忘记查看documentation。 完全按照我的需要工作,再次感谢 Sertac以上是关于如何有条件地将属性保存到 DFM?的主要内容,如果未能解决你的问题,请参考以下文章
如何有效地将 Pandas Dataframe 保存到一个/多个 TFRecord 文件中?
如何正确地将时区设置为 UTC,以便以这种格式正确保存和检索所有时间戳?