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

0dxa2lsx  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(286)

我有一个从基类派生的FileName属性的组件。基类在.Create上设置FileName。如果属性为空,则组件不会重写基类值。如果我将它设置为空白以外的值,它将覆盖基类值。
FileName属性上设置一个断点,我注意到只有当我设置一个值时,断点才会被命中,如果我将其留空,则不会被命中。
这是否意味着 Delphi /C++Builder内部只保存/存储非空/空字符串的属性,以便在加载属性时没有属性可供使用?
有什么东西能控制它吗?
TIA!!

afdcj2ne

afdcj2ne1#

这是否意味着 Delphi /C++Builder内部只保存/存储非空/空字符串的属性,以便在加载属性时没有属性可供使用?
这是正确的根据属性:存储规范文档:
如果属性没有stored指令,则将其视为指定了storedTrue
...
要覆盖继承的default值而不指定新值,请使用nodefault指令。defaultnodefault指令仅支持序数类型和集合类型,前提是集合基类型的上限和下限具有0到31之间的序数值;如果在声明此类属性时没有defaultnodefault,则会将其视为指定了nodefault。对于实数、指针和字符串,分别有一个隐式默认值0、nil和''(空字符串)。
...
保存组件状态时,将检查组件已发布属性的存储说明符。如果属性的当前值与其默认值不同(或者没有默认值),并且stored说明符为True,则保存属性的值。否则,不保存属性的值。

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

换句话说,字符串属性的默认值是空字符串,如果属性的当前值为空,或者其stored指令的计算结果为False,则该属性不会保存到DFM。

相关问题