Violation d'accès lors de l'attribution des biens de composants sur le module de données

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

  •  13-09-2019
  •  | 
  •  

Question

Je suis sur Delphi 2009, et mon application contient un module de données, qui a un composant personnalisé nommé 'Globals' sur elle.

Dans une autre forme dans l'application, je suis en train de changer une propriété publiée (une chaîne) sur le composant Globals:

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

Le contrôle de _ProjectName est un descendant de TLabeledEdit. Je reçois toujours une violation d'accès ici s'il y a un texte dans la case.

Cependant, si j'assing manuellement une chaîne à la propriété, je ne reçois pas l'AV:

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

Voici la déclaration de la propriété qhProject:

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

Je ne peux pas comprendre pourquoi il y a un AV ici du tout. J'ai essayé de déplacer le créer automatiquement l'ordre des formes / module de données autour, mais je reçois toujours l'AV.

Qu'est-ce que je fais mal ici?

Mise à jour:

J'utilise Effets Billenium TFormContainer pour basculer entre les différentes formes dans l'application. Les deux formes qui sont impliqués ici sont dans le conteneur de forme. Une forme, TdlgSummary, contient les éléments suivants:

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

L'autre forme, TdlgFinalize, contient les éléments suivants:

dlgSummary.SyncVars;

Si je cours SyncVars à l'intérieur de dlgSummary, il fonctionne très bien. Si je l'appelle de dlgFinalize, je reçois l'AV. Cela semble être le nœud du problème, mais je ne peux pas comprendre ce qui se passe mal. Même si je passe le contrôle à dlgFinalize, dlgSummary n'a pas été détruite, parce que je peux y revenir. Toutes les idées?

Était-ce utile?

La solution

Attend pour moi comme _ProjectName est nil . Essayez de mettre un point d'arrêt sur cette ligne et d'examiner _ProjectName, voir si elle donne une référence valide ou non.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top