Ako komunikovať medzi formulármi

click fraud protection

Modálne formuláre ponúkajú špecifické vlastnosti, ktoré nemôžeme mať, keď sa zobrazujú nemodálne. Najčastejšie zobrazíme formulár modálne, aby sme izolovali jeho procesy od všetkého, čo by sa inak mohlo vyskytnúť na hlavnom formulári. Po dokončení týchto procesov budete možno chcieť vedieť, či používateľ stlačením tlačidla Uložiť alebo Zrušiť zatvoril modálny formulár. Na tento účel môžete napísať nejaký zaujímavý kód, ale nemusí to byť ťažké. Delphi dodáva modálne formuláre s vlastnosťou ModalResult, ktorú môžeme prečítať, aby sme zistili, ako používateľ opustil formulár.

Nasledujúci kód vráti výsledok, ale volacia rutina ho ignoruje:

var
F: TForm2; začať
F: = TForm2.Create (nula); F.ShowModal; F.Release; ...

Príklad zobrazený vyššie zobrazuje iba formulár, umožňuje používateľovi s ním niečo urobiť a potom ho uvoľní. Ak chcete skontrolovať, ako bol formulár ukončený, musíme využiť skutočnosť, že metóda ShowModal je funkcia, ktorá vracia jednu z niekoľkých hodnôt ModalResult. Zmeňte riadok

instagram viewer

F.ShowModal

na

ak F.ShowModal = mrOk potom

Potrebujeme nejaký kód v modálnej podobe, aby sme nastavili čokoľvek, čo chceme získať. Existuje viac ako jeden spôsob, ako získať ModalResult, pretože TForm nie je jediným komponentom, ktorý má vlastnosť ModalResult - TButton má tiež jeden.

Pozrime sa najprv na ModalResult spoločnosti TButton. Spustite nový projekt a pridajte jeden ďalší formulár (Delphi IDE Hlavné menu: Súbor -> Nový -> Formulár). Tento nový formulár bude mať názov „Form2“. Potom do hlavného formulára (Form1) pridajte tlačidlo TButton (Name: 'Button1'), dvakrát kliknite na nové tlačidlo a zadajte nasledujúci kód:

procedúra TForm1.Button1Click (Sender: TObject); var f: TForm2; začať
f: = TForm2.Create (nula); vyskúšaťak f. ShowModal = mrOk potom
Titulok: = 'Áno'
inak
Titulok: = 'Nie'; konečne
f. uvoľniť; koniec; koniec;

Teraz vyberte ďalší formulár. Dajte mu dva TButtony a označte jedno 'Save' (Názov: 'btnSave'; Titulok: „Uložiť“) a ďalšie „Zrušiť“ (Názov: „btnCancel“; Titulok: „Zrušiť“). Vyberte tlačidlo Uložiť a stlačením klávesu F4 vyvolajte Object Inspector, posúvajte sa hore / dole, kým nenájdete vlastnosť ModalResult a nastav to na mrOk. Vráťte sa do formulára a vyberte tlačidlo Zrušiť, stlačte kláves F4, vyberte vlastnosť ModalResult a nastavte ju mrCancel.

Je to také jednoduché. Teraz stlačte F9 pre spustenie projektu. (V závislosti na nastavení vášho prostredia môže spoločnosť Delphi vyzvať na uloženie súborov.) Keď sa objaví hlavný formulár, stlačením tlačidla1, ktoré ste pridali skôr, zobrazíte podradený formulár. Keď sa zobrazí podradený formulár, stlačte tlačidlo Uložiť a formulár sa zatvorí. Po návrate k hlavnému formuláru si všimnite, že v nadpise je „Áno“. Stlačením tlačidla hlavného formulára znova vyvoláte podradený formulár, ale teraz stlačte tlačidlo Zrušiť (alebo položku ponuky Systém zavrieť alebo tlačidlo [x] v oblasti titulkov). Titulok hlavného formulára bude mať hodnotu „Nie“.

Ako to funguje? Ak chcete zistiť, pozrite sa na udalosť Click pre TButton (zo stránky StdCtrls.pas):

procedúra Tna. kliknite na tlačidlo; var Forma: TCustomForm; začať
Forma: = GetParentForm (Self); ak Forma nula potom
Formulár. ModalResult: = ModalResult; zdedený kliknite na tlačidlo; koniec;

Čo sa stane, je vlastník (v tomto prípade sekundárna forma) TButton dostane svoju sadu ModalResult podľa hodnoty ModalResult TButton. Ak nenastavíte TButton. ModalResult, potom je hodnota mrNone (štandardne). Aj keď je tlačidlo TButton umiestnené na inej kontrole, na nastavenie výsledku sa stále používa nadradená forma. Posledný riadok potom vyvolá udalosť Click zdedenú z triedy predkov.

Aby sme pochopili, čo sa deje s Forms ModalResult, je užitočné skontrolovať kód v Forms.pas, ktorý by ste mali nájsť v.. \ DelphiN \ Source (kde N predstavuje číslo verzie).

Vo funkcii ShowModal TForm ihneď po zobrazení formulára sa spustí slučka Repeat-Until, ktorá udržuje kontrolu, či sa premenná ModalResult nestane hodnotou väčšou ako nula. Ak k tomu dôjde, konečný kód formulár uzavrie.

ModalResult môžete nastaviť v čase návrhu, ako je opísané vyššie, ale môžete tiež nastaviť vlastnosť ModalResult formulára priamo v kóde v čase spustenia.

instagram story viewer