Нарушение прав доступа при назначении свойства компонента в модуле данных
Я на 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, посмотреть, дает ли она правильную ссылку или нет.