WinForms - Spolupráce mezi více formuláři
Co tento článek ukazuje
- Jak vytvářet formuláře, které budou vždy "nad" hlavním oknem
- Jak umožnit více formulářům vzájemnou komunikaci
- Jak požadovat při zavírání formuláře potvrzení akce
Komunikace mezi formuláři
V aplikaci, která je vidět na obrázku jsou dva forumuláře. Hlavní formulář
(MainForm
) je zobrazený stále a druhý formulář - panel nástrojů
(ToolsForm
) je možné zobrazovat a skrývat z hlavního formuláře.
V panelu nástrojů je jednak tlačítko které zavírá panel (ale předtím se aplikace
ještě zeptá jestli chcete panel opravdu zavřít). Dále je možné z panelu
nástrojů měnit barvu PictureBoxu
v hlavním formuláři.
Vytváření panelu s nástroji
Při kliknutí na tlačítko 'Zobrazit nástroje' (které je klikatelné pouze
pokud není zobrazen panel s nástroji), se nejprve vytvoří nový formulář
a poté se posune tak aby byl vpravo od hlavního formuláře. Nově vytvořenému
formuláři musíme nějakým způsobem umožnit přistupovat k hlavnímu formuláři,
proto mu při vytváření předáme referenci na hlavní formulář pomocí
klíčového slova this
, které reprezentuje objekt ve kterém je
použíté (tj. hlavní formulář). Vytváření nového formuláře vypadá takto:
// pri vytvareni preda formulari odkaz na sebe frmTools=new ToolsForm(this); // nastavi panelu s nastroji vlastnika na tento formular,
// takze panel s nastroji bude vzdy "nad" nim frmTools.Owner=this; // zobrazi a posune panel s nastroji frmTools.Show(); frmTools.Location=new Point(Left+Width,Top);
Aby bylo možné při vytváření panelu s nástroji předat referenci na
hlavní formulář, je potřeba upravit konstruktor (speciální funkce,
která se volá při vytváření objektu), tak aby měl jako parametr
referenci na objekt typu hlavní formulář (MainForm
) a
aby si tuto referenci pro další použití uložil. Kód panelu nástrojů
tedy vypadá takto:
// Zde si ukladame referenci na hlavni formular MainForm main; // Upraveny konstruktor s parametrem public ToolsForm(MainForm main) { // Zde si ulozime referenci this.main=main; // Toto je vyzadovane volani WinForms InitializeComponent(); }
Zavírání panelu s nástroji
Při pokusu o zavření panelu s nástroji se aplikace ještě uživatele
zeptá, jestli chce panel opravdu zavřít. To je uděláno pomocí události
Closing
, která se vyvolá pokud se někdo pokusí zavřít formulář.
Pokud chcete tuto událost zpracovávat ve vaší aplikaci, klikněte na formulář,
v Properties vyberte události (events) a poklepejte na Closing. Kód který
zobrazí dotaz jestli se má formulář opravdu zavřit ukazuje následující ukázka:
private void ToolsForm_Closing(object sender,CancelEventArgs e) { if (MessageBox.Show("Opravdu chcete zavrit panel?",Text, MessageBoxButtons.YesNo)==DialogResult.No) { // nastavime ze se ma akce zrusit! e.Cancel=true; } else { // posle zpravu hlavnimu formulari, ze byl panel zavren main.EnableButtons(false); } }