문제

저는 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을 검사하고 유효한 참조를 제공하는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top