

C# nezavírat potomky okna při zavření rodiče
Ahoj,
potřebovala bych poradit - mám Form a po stisknutí tlačítka se zobrazí další instance toho Formu.
private void New()
{
Form1 f = new Form1();
f.Show();
}
Funguje to, ale když zavřu první okno, zavřou se i všechny ostatní. Potřebovala bych, aby všechna okna byla na stejné úrovni. Děkuji za každou radu.
Neviem zhlavy ale ide o to zmenit ownera.
Skus z hlavneho formu zavolat toto http://msdn.microsoft.com/en-us/library/system.win dows.forms.form.removeownedform%28v=VS.71%29.aspx
Inac studovat sa da kopec veci tu http://msdn.microsoft.com/en-us/library/system.win dows.forms.form_members%28v=VS.71%29.aspx :)
inac ak chces mat viac rovnocennych okien pod jednym hlavnym oknom tak to sa u MS vola MDI (Multiple Document Interface) a o tom sa da kopec veci najst googlom napr.
http://www.c-sharpcorner.com/UploadFile/prasadh/MD IFormsinCSharp11292005005603AM/MDIFormsinCSharp.as px
myBestMDI.aspx
atd...
Omlouvám se, ten nadpis je asi trochu zavádějící.
Řekněme, že spustím aplikaci, otevře se Okno1. Z něho otevřu Okno2 a z Okna2 otevřu Okno3. Všechny vypadají úplně stejně tzn. měly by se stejně i chovat. Když zavřu Okno2, Okno3 se NEzavře, takže vlastně nejde o rodiče a potomky. Ale když zavřu Okno1, ukončí se aplikace a tím pádem se zavřou i všechny ostatní okna.
Já bych potřebovala, aby se aplikace ukončila, až když se zavře poslední otevřené okno, ať už bylo otevřené jako první nebo poslední. Prostě aby z tohoto pohledu byly na stejné úrovni. Ale vůbec nevím, jak toho docílit. Zkoušela jsem hledat, v cestine i anglictine, ale nenasla jsem
Děkuju za odkazy, ale na tohle mi asi nepomůžou, že?
Nóo. Poradím ti fintu.
nastíním ještě jednu cestu.
Ale než ti ji ukáži,
Můžeš zobrazovat tzv. modální dialog:
Naznačené volání funkce (auuuu bolí mě břicho, jsem se přejed) bude čekat až se zavře vždy poslední vytvořené okno.
Jednodušší a podmínky splňující bude, ale volat pro každé okno novou instanci programu, programy pak budou na sobě nezávislé.
Řekněme, že tvůj program se jmenuje program.exe :
Vykonáním uvedeného kodu docílíš tvého (auu) chování.
Více možností: 1) Hlavní okno otevřete jako skryté(prázdné), viditelná nechte jen podkokna. 2)Použijte výše uvedený odkaz od kolegy a ve funkci volané při uzavření okna si měňte "rodiče".
Mockrát děkuju, funguje to
Jen nechápu poznámku, že bych měla při zavírání "měnit rodiče", když jsou instance programu nezávislé. Nicméně to funguje i bez toho, tak snad v tom není nějaký háček...
Takéto správanie sa klasicky robí pomocou vlastného ApplicationContextu. Spravíš si vlastný kontext aplikácie, v ktorom preťažíš metódu OnMainFormClosed, aby sa pri zatvorení hlavného okna neukončila aplikácia. V obsluhe udalosti Application.Idle budeš kontrolovať počet otvorených okien v Application.OpenForms a v prípade, že klesne na nulu, ukončíš aplikáciu.
Samostatné procesy budú fungovať samozrejme tiež, ale so všetkými vlastnosťami, ktoré z toho vyplývajú, ako napr. zložitejšie riešenie komunikácie medzi formulármi, väčšie nároky na systémové prostriedky a pod.
Edit: Vo WPF sa to dá spraviť nastavením jednej vlastnosti Application.ShutdownMode.