布尔值设置为true的类默认属性在运行时给出false

时间:2011-08-04 15:22:14

标签: delphi delphi-2010

我有一个带布尔属性的简单组件类:

  TmyClass = class(TComponent)
    private
      fSomeProperty: boolean;
    published
      property SomeProperty: boolean 
                  read fSomeProperty 
                  write fSomeProperty
                  default true;

  end;

我把它放在我的表单上,将其设置为true( SomeProperty 设置为 false ,为什么?),但是当我尝试访问时来自运行时的SomeProperty 它给了我假。为什么会这样?

2 个答案:

答案 0 :(得分:15)

这是因为default说明符实际上没有将值赋给属性,它只是向流系统说明哪个值是默认值(因此不需要保存)。您仍然需要将构造函数中的prop / field初始化为所需的默认值。这在help btw中记录,请阅读“Storage Specifiers”部分

答案 1 :(得分:5)

您还应该在构造函数中将该属性设置为True - 否则会出错:

constructor TMyClass.Create(AOwner: TComponent);
begin
  inherited;
  FSomeProperty:= True;
  ...
end;

默认值确定将存储在* .DFM文件中的内容。如果您在设计时将FSomeProperty设置为TrueFSomeProperty的默认值为True,那么FSomeProperty将不会存储在* .DFM中。< / p>

如果您未在构造函数中初始化FSomePropertyTrue,则会出现您所描述的错误 - FSomeProperty在运行时显示为False,但它已设置为{{ 1}}在设计时。