Obrazec (nemodalni, kot tudi modalni) lahko zapremo na dva načina:
- s pomočjo sistemskega gumba v zgornjem
desnem delu okna (pri tem modalni obrazec vrne takšno vrednost, kot če bi kliknili na modalni gumb)
- z metodo Close (pri neki odzivni metodi). Pri modalnem obrazcu s pomočjo modalnega gumba. Modalni gumb je gumb, ki ima nastavljeno lastnost DialogResult. Lastnost DialogResult vrača podatek o tem kako smo okno zaprli.
POZOR! Ko obrazec zapremo se ne uniči in še kar zaseda prostor v pomnilniku (seveda le dokler se ne
konča blok, v katerem je bil odprt oz. kreiran z operatorjem new ). Programsko obrazec uničimo in sprostimo pomnilnik z metodo Dispose.
Ko obrazca ne želimo zapreti ali uničiti, ampak le začasno skriti, lahko uporabimo metodo Hide. Kasneje lahko obrazec ponovno prikažemo z metodo Show.
Modalni obrazci pri zapiranju vračajo podatek o tem, kako jih je uporabnik zaprli.
Zapiranje okenca je včasih nenamerno. Morda smo pozabili shraniti podatke in ko bi okno zaprli, bi bili podatki izgubljeni.
Ko želi uporabnik zapreti obrazec, v njem pa so ostali neshranjeni podatki, ga na to opozorimo.
Aplikacija je zasnovana tako, da se po vsaki posodobitvi podatkov, vnosi v vnosnih poljih pobrišejo. Torej, če želi uporabnik zapreti obrazec, v vnosnih poljih pa ostajajo podatki, sklepam, da uporabnnik z delom še ni zakjučil.
Odpre se modalno okno, ki uporabnika povpraša o njegovi resnični nameri, ali je zares želel prekiniti delo?
Na tem koraku lahko uporabnik izbira, ali z delom prekine (neshranjeni podatki so izgubljeni) ali nadaljuje (vpisani podatki ostajajo nespremenjeni).
Primer kode:
DialogResult odgovor = MessageBox.Show("Vnešeni so podatki, ki jih niste shranili. Ali želite vseeno zaključiti z delom?",
"Potrditev zaključka z delom", MessageBoxButtons.YesNo, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2);
if (odgovor == DialogResult.Yes) // če uporabnik želi zaključiti z delom, čeprav podatki še niso shranjeni
{
this.Close(); // zapremo modalno okno
}
|
Opozorilo, ko uporbnik želi zapreti okno, podatke pa pred tem ni shranil