我有一个带布尔属性的简单组件类:
TmyClass = class(TComponent)
private
fSomeProperty: boolean;
published
property SomeProperty: boolean
read fSomeProperty
write fSomeProperty
default true;
end;
我把它放在我的表单上,将其设置为true( SomeProperty 设置为 false ,为什么?),但是当我尝试访问时来自运行时的SomeProperty 它给了我假。为什么会这样?
答案 0 :(得分:15)
这是因为default
说明符实际上没有将值赋给属性,它只是向流系统说明哪个值是默认值(因此不需要保存)。您仍然需要将构造函数中的prop / field初始化为所需的默认值。这在help btw中记录,请阅读“Storage Specifiers”部分
答案 1 :(得分:5)
您还应该在构造函数中将该属性设置为True - 否则会出错:
constructor TMyClass.Create(AOwner: TComponent);
begin
inherited;
FSomeProperty:= True;
...
end;
默认值确定将存储在* .DFM文件中的内容。如果您在设计时将FSomeProperty
设置为True
,FSomeProperty
的默认值为True
,那么FSomeProperty
将不会存储在* .DFM中。< / p>
如果您未在构造函数中初始化FSomeProperty
到True
,则会出现您所描述的错误 - FSomeProperty
在运行时显示为False
,但它已设置为{{ 1}}在设计时。