Comment communiquer entre les formulaires

Les formulaires modaux offrent des fonctionnalités spécifiques que nous ne pouvons pas avoir lors de l'affichage non modal. Le plus souvent, nous afficherons un formulaire de manière modale pour isoler ses processus de tout ce qui pourrait autrement se produire sur le formulaire principal. Une fois ces processus terminés, vous souhaiterez peut-être savoir si l'utilisateur a appuyé sur le bouton Enregistrer ou Annuler pour fermer le formulaire modal. Vous pouvez écrire du code intéressant pour y parvenir, mais cela ne doit pas être difficile. Delphes fournit des formulaires modaux avec la propriété ModalResult, que nous pouvons lire pour savoir comment l'utilisateur a quitté le formulaire.

Le code suivant renvoie un résultat, mais la routine d'appel l'ignore:

var
F: TForm2; commencer
F: = TForm2.Create (néant); F.ShowModal; F.Release; ...

L'exemple ci-dessus montre simplement le formulaire, permet à l'utilisateur de faire quelque chose avec lui, puis le libère. Pour vérifier comment le formulaire a été terminé, nous devons tirer parti du fait que la méthode ShowModal est une fonction qui renvoie l'une des valeurs ModalResult. Changer la ligne

instagram viewer

F.ShowModal

à

si F.ShowModal = mrOk ensuite

Nous avons besoin de code sous la forme modale pour configurer tout ce que nous voulons récupérer. Il existe plusieurs façons d'obtenir le ModalResult car TForm n'est pas le seul composant à avoir une propriété ModalResult - TButton en a une également.

Voyons d'abord le ModalResult de TButton. Démarrez un nouveau projet et ajoutez un formulaire supplémentaire (menu principal de Delphi IDE: Fichier -> Nouveau -> Formulaire). Ce nouveau formulaire aura un nom 'Form2'. Ajoutez ensuite un TButton (Nom: 'Button1') au formulaire principal (Form1), double-cliquez sur le nouveau bouton et entrez le code suivant:

procédure TForm1.Button1Click (expéditeur: TObject); var f: TForm2; commencer
f: = TForm2.Create (néant); essayersi F. ShowModal = mrOk ensuite
Légende: = 'Oui'
autre
Légende: = 'Non'; enfin
F. Libération; fin; fin;

Sélectionnez maintenant le formulaire supplémentaire. Donnez-lui deux TButtons, en étiquetant un 'Save' (Nom: 'btnSave'; Légende: 'Enregistrer') et l'autre 'Annuler' (Nom: 'btnCancel'; Légende: 'Annuler'). Sélectionnez le bouton Enregistrer et appuyez sur F4 pour afficher l'inspecteur d'objets, faites défiler vers le haut / bas jusqu'à ce que vous trouviez la propriété ModalResult et réglez-le sur mrOk. Revenez au formulaire et sélectionnez le bouton Annuler, appuyez sur F4, sélectionnez la propriété ModalResult et définissez-la sur mrCancel.

C'est aussi simple que ça. Appuyez maintenant sur F9 pour exécuter le projet. (Selon les paramètres de votre environnement, Delphi peut vous inviter à enregistrer les fichiers.) Une fois le formulaire principal affiché, appuyez sur le Button1 que vous avez ajouté précédemment pour afficher le formulaire enfant. Lorsque le formulaire enfant apparaît, appuyez sur le bouton Enregistrer et le formulaire se ferme, une fois de retour au formulaire principal, notez que sa légende dit "Oui". Appuyez sur le bouton du formulaire principal pour afficher à nouveau le formulaire enfant, mais cette fois, appuyez sur le bouton Annuler (ou sur l'élément Fermer du menu Système ou sur le bouton [x] dans la zone de légende). La légende du formulaire principal indiquera "Non".

Comment cela marche-t-il? Pour le savoir, jetez un œil à l'événement Click pour TButton (de StdCtrls.pas):

procédure TButton. Cliquez sur; var Forme: TCustomForm; commencer
Forme: = GetParentForm (Self); si Forme zéro ensuite
Forme. ModalResult: = ModalResult; hérité Cliquez sur; fin;

Ce qui se passe, c'est que le Propriétaire (dans ce cas, la forme secondaire) de TButton obtient son ensemble ModalResult en fonction de la valeur de ModalResult de TButton. Si vous ne définissez pas TButton. ModalResult, la valeur est mrNone (par défaut). Même si le TButton est placé sur un autre contrôle, le formulaire parent est toujours utilisé pour définir son résultat. La dernière ligne appelle ensuite l'événement Click hérité de sa classe ancêtre.

Pour comprendre ce qui se passe avec Forms ModalResult, il vaut la peine de revoir le code dans Forms.pas, que vous devriez pouvoir trouver dans.. \ DelphiN \ Source (où N représente le numéro de version).

Dans la fonction ShowModal de TForm, juste après l'affichage du formulaire, la boucle Repeat-Until démarre, ce qui continue de vérifier que la variable ModalResult devient une valeur supérieure à zéro. Lorsque cela se produit, le code final ferme le formulaire.

Vous pouvez définir ModalResult au moment du design, comme décrit ci-dessus, mais vous pouvez également définir la propriété ModalResult du formulaire directement dans le code au moment de l'exécution.

instagram story viewer