Я на 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 не был уничтожен, потому что я могу вернуться к нему. Есть идеи?