Свойство класса по умолчанию для логического объекта со значением true дает значение false во время выполнения - PullRequest
8 голосов
/ 04 августа 2011

У меня есть простой класс компонентов с логическим свойством:

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

  end;

Я положил его в форму, установил значение true ( SomeProperty установлено на false , почему?), Но когда я пытаюсь получить доступ к SomeProperty со времени выполнения это дает мне ложь. Почему это так?

Ответы [ 2 ]

15 голосов
/ 04 августа 2011

Это потому, что спецификатор default на самом деле не присваивает значение свойству, оно просто сообщает потоковой системе, какое значение является значением по умолчанию (и, следовательно, его не нужно сохранять). Вам все еще нужно инициализировать опору / поле в конструкторе до желаемого значения по умолчанию. Это задокументировано в help btw, прочитайте раздел " Спецификаторы хранения "

5 голосов
/ 04 августа 2011

Вы также должны установить свойство True в конструкторе - в противном случае это ошибка:

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

Значения по умолчанию определяют, что будет храниться в файле * .DFM. Если вы установили FSomeProperty на True во время разработки и значение по умолчанию для FSomeProperty равно True, то FSomeProperty не будет сохранено в * .DFM.

Если вы не инициализируете FSomeProperty в True в конструкторе, вы получите ошибку, которую вы описали - FSomeProperty появляется False во время выполнения, хотя было установлено True во время разработки.

...