Postoje dva osnovna tipa aplikacija SDI i MDI. Kod SDI aplikacija (Single-document interface) može se samo jedan dokument otvoriti u jednom trenutku. Primer SDI aplikacije je Notepad. Kod MDI aplikacija (Multiple document interface) nekoliko dokumenata se može otvoriti istovremeno. MDI aplikacija se sastoji od jednog roditeljskog prozora i jednog ili više prozora potomaka.

MDI (Multiple Document Interface) aplikacije omogućavaju korišćenje više prozora unutar jednog glavnog prozora.

Karakteristike MDI aplikacija:
  • Glavna forma (Parent): Sadrži menije, alatne trake i podprozore (child windows).
  • Podprozori (Child forms): Unutrašnje forme koje se otvaraju u glavnoj formi.
  • Korišćenje menija: MDI aplikacije često koriste menije za upravljanje podprozorima, omogućavajući otvaranje novih, zatvaranje, i prebacivanje između prozora.

Koraci za kreiranje MDI aplikacije:
  1. Pokretanje Visual Studio-a: Napraviti novi projekat tipa Windows Forms App.
  2. Podešavanje glavne forme (Parent Form): U svojstvima glavne forme, postaviti svojstvo IsMdiContainer na True. Ovo svojstvo označava da će forma biti MDI roditelj.
  3. Dodavanje menija u glavnu formu:
    • Dodati MenuStrip u glavnu formu i kreirati menije poput "File" i opcije "New" za otvaranje novih podprozora.
    • dvoklikom na stavku u meniju treba programski kreirati instancu druge forme (forma dete koja će da se prikaže), postaviti da je to "dete" ove forme (this) i prikazati je
    • za svaku stavku u meniju se programira šta se desi kada se klikne (sem za listu "dece" - formi)
    • Za prebacivanje između otvorenih prozora se može postaviti posebna stavka u meniju
      • stavka za prikaz postojeće "dece" (formi) se dodaje za ceo MenuStrip preko property: MdiWindowListItem -tu treba odabrati stavku u meniju koja će da služi za to

(Ovo nije jedini način rada - može se postaviti da se automatski sve učitava - podprozori u glani prozor. )

Kako bi to izgledalo:

public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
// Postavi formu kao MDI roditelja
this.IsMdiContainer = true;
}

// Događaj za otvaranje nove podforme
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
// Kreiraj novu podformu (Child form)
ChildForm childForm = new ChildForm();
childForm.MdiParent = this; // Postavi roditelja
childForm.Show(); // Prikaži podformu
}
}

public partial class ChildForm : Form
{
public ChildForm()
{
InitializeComponent();
}
}

Primeri za pojedine stavke MenuStrip-a za MDI aplikaciju:

Ako želimo da zatvorimo aktivnu podformu: ()

private void closeToolStripMenuItem_Click(object sender, EventArgs e)
{
if (this.ActiveMdiChild != null)
{
this.ActiveMdiChild.Close(); // Zatvori aktivnu podformu
}
}

Ako želimo da preuredimo kako su podprozori poređani: ()

MDI aplikacije često omogućavaju preuređivanje otvorenih prozora koristeći opcije poput Tile ili Cascade. U nastavku su oba primera:

private void cascadeToolStripMenuItem_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.Cascade); // Preuredi podprozore u kaskadu
}

private void tileHorizontalToolStripMenuItem_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.TileHorizontal); // Preuredi podprozore horizontalno
}


Primer 1:

U nastavku je video predavanje - onako kako možemo da radimo prvu vežbu:

Kreirati aplikaciju sa glavnom formom i dve forme unutar nje. Na prvoj podformi treba da je dugme sa kojim se prikazuje slika (logo C#), a na drugoj da je dugme za prikaz kako radi naredba if (sliku napraviti u Paint-u). Na kraju predavanja je zadat i domaći zadatak:



Primer 2

Kreirati MDI aplikaciju u kojoj se nalazi meni sa sledećim opcijama: 

  • forma za unos, 
  • forma za prikaz, 
  • otvoreni podprozori, 
  • aktivni prozor u levo, 
  • aktivni prozor u desno, 
  • zatvori aktivni prozor, 
  • zatvori aplikaciju
  1. Klikom na opciju "forma za unos" treba da se otvori podforma za unos podataka: ime, prezime, godina rođenja, razred, smer. Kako se kuca, podaci treba da se smeštaju u odgovarajuće statičke promenljive na formi. 
  2. Klikom na opciju "forma za prikaz" treba da se otvori prazna forma za prikaz na kojoj se nalazi samo jedno dugme. klikom na dugme se preuzimaju podaci sa prve forme i prikazuju u labelama druge forme.
  3. Klikom na opciju "aktivni prozori" treba da se vidi koje su sve forme otvorene
  4. Opcije "aktivni prozor u LEVO" i "aktivni prozor u DESNO" treba da "prilepi" aktivni podprozor u levu ili desnu polovinu glavnog prozora
  5. Klikom na opciju "zatvori aktivni prozor" treba da se zatvori podprozor na kojem je fokus
  6. Klikom na opciju "Zatvori aplikaciju" se zatvara kompletna aplikacija


Primer 3 (preuzet od 2. grupe ): pokušati ovo uraditi kod kuće

- Primer je preuzet iz 2. grupe, pa je i način postavljanja zadatka malo drugačiji - bliži nastavniku koji radi sa tom grupom. -

Napraviti novi projekat (windows forms aplikacija), sa početnom formom i još tri forme (ukupno 4 forme). Imena formi mogu ostati kao po default-u (Form1, Form2, Form3, Form4).

Prva forma treba da bude roditelj za ostale forme (proglasiti je MDI roditeljem). Na nju postaviti MenuStrip sa opcijom Forme, a kao podopcije: Forma 2 i Forma 4

Na drugu formu treba postaviti 4 TextBox-a: ime, prezime, smer, godina upisa i jedno dugme na kojem piše "Prebaci podatke". Klikom na dugme "Prebaci podatke" sa druge forme treba da se pojavi treća forma i u njenim labelama da se ispišu podaci koji su se nalazili u TextBox-ovima druge forme, koristeći odgovarajuće pomoćne promenljive koje su napravljene na formi 3.

(Na treću formu postaviti 4 labele sa istim nazivima ...)

Na četvrtu formu takođe postaviti 4 labele i ToolStrip meni. Klikom na prvo dugme u ToolStrip-u treba da se učitavaju podaci iz TextBox-ova druge forme korišćenjem pomoćne statičke instance forme 2, odnosno direktnim pristupom TextBox-ovima forme 2 sa forme 4. Drugo dugme u ToolStrip-u treba da zatvara formu 4.


Rešenja poslednjeg zadatka (jedna od verzija):


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication7
{
    public partial class Form1 : Form
    {
   
        public static Form1 f1;
        public Form1()
        {
            InitializeComponent();
            f1 = this;
        }

        private void forma2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.MdiParent = this;
            f2.Show();
        }

        private void forma4ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form4 f4 = new Form4();
            f4.MdiParent = this;
            f4.Show();
        }
    }
}



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication7
{
    public partial class Form2 : Form
    {
        public static Form2 f2;
        public TextBox txt1;
        public TextBox txt2;
        public TextBox txt3;
        public TextBox txt4;
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            
            f2 = this;
            txt1 = textBox1;
            txt2 = textBox2;
            txt3 = textBox3;
            txt4 = textBox4;

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3();
            f3.MdiParent = Form1.f1;
            f3.ime = textBox1.Text;
            f3.prezime = textBox2.Text;
            f3.smer = textBox3.Text;
            f3.godina = int.Parse(textBox4.Text);
            f3.Show();

        }

    }
}



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication7
{
    public partial class Form3 : Form
    {
        public string ime;
        public string prezime;
        public string smer;
        public int godina;
        public Form3()
        {
            InitializeComponent();
            
        }

        private void Form3_Load(object sender, EventArgs e)
        {
            label1.Text = ime;
            label2.Text = prezime;
            label3.Text = smer;
            label4.Text = godina.ToString();

        }
    }
}



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication7
{
    public partial class Form4 : Form
    {

        public Form4()
        {
            InitializeComponent();
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            label1.Text = Form2.f2.txt1.Text;
            label2.Text = Form2.f2.txt2.Text;
            label3.Text = Form2.f2.txt3.Text;
            label4.Text = Form2.f2.txt4.Text;

        }
    }
}


Last modified: Tuesday, 2 December 2025, 5:53 AM