Komunikacija izmedju dve forme na API nacin...

Komunikacija izmedju dve forme na API nacin...

offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

Ako neko zeli da posalje neke podatke sa jedne forme na drugu, ovaj topic ce pomoci.

Prvo, morate da dodate namespace

using System.Runtime.InteropServices;


Posle, dodate deklaraciju SendMessage u vasoj klasi i konstantu potrebnu za funkciju Send Message


[DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); public const int WM_ACTIVATEAPP = 0x001C; // Ovo se dogadja kada se forma aktivira


Da bi se poslala poruka ne kreiranoj formi, potrebno je uraditi sledece


private void button1_Click(object sender, System.EventArgs e) {    Form2 frm = new Form2();    SendMessage(frm.Handle, WM_ACTIVATEAPP, 14, 0); // 14 is the number I send    frm.Show(); }


Kada ste handlovali click dugmeta, mozete da se skoncetrisete na primanje poruke.
Za ovo, potrebna vam je overriden funkcija, WndProc


protected override void WndProc(ref Message m) {    if (m.Msg == WM_ACTIVATEAPP)    {       if (m.WParam.ToString() == "14")          label1.Text = "Success ;)";    }    base.WndProc (ref m); }

To je to za kreiranje AdHoc formi, ali sta je sa onim formama koje su vec kreirane?
To je malko komplikovanije.

Treba da kreirate static property unutar vase klase tipa IntPtr koja ce se koristiti za smestanje window reference, rucice (handle) vec kreiranog prozora.


public class Status {    private static IntPtr formReference;    public static IntPtr FormReference    {       get { return FormReference; }       set { FormReference = value; }    } }


Pretpostavimo da smo vec kreirali novu instancu glavne main forme i unutar glavne forme pozivano drugu formu gde trebamo da dodamo podatke i nakom zavrsetka, da nam se pri zatvaranju forme, osveze podaci.


MainForm main = new MainForm(); // Instanca kreirana negde gore u fajlu ... SecondForm second = new SecondForm(); Status.FormReference = this.Handle; second.Show();


Na drugoj formi na dugmetu (npr.) dodamo sledeci code


SendMessage(Status.FormReference, WM_ACTIVATEAPP, 14, 0); this.Hide();


I to je to.

Ovo je samo primer. Code moze da se ocisti i bolje optimizuje.
Ako neko ima nesto da doda - slobodno.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 18 Jul 2005
  • Poruke: 312

Nije mi jasno zasto su ovo tako ukomplikovali u VS.NET?

Zar ne bi bilo dovoljno da, kao ranije, deklarisem promjenjivu kao Public i da joj dam vrijednost a iz druge forme da ucitavam tu vrijednost?



offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

Nisi razumeo. Nisu zakomplikovali. I dalje mozes da saljes podatke izmedju formi na taj nacim.

Ovo je samo jos jedan od nacina da komuniciras izmedju formi.
Primer je ako imas main formu u koju ucitavas ostale UserControle, pa hoces da kada kliknes neko dugme na UC da main forma reaguje.

Samo sam prikazao jos jedan nacin transporta informacija.

Ko je trenutno na forumu
 

Ukupno su 683 korisnika na forumu :: 13 registrovanih, 3 sakrivenih i 667 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 9k38, ALBION101, bobomicek, esx66, havoc995, hooraay, Kruger, minmatar34957, mrav pesadinac, suton, uruk, VP6919, 125