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

StackOverflow https://stackoverflow.com/questions/976159

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top