Egy Form-ból úgy készíthetünk MDI szülő ablakot, hogy annak IsMdiContainer property-jét igazra állítjuk. Ha már van MDI szülő, akkor ehhez MDI gyermek ablakot a következőképpen rendelhetünk. Hozzunk létre egy szokványos Form-ot, majd ennek megjelenítésekor az MdiParent property-t állítjuk be a MDI szülő Form-ra.
Form2 form2 = new Form2();
form2.MdiParent = this;
form2.Show();
Mivel minden MDI gyermek ablak így módon tárolja a szülő ablakot, ezt felhasználhatjuk arra is, hogy a gyermek ablakból elérhetjük a szülő ablak tulajdonságait és befolyásolhatjuk azokat.
private void button1_Click(object sender, System.EventArgs e)
{
this.MdiParent.Text = DateTime.Now.ToString();
}
A Form-nál találunk egy MdiChildren nevű property-t. Ez egy olyan kollekciót tárol, melyben az összes gyermek Form megtalálható. Így egy ciklus segítségével könnyedén végigmehetünk az összes gyermek Form-on és tetszőleges műveleteket végezhetünk rajtuk.
for (int i=0; i<this.MdiChildren.Length; i++)
{
this.MdiChildren[i].Width=m;
this.MdiChildren[i].Height=m;
}
Készíthetünk például egy olyan funkciót is, mely bezárja az összes megnyitott gyermek Form-ot.
A MDI szülő Form MdiChildActivate eseményét felhasználva értesülhet alkalmazásunk arról, hogy megváltozott az aktív gyermek ablak és mostantól egy másik gyermek ablak lett az aktív. Hogy melyik is lett ez az aktív ablak, azt az ActiveMdiChild property-n keresztül tudhatjuk meg, mely Form típusban tárolja ezt az információt.
private void Form1_MdiChildActivate(object sender, System.EventArgs e)
{
label1.Text = this.ActiveMdiChild.Text;
}
Arra is lehetőségünk van, hogy a megnyitott MDI gyermek ablakokat elrendezzük egymáshoz képest. Ehhez a szülő Form LayoutMdi függvényét kell meghívnunk.
private void menuItem2_Click(object sender, System.EventArgs e)
{
MenuItem mi = sender as MenuItem;
this.LayoutMdi((MdiLayout)mi.Index);
}
Az elrendezés módja az alábbiak egyike lehet:
| Mód |
Leírás |
| ArrangeIcons |
A minimalizált méretű gyermek Form-ok egymás mellé rendezése. |
| Cascade |
A gyermek Form-ok egymásra lapoltan rendeződnek el. |
| TileHorizontal |
Vízszintesen egymás mellé kerülnek a gyermek ablakok. |
| TileVertical |
Függőlegesen egymás alá kerülnek a gyermek ablakok. |