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);
}
}