Violazione di accesso quando si assegna proprietà del componente sul modulo dati

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

  •  13-09-2019
  •  | 
  •  

Domanda

Sono su Delphi 2009, e la mia applicazione contiene un modulo di dati, che ha una componente personalizzato denominato 'Globali' su di esso.

In un'altra forma nella domanda, sto cercando di modificare una proprietà pubblicata (una stringa) sul componente Globals:

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

Il controllo _ProjectName è un discendente TLabeledEdit. Ho sempre trovato una violazione di accesso qui se non c'è alcun testo nella casella.

Tuttavia, se assing manualmente una stringa alla proprietà, non ho ricevuto l'AV:

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

Ecco la dichiarazione della proprietà qhProject:

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

Non riesco a capire perché c'è un AV qui a tutti. Ho provato a spostare l'auto creare ordine del / modulo di dati di forme in giro, ma ho sempre l'AV.

Che cosa sto facendo male qui?

Aggiornamento:

sto usando Billenium Effetti TFormContainer per passare tra le diverse forme nell'applicazione. Entrambe le forme che sono coinvolti qui sono nel contenitore forma. Una forma, TdlgSummary, contiene quanto segue:

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

L'altra forma, TdlgFinalize, contiene quanto segue:

dlgSummary.SyncVars;

Se corro SyncVars all'interno di dlgSummary, funziona benissimo. Se io lo chiamo da dlgFinalize, ottengo l'AV. Questo sembra essere il nocciolo del problema, ma non riesco a capire che cosa sta andando male. Anche se posso passare il controllo a dlgFinalize, dlgSummary non è stata distrutta, perché posso tornare ad esso. Tutte le idee?

È stato utile?

Soluzione

mi sembra _ProjectName è nil . Prova a mettere un punto di interruzione a questa linea ed esaminare _ProjectName, vedere se si dà un riferimento valido o meno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top