No i mialem chwile wiec przetestowalem moje rozwiazanie - dziala :)
Jak sie nalezy do tego zabrac:
po pierwsze trzeba stworzyc 2 formy
- Form1 zawiera textBox tbTekst oraz button btnOK
- Form2 zawiera tylko textBox tbOutput
W formie pierwszej tworzymy delegacje i na jej podstawie tworzymy zdarzenie
public delegate void Zdarzenie (object sender, OnZdarzenieEventArgs e);
public event Zdarzenie OnZdarzenie;
Oczywiscie potrzebne nam bedzie zdarzenie - klase zdarzenia mozna np. zagniezdzic w klasie form 1 - a jej kod to:
public class OnZdarzenieEventArgs:EventArgs
{
//ta zmienna przechowuje wartosc pola tekstowego
readonly string tekst;
//W momencie gdy powstaje zdarzenie tworzy sie rowniez obiekt EventArg
//w tym przypadku konstruktor ma tylko 1 parametr - wartosc pola tbTekst
public OnZdarzenieEventArgs (string tekst)
{
this.tekst=tekst;
}
//Tworzymy rowniez wlasciwosc do udostepniania tej zmiennej -
// nie jest to konieczne
// bo mozna zadeklarowac zmienna jako public ale tego nie powinno sie raczej
//robic
public string Tekst
{
get
{
return this.tekst;
}
}
}
W form2 dodajemy nastepujace 2 metody
//funkcje ktora dodamy do zdarzenia OnZdarzenie - musi miec ona
//taka sygnature jak delegacja Zdarzenie
public void Tekst (object sender, Form1.OnZdarzenieEventArgs eve)
{
tbOutput.Text=eve.Tekst;
}
//Funkcja subskrybuj informuje obiekt (przeslany w parametrze "o") ze
//chce byc powiadomiana o zdarzeniu OnZdarzenie
public void Subskrybuj(object o)
{
Form1 Form1_o = (Form1) o;
Form1_o.OnZdarzenie+=newWindowsApplication1.Form1.Zdarzenie(Tekst);
}
Ostatecznie jeszcze blok wywolujacy to wszystko
private void btnOK_Click(object sender, System.EventArgs e)
{
//Tworzymy formularz form2 (obiekt) i zaczynamy sledzic czy wywolane jest zdarzenie
Form2 form=new Form2();
form.Subskrybuj(this);
//Jesli ktos sledzi zdarzenie OnZdarzenie to je wywolujemy
if (OnZdarzenie!=null)
{
OnZdarzenieEventArgs eve = new OnZdarzenieEventArgs(tbNapis.Text);
OnZdarzenie (this, eve);
}
//pokazujemy form 2 ktory oczywiscie wyswietla zawartosc pola tbTekst z form1
form.Show();
}
Oczywiscie w tym przypadku to jest przerost formy nad trescia - ale takie rozwiazanie daje duzo mozliwosci - np mozna w prosty i bezpieczny sposob przekazywac wiele ustawien formularza, formularz moze byc sledzony przez kilka obiektow jednoczesnie (nie koniecznie form) itd itp
Istnieje tez prostsza wersja tego rozwiazania oparta na interfejsach. Ale jestm ciekaw co o tym sodzicie. Ja dopiero zaczynam nauke c# wiec moze to rozwiazanie ma jakies oczywiste minusy?