Kada radimo sa više formi, često je potrebno da prosleđujemo podatke između njih. Najčešći pristupi su:

a) Prosleđivanje podataka prilikom kreiranja forme (pomoću konstruktora)

U ovom slučaju se podaci prosleđuju kroz konstruktor nove forme:

public class Form2 : Form
{
private string data;

public Form2(string data)
{
InitializeComponent();
this.data = data;
}
}

U Form1 se instancira Form2 i proslede podaci:

Form2 form2 = new Form2("Neki podaci");
form2.Show();

  • Kreirati projekat sa dve forme: Form1 (glavna forma) i Form2 (druga forma).
    • Na prvoj formi treba da je labela, textBox i jedno dugme, a na drugoj formi bar  jedna labela za prikaz poslatih podataka.
  • U Form2 :
    • dodati Label kontrolu lblPodatak, koja će prikazivati prosleđeni podatak.
    • postaviti i svojstvo podatak  u koje sa postavlja primenjeni podatak
    • nakon toga, definisati konstruktor koji prima podatke 
    • prilikom učitavanja forme treba da se podatak prikazuje u labeli
  • U Form1
    • kada se klikne na dugme treba da se kreira konkretan primerak  Form2.
    • Prrilikom kreiranja objekta proslediti podatke pomoću konstruktora.

Deo rešenja sa objašnjenjima je u nastavku:

1. Form1.cs (glavna forma)

Definisati glavnu formu koja će proslediti podatke prilikom otvaranja druge forme.

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

private void button1_Click(object sender, EventArgs e) { string podatak = textBox1.Text;
        Form2 forma = new Form2(podatak);
        forma.Show();
    }
}

2. Form2.cs (druga forma)

Primiti podatke kroz konstruktor i prikazati ih u labeli.

U ovom primeru treba ostaviti konstruktor bez parametara (trebaće nam za sledeće primere) i dodati konstruktor sa jednim parametrom:

public partial class Form2 : Form
{
    private string podatak;

    public Form2(string data)
    {
        InitializeComponent();
        this.podatak = data;
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        lblPodatak.Text = podatak;
    }
}

b) Korišćenje javnih metoda ili svojstava

Druga opcija je kreiranje javnih svojstava ili metoda u drugoj formi za postavljanje ili dobijanje podataka:

public class Form3 : Form
{
public string Data { get; set; }
}

Zatim u Form1:

Form3 form3 = new Form3();
form3.Data = "Neki podaci";
form3.Show();

U prethodni zadatak dodati deo u kojem se podaci prosleđuju javnih metoda. U ovom primeru, Form1 (glavna forma) će otvoriti Form3 (treća forma) i proslediti joj podatke koristeći javnu metodu definisanu u Form3.

Koraci po kojima se radi:
  1. Pošto već imamo kreirane forme: Form1 (glavna forma) i Form3 (treća forma).
    • U Form1, dodati dugme koje će, kada se klikne, otvoriti Form3. Dugme nazveti buttonOpenForm3.
    • U Form3, dodati Label kontrolu labelDataDisplay3, koja će prikazivati prosleđene podatke.
  2. Definisati javnu metodu u Form3 koja prima podatke i ispisuje ih u Label. Metodu nazvati SetData.
  3. Pozvati tu metodu iz Form1 kako bi se podaci prosledili u Form3.
    • Pozvati tu metodu iz Form1 pre nego što se prikaže Form3.
1. Form1.cs (glavna forma)

Dodati dugme na formu. Nazvati ga btnOtvoriForm2 i na klik da se postavi nova forma2 i da joj se pošalju podaci:

private void btnOtvoriForm3_Click(object sender, EventArgs e)
{
// Kreiraj instancu Form3
Form3 form3 = new Form3();

// Prosledi podatke u Form3 pomoću javne metode
form3.SetData("Pozdrav iz Form1");

// Prikaži Form3
form3.Show();
}
2. Form3.cs (druga forma)

Definisati javnu metodu koja će primati podatke iz Form1 i prikazati ih u Label kontroli. Metodu postaviti odmah nakon konstruktora. Pozvati je ili prilikom učitavanja forme3 ili klikom na neko dugme.

// Definiši javnu metodu za postavljanje podataka
public void SetData(string data)
{
// Prikaži prosleđeni podatak u Label kontroli
labelDataDisplay3.Text = data;
}
Objašnjenje:
  • Form3 definiše javnu metodu SetData koja prima string podatak.
  • Form1 kreira instancu Form3, poziva metodu SetData i prosleđuje podatke pre nego što prikaže Form3.

Zatadak: Proslediti podatke između formi pomoću javnih svojstava. U ovom delu, Form1 (glavna forma) će otvoriti Form4 (čevrta forma) i proslediti joj podatke koristeći javno svojstvo definisano u Form4.

Dizajn formi Form1 i Form4:
  1. U Form1, dodati dugme btnOpenForm4 koje će otvoriti Form4 kada se klikne.
  2. U Form4:
    • dodati Label kontrolu lblDataDisplay, koja će prikazivati prosleđene podatke.
    • definisati javno svojstvo u Form4 koje će primati podatke.
  3. Postaviti vrednost tog svojstva iz Form1 pre nego što prikažeš Form4.
1. Form1.cs (glavna forma)

Dodati u formu dugme sa nazivom btnOpenForm4. Potrebno je postaviti podatke u svojstvo Form4 pre nego što se prikaže.

private void buttonOpenForm4_Click(object sender, EventArgs e)
{
// Kreiraj instancu Form4
Form4 form4 = new Form4();

// Postavi podatke koristeći javno svojstvo
form4.DataSvojstvo = "Pozdrav iz Form1";

// Prikaži Form4
form4.Show();
}

2. Form4.cs (druga forma)

Definisati javno svojstvo koje prima podatke iz Form1 i prikazuje ih u Label kontroli prilikom učitavanja forme4.

// Definiši javno svojstvo za primanje podataka
public string DataSvojstvo { get; set; }

// nakon svojstva su konstruktori

// Preuzmi podatak i prikaži ga prilikom učitavanja forme
private void Form4_Load(object sender, EventArgs e)
{
// Prikaži prosleđeni podatak u Label kontroli
lblDataDisplay.Text = Data;
}

Objašnjenje:
  • Form4 definiše javno svojstvo Data koje prima string vrednost.
  • U Form1, pre nego što se Form4 prikaže, postavlja se vrednost tog svojstva.
  • Kada se Form4 učita (Form_Load događaj), vrednost svojstva DataSvojstvo se prikazuje u Label kontroli.

c) Povratak podataka iz forme

Ako se koristi modalna forma (ShowDialog()), podaci se mogu vratiti prilikom zatvaranja forme:

U tom slučaju treba da se u Form5 kreira javno svojstvo za podatke koje treba vratiti:

public string ReturnedData { get; set; }

private void buttonClose_Click(object sender, EventArgs e)
{
this.ReturnedData = "Povratni podaci";
this.DialogResult = DialogResult.OK; // Zatvara formu
this.Close();
}

U Form1:

Form5 form5 = new Form5();
if (form5.ShowDialog() == DialogResult.OK)
{
string povratniPodaci = form4.ReturnedData;
// Koristi povratne podatke
}

d) Event-driven komunikacija

Forma može emitovati događaj koji druga forma može osluškivati. Na ovaj način, može da se pošalje obaveštenje u glavnu formu o promenama u drugoj formi.

Na primer, u Form6 može da se kreira događaj:

public event EventHandler DataUpdated;

private void buttonUpdate_Click(object sender, EventArgs e)
{
DataUpdated?.Invoke(this, EventArgs.Empty);
}

Zatim u Form1 može da se pretplati na događaj:

Form6 form6 = new Form6();
form6.DataUpdated += (sender, args) =>
{
// Ovaj kod se izvršava kada se događaj okine u Form2
MessageBox.Show("Podaci su ažurirani!");
};
form6.Show();

Ovaj način je koristan kada je potrebno obavestiti glavnu formu da je neka akcija izvršena na drugoj formi.

Vežba 3: Kreirati primer komunikacije između dve forme koristeći event-driven pristup, gde Form2 obaveštava Form1 da su podaci ažurirani.

Koraci:

  1. Kreirati dve forme: Form1 (glavna forma) i Form2 (druga forma).
  2. U Form2 kreirati događaj koji će se emitovati kada se ažuriraju podaci.
  3. Form1 će slušati taj događaj i reagovati na ažuriranje.
Programski kod:
1. Form1.cs (glavna forma)

Ovo je forma koja će otvoriti Form2 i slušati njen događaj.

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

private void buttonOpenForm2_Click(object sender, EventArgs e)
{
// Kreiramo instancu Form2
Form2 form2 = new Form2();

// Pretplaćujemo se na događaj DataUpdated iz Form2
form2.DataUpdated += Form2_DataUpdated;

// Otvaramo Form2
form2.Show();
}

// Ova metoda se poziva kada Form2 emituje događaj
private void Form2_DataUpdated(object sender, EventArgs e)
{
// Ovdje reagujemo na događaj
MessageBox.Show("Podaci u Form2 su ažurirani!");
}
}

2. Form2.cs (druga forma)

Ovo je forma koja će emitovati događaj kada podaci budu ažurirani, npr. klikom na dugme.

public partial class Form2 : Form
{
// Definisati događaj koji će slati obaveštenje
public event EventHandler DataUpdated;

public Form2()
{
InitializeComponent();
}

private void buttonUpdateData_Click(object sender, EventArgs e)
{
// Emitovati događaj kada se dugme klikne
DataUpdated?.Invoke(this, EventArgs.Empty);
}
}

Objašnjenje:
  • U Form2 je definisan događaj DataUpdated, koji će biti emitovan kad korisnik klikne na dugme (npr. kada ažurira podatke).
  • U Form1, pretplaćuje se na taj događaj tako što se koristi form2.DataUpdated += Form2_DataUpdated. Kada se događaj pokrene, izvršava se metoda Form2_DataUpdated, gde se prikazuje poruku o ažuriranju podataka.
Koraci za testiranje:
  1. Kreiraj obe Windows Forme i dodati dugme u obe forme.
  2. U Form1, dugme će otvarati Form2.
  3. U Form2, dugme će emitovati događaj koji obaveštava Form1 da su podaci ažurirani.

Da ponovimo koji su koraci:
  • Kreirati više formi koristeći Visual Studio.
  • Koristiti Show() ili ShowDialog() za otvaranje formi.
  • Komunikacija se može vršiti kroz konstruktore, javna svojstva/metode ili događaje.

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