Kā sazināties starp veidlapām

click fraud protection

Modālās formas piedāvā īpašas funkcijas, kuras mums nevar būt, parādot nemodulālus. Parasti formu parādīsim modāli, lai tās procesus norobežotu no visa, kas citādi varētu notikt galvenajā formā. Kad šie procesi ir pabeigti, jūs varētu vēlēties zināt, vai lietotājs nospieda pogu Saglabāt vai Atcelt, lai aizvērtu modālo formu. Lai to paveiktu, varat uzrakstīt kādu interesantu kodu, taču tam nav jābūt grūtam. Delfi piegādā modālas formas ar īpašību ModalResult, kuru mēs varam izlasīt, lai pastāstītu, kā lietotājs aizveda no veidlapas.

Šis kods atgriež rezultātu, bet izsaukšanas rutīns to ignorē:

var
F: TForm2; sākt
F: = TForm2.Izveidot (nulle); F.ŠovsModāls; F.Atbrīvošanās; ...

Iepriekš parādītais piemērs tikai parāda formu, ļauj lietotājam kaut ko ar to izdarīt, pēc tam to atbrīvo. Lai pārbaudītu, kā veidlapa tika izbeigta, mums ir jāizmanto tas, ka ShowModal metode ir funkcija, kas atgriež vienu no vairākām ModalResult vērtībām. Mainiet līniju

F.ShowModal

uz

ja F.ShowModal = mrOk tad

Mums ir nepieciešams kods modālā formā, lai uzstādītu visu, ko mēs vēlamies iegūt. Ir vairāk nekā viens veids, kā iegūt ModalResult, jo TForm nav vienīgais komponents, kam ir ModalResult īpašums - arī TButton ir viens.

instagram viewer

Vispirms apskatīsim TButton ModalResult. Sāciet jaunu projektu un pievienojiet vēl vienu veidlapu (Delphi IDE galvenā izvēlne: Fails -> Jauns -> Veidlapa). Šai jaunajai veidlapai būs nosaukums “2. veidlapa”. Pēc tam galvenajai veidlapai (1. veidlapa) pievienojiet atzīmi TBT (Nosaukums: “Button1”), veiciet dubultklikšķi uz jaunās pogas un ievadiet šo kodu:

procedūra TForm1.Button1Click (Sūtītājs: TObject); var f: TForm2; sākt
f: = TForm2.Create (nulle); mēģinietja f. ShowModal = mrOk tad
Paraksts: = 'Jā'
cits
Paraksts: = 'Nē'; beidzot
f. Atlaidiet; beigas; beigas;

Tagad atlasiet papildu veidlapu. Piešķiriet tai divus TB taustiņus, vienu apzīmējot ar 'Saglabāt' (Nosaukums: 'btnSave'; Paraksts: 'Saglabāt') un otrs 'Atcelt' (nosaukums: 'btnCancel'; Paraksts: 'Atcelt'). Atlasiet pogu Saglabāt un nospiediet F4, lai atvērtu Objektu inspektoru, ritiniet uz augšu / uz leju, līdz atrodat īpašumu ModalResult un iestatiet to uz mrOk. Atgriezieties formā un atlasiet pogu Atcelt, nospiediet F4, atlasiet īpašumu ModalResult un iestatiet to uz mrCancel.

Tas ir tik vienkārši. Tagad nospiediet F9, lai palaistu projektu. (Atkarībā no jūsu vides iestatījumiem, Delphi var lūgt saglabāt failus.) Kad parādās galvenā forma, nospiediet Button1, kuru esat pievienojis iepriekš, lai parādītu bērna formu. Kad parādās bērna forma, nospiediet pogu Saglabāt, un forma aizveras, tiklīdz atgriezīsities pie galvenās veidlapas, atzīmējot, ka tās paraksts saka “Jā”. Nospiediet galvenās veidlapas pogu, lai atkal audzinātu bērna veidlapu, bet šoreiz nospiediet pogu Atcelt (vai izvēlni Sistēmas izvēlne Aizvērt vai pogu [x] parakstu apgabalā). Galvenās veidlapas parakstos būs "Nē".

Kā tas darbojas? Lai uzzinātu, apskatiet TButton noklikšķiniet uz notikuma (no StdCtrls.pas):

procedūra TBtton. Klikšķis; var Forma: TCustomForm; sākt
Forma: = GetParentForm (Self); ja Forma nulle tad
Forma. ModalResult: = ModalResult; mantots Klikšķis; beigas;

Kas notiek, ir tas, ka Īpašnieks (šajā gadījumā sekundārā forma) TButton iegūst savu ModalResult komplektu atbilstoši TButton ModalResult vērtībai. Ja neiestatāt TButton. ModalResult, tad vērtība ir mrNone (pēc noklusējuma). Pat ja TBbutton ir novietots uz citas vadības ierīces, tā rezultātu iestatīšanai joprojām tiek izmantota pamatforma. Pēc tam pēdējā rindā tiek izsaukts klikšķa notikums, kas ir mantots no tā priekšteča klases.

Lai saprastu, kas notiek ar Forms ModalResult, ir vērts pārskatīt kodu Forms.pas, kas jums jāatrod vietnē.. \ DelphiN \ Source (kur N apzīmē versijas numuru).

TForm funkcijā ShowModal, tūlīt pēc formas parādīšanas, sākas atkārtošanas līdz brīdim cilpa, kas turpina pārbaudīt, vai mainīgais ModalResult kļūst par vērtību, kas ir lielāka par nulli. Kad tas notiek, galīgais kods aizver formu.

Jūs varat iestatīt ModalResult projektēšanas laikā, kā aprakstīts iepriekš, bet jūs varat arī iestatīt veidlapas ModalResult rekvizītu tieši kodā izpildes laikā.

instagram story viewer