2010-03-18 4 views
1

ont 6 formes, 1 base et 5 inherited.The de base a l'extrait suivant:Delphi 7 héritage

procedure TMechan.Open1Click(Sender: TObject); 
begin 
    if OpenDialog1.Execute then 
    Form1.Memo1.Lines.LoadFromFile(OpenDialog1.FileName); 
    CopyCylMemoToRecord; 
    ShowMechanicalValues; 
end; 

Depuis cet extrait est dans la base il est également hérité de 5 autres. Le problème est: Lors de l'exécution de OpenDialog, la base est remplacée à la place du formulaire hérité. AIDEZ

Répondre

10

Je ne suis pas sûr de ce que vous entendez par la base est écrasé mais votre utilisation de Form1 dans votre code devrait probablement être changé pour Self.

Form1 est une référence globale à une instance de (probablement) votre formulaire de base. Vous pouvez créer une instance de formulaire zillion TMechan où chaque Open1Click changerait une propriété de ce un formulaire. Je suppose que les formes sont auto-créées. Bien que cela soit facile à faire, je vous conseille fortement de ne pas créer automatiquement chaque formulaire et de supprimer toutes les références globales aux formulaires (comme ce formulaire1) lorsque c'est possible.

La seule forme qui devrait être créée automatiquement est votre formulaire principal. Toutes les autres formes devraient être créées en cas de besoin, quelque chose comme myform := TMechan.Create(AOwner);

procedure TMechan.Open1Click(Sender: TObject); 
begin 
    if OpenDialog1.Execute then 
    Self.Memo1.Lines.LoadFromFile(OpenDialog1.FileName); 
    CopyCylMemoToRecord; 
    ShowMechanicalValues; 
end; 
+0

JFTR: 99,999% du temps « auto » en face d'un point est superflu, par exemple 'Self.Something (SomeParameters),' est le même que 'Quelque chose (SomeParameters);'. –

+0

@Ulrich Gerhardt - vrai, mais après avoir passé du temps à programmer C# et à utiliser des outils comme FxCop pour encourager l'utilisation de 'this', je me retrouve à écrire plus souvent Self pour améliorer la lisibilité. Ce cours est * très * subjectif. –