Pošto vas je mrzelo da napišete, a ja sam u međuvremenu provalio kako se to radi, aj da napišem rešenje pa će nekome možda i koristiti.
Znači zadatak je ovakav, pravim neku custom kontrolu u c# koja će biti korišćena u jednoj c++ aplikaciji.
Potrebno je napraviti event (nazvaću ga MyEvent) koji će aplikaciji proslediti podatke (2 integera) preko EventArgs.
Prvo negde van klase (koja nasleđuje UserControl) deklarišem jedan delegat
Code:
public delegate void MyEventHandler(object sender, MyEventArgs e);
On čuva referencu na f-ju koja prima 2 argumenta. Prvi je sender (tipa object) koji predstavlja objekat koji je pozvao event, i drugi su argumenti (biće objašnjeni kasnije).
Potrebno je napraviti klasu MyEventArgs koja nasleđuje klasu EventArgs i koja će čuvati argumente (2 integera).
Code:
public class MyEventArgs : EventArgs
{
private int x, y;
public MyEventArgs(int x, int y)
{
this.x = x; this.y = y;
}
public int X
{
get { return x; }
}
public int Y
{
get { return y; }
}
}
U user kontroli deklarišemo event MyEvent
Code:
public event MyEventHandler MyEvent;
I potrebno je overridovati metodu OnMyEvent (obično se dodaje On + naziv eventa)
Code:
protected virtual void OnMyEvent(MyEventArgs e)
{
MyEvent(this, e);
}
I sad dalje u kodu, kada želimo da se dogodi neki event, dodamo
Code:
OnMyEvent(new MyEventArgs(xx, yy));
Gde su xx i yy neki integeri koje prosleđujemo kao argumente eventima.
Kako c++ aplikacija zna da se dogodio neki event, tj. kako povezati taj event sa c++ aplikacijom?
Postoje 2 načina. Prvi je da se ručno kucka, a ima i onaj lakši :)
Iz design moda, klikne se na custom kontrolu i u Properties prozoru pod stavkom Events (žuta munja), nađete Event koji se naziva MyEvent. Dvostruki klik na njega i dalje sa njim radite isto kao i sa ostalim kontrolama i njihovim ventima tipa button click i sl.
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D