Zugriff auf Verletzungen bei der Zuweisung von Komponenteneigenschaften im Datenmodul

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

  •  13-09-2019
  •  | 
  •  

Frage

Ich bin in Delphi 2009 und meine Anwendung enthält ein Datenmodul, das eine benutzerdefinierte Komponente mit dem Namen "Globals" enthält.

In einer anderen Form in der Anwendung versuche ich, eine veröffentlichte Eigenschaft (eine Zeichenfolge) in der Globals -Komponente zu ändern:

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

Das _ProjectName -Steuerelement ist ein tlabelededit -Nachkommen. Ich bekomme hier immer eine Zugriffsverletzung, wenn im Feld Text vorhanden ist.

Wenn ich jedoch eine Schnur an der Eigenschaft manuell angreife, bekomme ich den AV nicht:

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

Hier ist die Erklärung des QHProject -Eigentums:

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

Ich kann nicht herausfinden, warum es hier überhaupt einen AV gibt. Ich habe versucht, die automatische Erstellung der Formulare/Datenmodul zu bewegen, aber ich bekomme immer den AV.

Was mache ich hier falsch?

Aktualisieren:

Ich verwende Billenium Effects tformContainer, um zwischen verschiedenen Formen in der Anwendung zu wechseln. Beide Formen, die hier involviert sind, befinden sich im Formularbehälter. Eine Form, tdlgsummary, enthält Folgendes:

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

Die andere Form, tdlgfinalize, enthält Folgendes:

dlgSummary.SyncVars;

Wenn ich Syncvars in DLGSummary betreibe, funktioniert es einwandfrei. Wenn ich es von dlgfinalize nenne, bekomme ich den AV. Dies scheint der Kern des Problems zu sein, aber ich kann nicht herausfinden, was schief geht. Selbst wenn ich die Kontrolle auf dlgfinalize wechsle, wurde dlgsummary nicht zerstört, weil ich darauf zurückkehren kann. Irgendwelche Ideen?

War es hilfreich?

Lösung

Sieht für mich aus, als ob _ProjectName ist Null. Versuchen Sie, einen Haltepunkt in diese Zeile zu setzen und _ProjectName zu untersuchen, ob eine gültige Referenz angibt oder nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top