Delphi / C++Builder 组件处理空字符串的属性?

问题描述 投票:0回答:1

我有一个具有从基类派生的

FileName
属性的组件。基类在
FileName
上设置
.Create
。如果属性为空,组件不会覆盖基类值。如果我将它设置为空白以外的值,它会覆盖基类值。

单步执行并在设置属性的

FileName
属性上设置断点我注意到断点只有在我设置一个值时才会命中,如果我将其留空则不会命中。

这是否意味着在 Delphi/C++Builder 内部只保存/存储非空白/空字符串的属性,以便在加载属性时没有可用的属性?

有什么东西可以控制吗?

TIA!!

delphi c++builder
1个回答
1
投票

这是否意味着在 Delphi/C++Builder 内部只保存/存储非空白/空字符串的属性,以便在加载属性时没有可用的属性?

说的对。根据 Properties: Storage Specifiers 文档:

如果一个属性没有 stored 指令,它被视为 stored True 被指定。

...

要覆盖继承的 default 值而不指定新值,请使用 nodefault 指令。 defaultnodefault 指令仅支持序数类型和集合类型,前提是集合的基类型的上限和下限的序数值介于 0 和 31 之间;如果声明这样的属性时没有使用 defaultnodefault,则它被视为指定了 nodefault。对于实数、指针和字符串,分别有一个隐式默认值 0、nil 和 ''(空字符串)。

...

保存组件状态时,检查组件发布属性的存储说明符。如果一个属性的当前值不同于它的 default 值(或者如果没有 default 值)并且 stored 说明符是 True,那么属性的值被保存。否则,属性的值不会被保存。

注意: 属性值不会自动初始化为默认值。也就是说,默认指令只控制属性值何时保存到表单文件,而不是新创建的实例上的属性初始值。

换句话说,字符串属性的默认值为空字符串,如果该属性的当前值为空,或者其

stored
指令的计算结果为
False
,则该属性不会保存到 DFM。

© www.soinside.com 2019 - 2024. All rights reserved.