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.
|