Kaip bendrauti tarp formų

Modalinės formos siūlo specifines savybes, kurių negalime turėti rodydami ne modalinę. Dažniausiai formą rodysime modaliai, kad atskirtume jos procesus nuo visko, kas priešingu atveju galėtų nutikti pagrindinėje formoje. Kai šie procesai bus baigti, galbūt norėsite sužinoti, ar vartotojas paspaudė mygtuką Išsaugoti ar Atšaukti, kad uždarytų modinę formą. Norėdami tai padaryti, galite parašyti įdomų kodą, tačiau tai neturi būti sunku. Delfi tiekia modalines formas su „ModalResult“ ypatybe, kurią galime perskaityti norėdami pasakyti, kaip vartotojas išėjo iš formos.

Šis kodas grąžina rezultatą, tačiau skambinimo rutina jo nepaiso:

var
F: TForm2; prasideda
F: = TForm2.Sukurti (nulis); F.ShowModal; F.Atleidimas; ...

Aukščiau pateiktas pavyzdys tiesiog parodo formą, leidžia vartotojui ką nors su ja padaryti, tada paleidžia. Norėdami patikrinti, kaip forma buvo nutraukta, turime pasinaudoti tuo, kad „ShowModal“ metodas yra funkcija, kuri grąžina vieną iš kelių „ModalResult“ reikšmių. Pakeiskite liniją

instagram viewer

F.ShowModal

į

jei F.ShowModal = mrOk tada

Mums reikia šiek tiek modų formos kodo, kad nustatytume, ką norime atkurti. Yra daugiau nei vienas būdas gauti „ModalResult“, nes „TForm“ nėra vienintelis komponentas, turintis „ModalResult“ savybę - „TButton“ taip pat jį turi.

Pirmiausia pažvelkime į TButtono „ModalResult“. Pradėkite naują projektą ir pridėkite dar vieną formą („Delphi IDE“ pagrindinis meniu: Failas -> Naujas -> Forma). Ši nauja forma turės pavadinimą „2 forma“. Tada pridėkite „TButton“ (vardas: „Button1“) prie pagrindinės formos (1 forma), dukart spustelėkite naują mygtuką ir įveskite šį kodą:

procedūra TForm1.Button1Click (Siuntėjas: TObject); var f: TForm2; prasideda
f: = TForm2.Sukurti (nulis); bandytijei f. „ShowModal“ = „mrOk“ tada
Antraštė: = „Taip“
Kitas
Antraštė: = „Ne“; pagaliau
f. Atleiskite; galas; galas;

Dabar pasirinkite papildomą formą. Duokite jam du mygtukus, pažymėdami vieną „Išsaugoti“ (Pavadinimas: „btnSave“; Antraštė: „Išsaugoti“), kita - „Atšaukti“ (pavadinimas: „btnCancel“; Antraštė: „Atšaukti“). Pasirinkite mygtuką Išsaugoti ir paspauskite F4, norėdami parodyti objektų inspektorių, slinkite aukštyn / žemyn, kol rasite nuosavybę „ModalResult“ ir nustatykite jį į „mrOk“. Grįžkite į formą ir pasirinkite mygtuką Atšaukti, paspauskite F4, pasirinkite nuosavybę „ModalResult“ ir nustatykite ją į „mrCancel“.

Tai taip paprasta. Dabar paspauskite F9, kad paleistumėte projektą. (Atsižvelgiant į jūsų aplinkos parametrus, „Delphi“ gali paprašyti išsaugoti failus.) Kai pasirodys pagrindinė forma, paspauskite anksčiau pridėtą mygtuką1, kad būtų parodyta vaiko forma. Kai pasirodys pradinė forma, paspauskite mygtuką Išsaugoti, ir forma uždaroma, vėl grįžtant prie pagrindinės formos pastabos, kad jos antraštėje parašyta „Taip“. Paspauskite pagrindinio formos mygtuką, kad vėl parodytumėte antrinę formą, tačiau šį kartą paspauskite mygtuką Atšaukti (arba sistemos meniu elementą Uždaryti arba mygtuką [x] antraščių srityje). Pagrindinės formos antraštėje bus „Ne“.

Kaip tai veikia? Norėdami sužinoti, pažiūrėkite į „TButton“ paspaudimų įvykį (iš StdCtrls.pas):

procedūra TB mygtukas. Spustelėkite; var Forma: TCustomForm; prasideda
Forma: = GetParentForm („Self“); jei Forma nulis tada
Forma. ModalResult: = ModalResult; paveldėtas Spustelėkite; galas;

Kas atsitiks, kad Savininkas (šiuo atveju antrinė forma) „TButton“ gauna „ModalResult“ rinkinį pagal „TButton“ „ModalResult“ vertę. Jei nenustatysite TButton. Tada „ModalResult“ vertė yra „mrNone“ (pagal numatytuosius nustatymus). Net jei „TButton“ dedamas ant kito valdiklio, pagrindinė forma vis tiek naudojama rezultatui nustatyti. Tada paskutinė eilutė iškviečia „Click“ įvykį, paveldėtą iš savo protėvių klasės.

Norint suprasti, kas vyksta su formomis „ModalResult“, verta perskaityti kodą „Forms.pas“, kurį turėtumėte rasti „.. DelphiN“ šaltinyje (kur N reiškia versijos numerį).

„TForm“ „ShowModal“ funkcijoje iškart po to, kai parodyta forma, prasideda „Repeat-Kuni“ kilpa, kuri palaiko kintamojo „ModalResult“ kintamosios vertės padidėjimą nei nulis. Kai tai įvyksta, galutinis kodas uždaro formą.

Galite nustatyti „ModalResult“ projektavimo metu, kaip aprašyta aukščiau, tačiau taip pat galite nustatyti formos savybę „ModalResult“ tiesiogiai koduose vykdymo metu.

instagram story viewer