Нарушение прав доступа при назначении свойства компонента в модуле данных
-
13-09-2019 - |
Вопрос
Я использую 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 не будет уничтожен, потому что я могу вернуться к нему.Есть идеи?
Решение
Мне кажется, что _ProjectName ноль.Попробуйте поставить точку останова в этой строке и проверить _ProjectName, посмотреть, дает ли она действительную ссылку или нет.