Sådan kommunikerer man mellem formularer

click fraud protection

Modale former tilbyder specifikke funktioner, som vi ikke kan have, når vi ikke viser modal. Oftest viser vi en form modalt for at isolere dens processer fra alt, hvad der ellers kan ske på hovedformularen. Når disse processer er afsluttet, vil du måske vide, om brugeren trykede på knappen Gem eller Annuller for at lukke den formelle form. Du kan skrive nogle interessante kode for at opnå dette, men det behøver ikke at være vanskeligt. Delphi leverer modale formularer med egenskaben ModalResult, som vi kan læse for at fortælle, hvordan brugeren forlader formularen.

Følgende kode returnerer et resultat, men opkaldsrutinen ignorerer det:

Var
F: TForm2; begynde
F: = TForm2.Create (nul); F.ShowModal; F.Release; ...

Eksemplet ovenfor viser bare formen, lader brugeren gøre noget med det og frigiver det derefter. For at kontrollere, hvordan formen blev afsluttet, er vi nødt til at drage fordel af det faktum, at ShowModal-metoden er en funktion, der returnerer en af ​​flere ModalResult-værdier. Skift linjen

instagram viewer

F.ShowModal

til

hvis F.ShowModal = mrOk derefter

Vi har brug for noget kode i den formelle form for at opsætte, hvad det er, vi vil hente. Der er mere end en måde at få ModalResult på, fordi TForm ikke er den eneste komponent, der har en ModalResult-egenskab - TButton har også en.

Lad os først se på TButtons ModalResult. Start et nyt projekt, og tilføj en yderligere formular (Delphi IDE Hovedmenu: Fil -> Ny -> form). Denne nye formular vil have et 'Form2' navn. Tilføj derefter en TButton (Navn: 'Button1') til hovedformularen (Form1), dobbeltklik på den nye knap og indtast følgende kode:

procedure TForm1.Button1Click (Afsender: TObject); Var f: TForm2; begynde
f: = TForm2.Create (nul); prøvehvis f. ShowModal = mrOk derefter
Billedtekst: = 'Ja'
andet
Billedtekst: = 'Nej'; endelig
f. Frigøre; ende; ende;

Vælg nu den yderligere formular. Giv det to TButtons, der mærker en 'Gem' (Navn: 'btnSave'; Billedtekst: 'Gem') og den anden 'Annuller' (Navn: 'btnCancel'; Billedtekst: 'Annuller'). Vælg knappen Gem, og tryk på F4 for at hente objektinspektøren, rulle op / ned, indtil du finder egenskaben ModalResult og indstil det til mrOk. Gå tilbage til formularen og vælg knappen Annuller, tryk på F4, vælg egenskaben ModalResult, og indstil den til mrCancel.

Det er så simpelt som det. Tryk nu på F9 for at køre projektet. (Afhængigt af dine miljøindstillinger, kan Delphi muligvis bede om at gemme filerne.) Når hovedformularen vises, skal du trykke på knappen 1, du tilføjede tidligere, for at vise underordnede formularer. Når underformularen vises, skal du trykke på Gem-knappen, og formularen lukkes, når der tilbage til hovedformularen bemærkes, at det er billedtekst "Ja". Tryk på hovedformulatorknappen for at få vist underformularen igen, men denne gang skal du trykke på knappen Annuller (eller System-menuen Luk punkt eller [x] -knappen i billedtekstområdet). Hovedformularens billedtekst lyder "Nej".

Hvordan virker det? For at finde ud af det, skal du se på Click-arrangementet for TButton (fra StdCtrls.pas):

procedure TButton. Klik; Var Form: TCustomForm; begynde
Form: = GetParentForm (Selv); hvis Form nul derefter
Form. ModalResult: = ModalResult; arvet Klik; ende;

Hvad der sker er, at Ejer (i dette tilfælde får den sekundære form) af TButton sit ModalResult-sæt i henhold til værdien af ​​TButtons ModalResult. Hvis du ikke indstiller TButton. ModalResult, så er værdien mrNone (som standard). Selv hvis TButton er placeret på en anden kontrol, bruges moderformularen stadig til at indstille dens resultat. Den sidste linje påkalder derefter Click-begivenheden, der er arvet fra sin forfaderklasse.

For at forstå, hvad der foregår med Forms ModalResult, er det værd at gennemgå koden i Forms.pas, som du burde være i stand til at finde i.. \ DelphiN \ Source (hvor N repræsenterer versionnummeret).

I TForms ShowModal-funktion starter Gentag-indtil loop, lige efter formularen vises, hvilket fortsætter med at kontrollere, om variablen ModalResult bliver en værdi større end nul. Når dette sker, lukker den endelige kode formularen.

Du kan indstille ModalResult på designtid som beskrevet ovenfor, men du kan også indstille formularen ModalResult egenskab direkte i kode ved kørsel.

instagram story viewer