Нарушение прав доступа при назначении свойства компонента в модуле данных

Я на Delphi 2009, и мое приложение содержит модуль данных, в котором есть пользовательский компонент с именем "Globals".

В другой форме приложения я пытаюсь изменить опубликованное свойство (строку) в компоненте Globals:

  dm.Globals.qhProject := _ProjectName.Text; //always gives access violation

Элемент управления _ProjectName является потомком TLabeledEdit. Я всегда получаю здесь нарушение прав доступа, если в поле есть текст.

Однако, если я вручную присваиваю строку свойству, я не получаю AV:

  dm.Globals.qhProject := 'some text'; //works

Вот объявление свойства qhProject:

FqhProject: string;    
property qhProject: string read FqhProject write FqhProject;

Я не могу понять, почему здесь есть AV. Я пытался переместить порядок автоматического создания модуля форм / данных, но я всегда получаю AV.

Что я здесь не так делаю?

Обновить:

Я использую Billenium Effects TFormContainer для переключения между различными формами в приложении. Обе формы, которые здесь задействованы, находятся в контейнере форм. Одна форма, TdlgSummary, содержит следующее:

procedure TdlgSummary.SyncVars;
begin
    dm.Globals.qhProject := _ProjectName.Text
end;

Другая форма, TdlgFinalize, содержит следующее:

dlgSummary.SyncVars;

Если я запускаю SyncVars внутри dlgSummary, он работает нормально. Если я позвоню из dlgFinalize, я получу AV. Это, кажется, суть проблемы, но я не могу понять, что происходит не так. Даже если я переключу управление на dlgFinalize, dlgSummary не был уничтожен, потому что я могу вернуться к нему. Есть идеи?

1 ответ

Решение

Похоже, что _ProjectName это ноль. Попробуйте поставить точку останова в этой строке и проверить _ProjectName, посмотреть, дает ли она правильную ссылку или нет.

Другие вопросы по тегам