Pergunta

Estou no Delphi 2009 e meu aplicativo contém um módulo de dados, que possui um componente personalizado chamado 'Globals'.

De outra forma no aplicativo, estou tentando alterar uma propriedade publicada (uma string) no componente Globals:

  dm.Globals.qhProject := _ProjectName.Text; //always gives access violation

O controle do nome do nome é um descendente de tlabeledit. Eu sempre recebo uma violação de acesso aqui se houver algum texto na caixa.

No entanto, se eu manualmente assinando uma string na propriedade, não entendo o AV:

  dm.Globals.qhProject := 'some text'; //works

Aqui está a declaração da propriedade QHProject:

FqhProject: string;    
property qhProject: string read FqhProject write FqhProject;

Não consigo descobrir por que há um AV aqui. Tentei mover o pedido de criação automática do módulo de formulários/dados, mas sempre recebo o AV.

O que eu estou fazendo errado aqui?

Atualizar:

Estou usando efeitos de billenium TFormContainer para alternar entre diferentes formas no aplicativo. Ambas as formas envolvidas aqui estão no contêiner do formulário. Uma forma, tdlgSummary, contém o seguinte:

procedure TdlgSummary.SyncVars;
begin
    dm.Globals.qhProject := _ProjectName.Text
end;

A outra forma, tdlgfinalize, contém o seguinte:

dlgSummary.SyncVars;

Se eu executar o Syncvars dentro de DlgSummary, ele funciona bem. Se eu chamar de dlgfinalize, recebo o AV. Este parece ser o ponto crucial do problema, mas não consigo descobrir o que está dando errado. Mesmo que eu mude o controle para o dlgfinalize, o dlgSummary não foi destruído, porque posso voltar a ele. Alguma ideia?

Foi útil?

Solução

Parece -me como _projectName é nada. Tente colocar um ponto de interrupção nesta linha e examine _projectName, veja se ela fornece uma referência válida ou não.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top