TP

WinForms - Spolupráce mezi více formuláři

Co tento článek ukazuje

Ukázková aplikace

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

Soubory na stažení

Published: Thursday, 31 March 2005, 11:26 PM
Author: Tomas Petricek
Typos: Send me a pull request!
Tags: