Accès à différentes proprités d'une forme parent à partir de son enfant

Soyez le premier à donner votre avis sur cette source.

Vue 2 501 fois - Téléchargée 349 fois

Description

Bonjour,

Ceci est mon premier code et je voulais savoir comment les experts considères ma façon de penser pour ça.

Voici la situation :
J'ai une forme "FORM1" qui crée au en cliquant sur un bouton une Forme2 "FORM2". Jusque là c'est pas trop compliqué.
Par contre, j'ai besoin que la forme 2 aie accès à différentes propriété ou composant de la forme 1.

Je connais bien les uses et les références circulaire donc la plupart du monde mettre le uses de la Forme1 après l'implementation de la forme2.

Voici ce que moi je fais et je voulais savoir si c'est "mieux" que d'avoir plein de uses....

Source / Exemple :


//Ma forme 1

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

//Je supprime ces variables par réflexe, comme ça je suis sûr quand je crée ma forme qu'elle est seulement dans la procédure qui la crée
//var
//  Form1: TForm1;

implementation
//Use de ma forme 2 pour pouvoir la créer et y accéder
uses Unit2;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  lUnit2 := TForm2;
begin
  //Crée ma forme
  lUnit2 := TForm.Create(Self);
  lUnit2.Parent := Self;
  //Ici j'assigne le edit de la forme1 à la propriété de ma forme2 pour pouvoir y avoir accès dedans
  lUnit2.p_EditForm1 := Edit1;
  //L'affiche en show modal
  lUnit2.ShowModal;
  //Vérifie si elle existe toujours et la libère
  if Assigned(lUnit2) then
    FreeAndNil(lUnit2);
end;

end.

//Ma forme 2

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
    FEdit : TEdit;
  public
    { Déclarations publiques }
    property p_EditForm1 : TEdit read FEdit write FEdit;
  end;

//Je supprime ces variables par réflexe, comme ça je suis sûr quand je cré ma forme qu'elle est seulement dans la procédure qui la crée.
//var
//  Form2: TForm2;

implementation
//En principe j'aurais fait un use de ma forme 1 ici. Mais comme j'enlève la variable globale de la forme, je ne pourrais plus y accéder de toute façon
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  //Si ma propriété à été défini
  if Assigned(p_EditForm1) then
    //Je change le text de la forme1 pour celui de la forme 2
    p_EditForm1.Text := Edit1.Text;
end;

end.

Conclusion :


D'après vous, quoi vous en pensez

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_cantador
Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9 -
merci de préciser EDI et SE
ioda19
Messages postés
21
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
20 juin 2007
-
J'utilise Delphi 6 Enterprise avec toutes les updates
pour le SE ça dépend mais plus à 90% du temps WindowsXP
cs_cantador
Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9 -
et un zip du projet..
cs_philnext
Messages postés
9
Date d'inscription
dimanche 11 juillet 2004
Statut
Membre
Dernière intervention
29 novembre 2010
-
Pourquoi pas...
En fait dans ce genre de cas de figure tu peux aussi ne pas créer visuellement de Unit2, et créer avec du code, ta deuxième TForm.
ioda19
Messages postés
21
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
20 juin 2007
-
Effectivement philnext pour ce code qui est très simpliste ce serait possible
Par contre, dans le cas d'une forme complexe avec beaucoup de code, ça deviendrais assez spaghetti comme code je crois.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.