2. MDI (Multiple Document Interface)

Multiple Document Interface používáme běžně, i když si toho možná nejsme vědomi. Jedná se o možnost mít otevřených více oken v rámci jedné aplikace. Tato podřízená okna jsou přímo závislá na rodičovském okně a nemohou se přesunout z jeho plochy. Rodičovská aplikace rovněž může provádět s potomky různé operace v závislosti na jejich změnách (zavření potomka, aktivace potomka apod.).

2.1. Vytvoření rodičovského okna

Pokud chceme vytvořit takovouto aplikaci, je třeba určit formulář, který bude rodičovský. To provedeme s pomocí vlastnosti Form.IsMdiContainer.

[ukázka kódu]
// konstruktor rodicovskeho formulare
public FormParent() {
...
  // nastavim aktualni formular jako rodic
  this.IsMdiParent = true;

  // vytvoreni a zobrazeni formularu - potomku
  Form pdr = new FormChild();
  // nastaveni rodicovskeho formulare  
  pdr.MdiParent = this;
  pdr.Show();

  Form pdr1 = new FormChild2();
  pdr1.MdiParent = this;
  pdr1.Show();
}

V kódu výše uvedeném jsme zároveň určili, která okna budou potomky aktuálního okna.

2.2. Práce s potomky rodičovského okna

Nyní můžeme s okny - potomky provádět různé operace. Ukážeme si, jak lze použít prvek Menu. Z menu budeme ovládat, jak seřadit potomky aktuálního okna (horizontální, vertikální, kaskádové řazení).

Nejprve do rodičovského okna vložíme prvek Menu a do něj odkazy na styl uspořádání oken - potomků (TileHorizontal, TileVertical, Cascade). Pokud bychom toto chtěli dělat ručně, čeká nás dost zdlouhavé a nezáživné práce s vytvářením menu. Proto je výhodnější použít vizuální nástroje, které vygenerují menu tak, jak si jej vytvoříme v náhledu.

Obrázek 11.5. Vložení menu do formuláře

Vložení menu do formuláře

Poté, co vložíme menu do našeho projektu, se objeví na stadnardním místě. Když jednou klikneme na první pozici (většinou bývá prázdná), budeme moci tuto pozici přejmenovat a po přejmenování se objeví nová pozice. Pokud budeme chtít nad touto pozicí vyvolat nějakou akci, poklikáme na ni dvakrát a dostaneme se přímo do obsluhy události pro tuto pozici.

Ve vlastnostech konkrétní pozice si můžeme nastavit, jakou tato pozice bude mít klávesovou zkratku a také horkou klávesu.

Horká klávesa se označí přidáním znaku "&" před písmeno vlastnosti Text, které chceme označit jako "horké".

Klávesová zkratka se nastavuje prostřednictvím vlastnosti Shortcut.

Takto tedy vytvoříme hlavní položku menu "Uspořádat okna" a pod ni umístíme podmenu s položkami Horizontálně, Vertikálně, Kaskádovat. Následně vytvoříme akce pro tyto položky. Pro uspořádání oken se zavolá metoda předka, která své potomky uspořádá podle potřeby.

[ukázka kódu]
// usporada okna - potomky v rodicovskem okne horizontalne
this.LayoutMdi(MdiLayout.TileHorizontal);
...
[příklad ke stažení]

Ukázka na práci s okny rodič - potomek je k dispozici zde.