Нарушение прав доступа при назначении свойства компонента в модуле данных - PullRequest
2 голосов
/ 10 июня 2009

Я на 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 Ответ

4 голосов
/ 10 июня 2009

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

...