我有一个从基类派生的FileName属性的组件。基类在.Create上设置FileName。如果属性为空,则组件不会重写基类值。如果我将它设置为空白以外的值,它将覆盖基类值。在FileName属性上设置一个断点,我注意到只有当我设置一个值时,断点才会被命中,如果我将其留空,则不会被命中。这是否意味着 Delphi /C++Builder内部只保存/存储非空/空字符串的属性,以便在加载属性时没有属性可供使用?有什么东西能控制它吗?TIA!!
FileName
.Create
afdcj2ne1#
这是否意味着 Delphi /C++Builder内部只保存/存储非空/空字符串的属性,以便在加载属性时没有属性可供使用?这是正确的根据属性:存储规范文档:如果属性没有stored指令,则将其视为指定了storedTrue。...要覆盖继承的default值而不指定新值,请使用nodefault指令。default和nodefault指令仅支持序数类型和集合类型,前提是集合基类型的上限和下限具有0到31之间的序数值;如果在声明此类属性时没有default或nodefault,则会将其视为指定了nodefault。对于实数、指针和字符串,分别有一个隐式默认值0、nil和''(空字符串)。...保存组件状态时,将检查组件已发布属性的存储说明符。如果属性的当前值与其默认值不同(或者没有默认值),并且stored说明符为True,则保存属性的值。否则,不保存属性的值。
***注意:*属性值不会自动初始化为默认值。也就是说,default指令仅控制何时将属性值保存到表单文件,而不控制新创建的示例上的属性的初始值。
换句话说,字符串属性的默认值是空字符串,如果属性的当前值为空,或者其stored指令的计算结果为False,则该属性不会保存到DFM。
stored
False
1条答案
按热度按时间afdcj2ne1#
这是否意味着 Delphi /C++Builder内部只保存/存储非空/空字符串的属性,以便在加载属性时没有属性可供使用?
这是正确的根据属性:存储规范文档:
如果属性没有stored指令,则将其视为指定了storedTrue。
...
要覆盖继承的default值而不指定新值,请使用nodefault指令。default和nodefault指令仅支持序数类型和集合类型,前提是集合基类型的上限和下限具有0到31之间的序数值;如果在声明此类属性时没有default或nodefault,则会将其视为指定了nodefault。对于实数、指针和字符串,分别有一个隐式默认值0、nil和''(空字符串)。
...
保存组件状态时,将检查组件已发布属性的存储说明符。如果属性的当前值与其默认值不同(或者没有默认值),并且stored说明符为True,则保存属性的值。否则,不保存属性的值。
***注意:*属性值不会自动初始化为默认值。也就是说,default指令仅控制何时将属性值保存到表单文件,而不控制新创建的示例上的属性的初始值。
换句话说,字符串属性的默认值是空字符串,如果属性的当前值为空,或者其
stored
指令的计算结果为False
,则该属性不会保存到DFM。