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
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: March 31, 2005 23:26

Bookmarks: FaceBook |


  • RE: WinForms - Spolupráce mezi více formuláři by (11/2/2008 6:43:38 PM)

  • RE: WinForms - Spolupráce mezi více formuláři by (11/2/2008 6:46:37 PM)

  • RE: WinForms - Spolupráce mezi více formuláři by test (2/16/2009 5:47:56 PM)

    test


Send comments to this article

Hyperlinks are detected automatically and you can use **bold** and __italic__ to format your comment. If you're here for the first time, I'd like to make sure that you're human. I'm using Asirra, which is a great project from Microsoft Research. If you check 'Remember me' it won't ask again!

Title:
Name:
Url: