데이터 모듈에 구성 요소 속성을 할당 할 때 액세스 위반
-
13-09-2019 - |
문제
저는 Delphi 2009에 있으며 내 응용 프로그램에는 '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;
dlgsummary 내부에서 syncvars를 실행하면 잘 작동합니다. dlgfinalize에서 호출하면 AV를 얻습니다. 이것은 문제의 핵심 인 것처럼 보이지만 무엇이 잘못되고 있는지 알 수 없습니다. DLGFinalize로 제어를 전환하더라도 DLGSUMMARY는 다시 돌아갈 수 있기 때문에 파괴되지 않았습니다. 어떤 아이디어?
해결책
_projectName처럼 저를 보입니다 무. 이 줄에 중단 점을 놓고 _projectName을 검사하고 유효한 참조를 제공하는지 확인하십시오.