Bonsoir
Quand je développe je me retrouve souvent devant ce cas de figure, et j'aurais aimé connaitre votre façon d'y faire face.
Prenons un projet au hasard : Un programme qui permet de créer objet de type TUtilisateur pour en faire je ne sais quoi (l'ajouter dans une BDD tiens, ça lui apprendra). Cet utilisateur possède une collection de Bidules.
Donc voici notre utilisateur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
TUtilisateur=class
private
FAge: integer;
FMesBidules: TList;
FNom: string;
procedure SetAge(const Value: integer);
procedure SetMesBidules(const Value: TList);
procedure SetNom(const Value: string);
public
constructor create;
destructor destroy();override;
property Nom:string read FNom write SetNom;
property Age:integer read FAge write SetAge;
property MesBidules:TList read FMesBidules write SetMesBidules;
end; |
Notre projet contient : - Une form principale
- Une unité qui contient nos classes
- Une form modale qui permet d'ajouter un bidule à l'utilisateur
Ma question porte en réalité sur l'ajout d'un bidule. Bidule étant un objet de type TBidule (peu importe ce qu'il contient). Perso j'ai l'habitude que l'aboutissement de ma modale soit la création d'un objet bidule.
Cet objet étant ensuite ajouté à la liste des Bidules de l'utilisateur.
Ce qui m'embête, c'est qu'à ma connaissance une form ne peut pas renvoyer d'objet (au mieux elle renvoie un entier avec ModalResult).
Du coup ma solution crado consiste à créer une property de type TUtilisateur dans ma form modale.
Et lorsque ma form principale a besoin d'ajouter un Bidule, je fais quelque chose genre :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| procedure TFormPrincipale.AjouterUtilisateur;
//Construction d'un objet de type TUtilisateur, on passe sur les détails de la création
//Maintenant on a besoin d'ajouter un bidule :
frmAjoutBidule.UtilisateurCourant:=NouvelUtilisateur;
if frmAjoutBidule.showmodal<>mr_Cancel then
begin
ShowMessage('Glop !');
//Le Bidule a été ajouté
end
else
begin
ShowMessage('Pas glop !');
//Le Bidule n'a pas été ajouté
end; |
La modale s'ouvre donc, et là on a des EditBox pour remplir les caractéristiques de notre objet Bidule, par exemple.
Lorsqu'on clique sur le bouton de validation de la form on instancie un Objet bidule, puis on vérifie qu'on a pas rentré de bêtises dans les EditBox et finalement nous avons notre objet Bidule. On fait un
UtilisateurCourant.add(Bidule);
et en général j'ajoute quelque chose du style :
1 2
| UtilisateurCourant:=nil;
ModalResult:=mr_ok; |
et là ma form modale se ferme et j'ai bien ajouté un objet Bidule à l'utilisateur.
Je trouve ma méthode vraiment "sale" et assez peu pratique.
Reste la solution d'utiliser une variable globale mais là bonjour la propreté...
Comment gérez-vous ce genre de "problème" (qui semble plus être une question existencielle finalement) ?
Dois-je concevoir mes applications différemment ?
Partager