Kuidas suhelda vormide vahel

Modaalsed vormid pakuvad spetsiifilisi funktsioone, mis meil mittemodaalse kuvamise korral puuduvad. Tavaliselt kuvame vormi modaalselt, et eraldada selle protsessid kõigest, mis muidu põhivormis juhtuda võib. Kui need protsessid on lõpule viidud, võiksite teada saada, kas kasutaja vajutas modaalse vormi sulgemiseks nuppu Salvesta või Tühista. Selle saavutamiseks võite kirjutada mõne huvitava koodi, kuid see ei pea olema keeruline. Delphi tarnib modaalsed vormid atribuudiga ModalResult, mida võime lugeda, et öelda, kuidas kasutaja vormist väljus.

Järgmine kood tagastab tulemuse, kuid helistamisrutiin eirab seda:

var
F: TForm2; alustada
F: = TForm2.Loo (null); F.ShowModal; F.Release; ...

Ülaltoodud näide näitab lihtsalt vormi, laseb kasutajal sellega midagi ette võtta, seejärel vabastab selle. Vormi lõpetamise kontrollimiseks peame kasutama ära asjaolu, et ShowModali meetod on funktsioon, mis tagastab ühe mitmest ModalResult'i väärtusest. Muutke rida

F.ShowModal

kuni

kui F.ShowModal = hrOk siis

instagram viewer

Meil on vaja mooduli kujul koodi, et seadistada seda, mida me tahame taastada. ModalResult'i saamiseks on mitu võimalust, kuna TForm pole ainus ModalResult-i atribuut - ka TButtonil on see olemas.

Vaatame kõigepealt TButtoni ModalResult. Alustage uut projekti ja lisage veel üks vorm (Delphi IDE peamenüü: File -> New -> Form). Sellel uuel vormil on nimi „vorm2”. Järgmisena lisage põhivormi (vorm1) TBnupp (nimi: 'Button1'), topeltklõpsake uut nuppu ja sisestage järgmine kood:

protseduur TForm1.Button1Click (saatja: TObject); var f: TForm2; alustada
f: = TForm2.Loo (null); proovidakui f. ShowModal = hrOk siis
Pealdis: = 'Jah'
muud
Pealdis: = 'Ei'; lõpuks
f. Vabasta; lõpp; lõpp;

Nüüd valige lisavorm. Andke sellele kaks nuppu, märgistades ühe nupuga 'Salvesta' (nimi: 'btnSave'; Pealdis: 'Salvesta') ja teine ​​'Tühista' (nimi: 'btnCancel'; Pealdis: 'Tühista'). Objektiinspektori kuvamiseks valige nupp Salvesta ja vajutage klahvi F4, kerige üles / alla, kuni leiate vara ModalResult ja seadke see väärtusele mrOk. Minge tagasi vormi juurde ja valige nupp Tühista, vajutage F4, valige atribuut ModalResult ja määrake see mrCancel.

See on nii lihtne. Nüüd vajutage projekti käivitamiseks F9. (Sõltuvalt teie keskkonnasätetest võib Delphi paluda failid salvestada.) Kui põhivorm ilmub, vajutage lapsevormi kuvamiseks nuppu, mille olete varem lisanud. Kui alamvorm ilmub, vajutage nuppu Salvesta ja vorm sulgub, kui tagasi põhivormi juurde märkida, et selle pealdis ütleb "Jah". Lapsevormi uuesti kuvamiseks vajutage põhivormi nuppu, kuid seekord vajutage nuppu Tühista (või menüü Süsteem menüü sulgemiseks või pealdise piirkonnas nuppu [x]). Põhivormi pealdiseks loetakse "Ei".

Kuidas see töötab? Selle teada saamiseks vaadake TButtoni klõpsamise sündmust (saidilt StdCtrls.pas):

protseduur TB nupp. Klõps; var Vorm: TCustomForm; alustada
Vorm: = GetParentForm (ise); kui Vorm null siis
Vorm. ModalResult: = ModalResult; päritud Klõps; lõpp;

Mis juhtub, on see, et Omanik (antud juhul sekundaarne vorm) TButton saab oma ModalResult komplekti vastavalt TButtoni ModalResult väärtusele. Kui te ei määra TButtonit. ModalResult, siis on väärtus mrNone (vaikimisi). Isegi kui TBnupp paigutatakse mõnele teisele juhtnupule, kasutatakse selle tulemuse seadistamiseks ikkagi põhivormi. Seejärel kutsub viimane rida oma esivanemate klassist päritud klikisündmuse.

Vormidega ModalResult toimuva mõistmiseks tasub vaadata üle vorm Forms.pas, mille peaksite leidma saidist.. \ DelphiN \ Source (kus N tähistab versiooninumbrit).

TFormi funktsioonis ShowModal, vahetult pärast vormi kuvamist, algab kordus-ahel, mis kontrollib muutuja ModalResult muutumist väärtuseks, mis on suurem kui null. Kui see juhtub, sulgeb lõplik kood vormi.

Saate seadistada ModalResult kujundamise ajal, nagu ülalpool kirjeldatud, kuid võite ka vormi ModalResult atribuudi seadistada otse koodina töö ajal.

instagram story viewer