Hoe te communiceren tussen formulieren

Modale formulieren bieden specifieke functies die we niet kunnen hebben bij niet-modale weergave. Meestal zullen we een formulier modaal weergeven om de processen te isoleren van alles wat anders op het hoofdformulier zou gebeuren. Zodra deze processen zijn voltooid, wilt u misschien weten of de gebruiker op de knop Opslaan of Annuleren heeft gedrukt om het modale formulier te sluiten. U kunt hiervoor een interessante code schrijven, maar het hoeft niet moeilijk te zijn. Delphi levert modale formulieren met de eigenschap ModalResult, die we kunnen lezen om te zien hoe de gebruiker het formulier heeft verlaten.

De volgende code retourneert een resultaat, maar de aanroepende routine negeert het:

var
F: TForm2; beginnen
F: = TForm2.Create (nihil); F.ShowModal; F.Release; ...

Het voorbeeld hierboven toont alleen het formulier, laat de gebruiker er iets mee doen en laat het vervolgens los. Om te controleren hoe het formulier is beëindigd, moeten we profiteren van het feit dat de ShowModal-methode een functie is die een van de verschillende ModalResult-waarden retourneert. Verander de lijn

instagram viewer

F.ShowModal

naar

als F.ShowModal = mrOk vervolgens

We hebben wat code nodig in de modale vorm om in te stellen wat we ook willen ophalen. Er is meer dan één manier om ModalResult te krijgen, omdat TForm niet het enige onderdeel is met een ModalResult-eigenschap - TButton heeft er ook een.

Laten we eerst kijken naar TButton's ModalResult. Start een nieuw project en voeg een extra formulier toe (Delphi IDE Hoofdmenu: Bestand -> Nieuw -> Formulier). Dit nieuwe formulier heeft de naam 'Form2'. Voeg vervolgens een TButton (naam: 'Button1') toe aan het hoofdformulier (Form1), dubbelklik op de nieuwe knop en voer de volgende code in:

procedure TForm1.Button1Click (Afzender: TObject); var f: TForm2; beginnen
f: = TForm2.Create (nihil); proberenals f. ShowModal = mrOk vervolgens
Bijschrift: = 'Ja'
anders
Bijschrift: = 'Nee'; Tenslotte
f. Vrijlating; einde; einde;

Selecteer nu het aanvullende formulier. Geef het twee TButtons, label een 'Save' (naam: 'btnSave'; Bijschrift: 'Opslaan') en de andere 'Annuleren' (naam: 'btnCancel'; Bijschrift: 'Annuleren'). Selecteer de knop Opslaan en druk op F4 om de Object Inspector te openen, scroll omhoog / omlaag totdat je de eigenschap ModalResult vindt en zet het op mrOk. Ga terug naar het formulier en selecteer de knop Annuleren, druk op F4, selecteer de eigenschap ModalResult en stel deze in op mrCancel.

Zo simpel is het. Druk nu op F9 om het project uit te voeren. (Afhankelijk van uw omgevingsinstellingen kan Delphi u vragen de bestanden op te slaan.) Zodra het hoofdformulier verschijnt, drukt u op de eerder toegevoegde knop 1 om het onderliggende formulier te tonen. Wanneer het onderliggende formulier verschijnt, drukt u op de knop Opslaan en het formulier sluit, eenmaal terug naar het hoofdformulier, merkt u op dat het bijschrift "Ja" zegt. Druk op de knop van het hoofdformulier om het kindformulier opnieuw weer te geven, maar druk deze keer op de knop Annuleren (of het menu Sluit menu of de knop [x] in het bijschriftgebied). Het bijschrift van het hoofdformulier luidt "Nee".

Hoe werkt dit? Kijk voor meer informatie op het Click-evenement voor TButton (van StdCtrls.pas):

procedure TButton. Klik; var Vorm: TCustomForm; beginnen
Vorm: = GetParentForm (Self); als Vorm nul vervolgens
Het formulier. ModalResult: = ModalResult; geërfd Klik; einde;

Wat er gebeurt is dat de Eigenaar (in dit geval de secundaire vorm) van TButton krijgt zijn ModalResult ingesteld volgens de waarde van de ModalResult van TButton. Als u TButton niet instelt. ModalResult, dan is de waarde mrNone (standaard). Zelfs als de TButton op een ander besturingselement wordt geplaatst, wordt het bovenliggende formulier nog steeds gebruikt om het resultaat in te stellen. De laatste regel roept dan de Click-gebeurtenis op die is geërfd van zijn voorouderklasse.

Om te begrijpen wat er met Forms ModalResult gebeurt, is het de moeite waard om de code in Forms.pas te bekijken, die je zou moeten kunnen vinden in.. \ DelphiN \ Source (waar N staat voor het versienummer).

In de ShowModal-functie van TForm, direct nadat het formulier is weergegeven, start de herhalings-tot-lus, die blijft controleren of de variabele ModalResult een waarde groter dan nul wordt. Wanneer dit gebeurt, sluit de definitieve code het formulier.

U kunt ModalResult instellen tijdens het ontwerpen, zoals hierboven beschreven, maar u kunt ook de eigenschap ModalResult van het formulier rechtstreeks in code instellen tijdens runtime.

instagram story viewer