[ satir81 @ 29.03.2008. 13:22 ] @
Imam osnovnu forrmu Form1 i klikom na jedno dugme aktivira se Form2.
Iz Form2 zelim da radim neka proracunavanje koja kasnije treba da se sumiraju u Form1.
Moje pitanje se odnosi kako da formiram jednu globalnu promenjivu na nivou te dve forme ili promenjivu Form1 koja ce biti obradjivana u Form2?????
[ deerbeer @ 29.03.2008. 15:53 ] @
stavi tu promenljivu u Form1 (private member) .
Napravi overload kontstruktora Form2 .Inicijalizuj tu promenljivu u Form1.
Pri pozivu Form2 prosledi objekat koji zelis da ona obradjuje .. sa tim sto ce Form2 da cuva samo referencu na objekat iz prve forme ...

Code:

Form2 frm2 = new Form2(nekiObjekat) ; 
frm2.ShowDialog() ; 


A mozes i u Form2 da napravis Property npr.(Source) koji ce takodje da cuva referencu na objekat iz prve forme ..

Code:

Form2 frm2 = new Form2() ; 
frm2.Source = nekiObjekat ; 
frm2.ShowDialog() ; 


Treci nacin je da nadjes parent prozor od Form2 i da cast-ujes u Form1 pa da onda uzmes tu promenjljivu u obliku property-ija
Code:

// u Form2 : 
Form1 parent = (Form1)this.Parent ; 
Type tvojObjekat =  parent.Source ; 

[ satir81 @ 29.03.2008. 16:41 ] @
Hvala uradio sam ovu prvu stvar i radi . Mislio sam i ja to da uradim nego sam mislio da obe forme ipak pripadaju klasi Form kao njihovoj globalnoj pa sam mislio nekako tu da deklarisem SortedDictionary koji mi je trebao ali je ta klasa read-only pa sam mislio mozda u tom nekom pravcu postoji neko elegantno resenje
[ deerbeer @ 29.03.2008. 18:18 ] @
Ima jos mogucih resenja (zavisi koliko si zainteresovan da ispeglash kod :). )
Da deklarises tu global varijablu kao static member ili property pa da joj pristupas sa
Code:

Type tvojObjekat =  Form1.dictionary ; 

al ti ne bi preporucio ovaj nacin jer static varijable nisu bezbedne u multi-thread rezimu ...

Cetvrti nacin je "singleton patern" ako jednom i samo jednom inicijalizujes tvoju promenljivu :
Code:

   public sealed class Singleton
    {

        static Singleton instance = null;
        static readonly object padlock = new object();

        Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                lock (padlock) // lock varijable sa exclusive pristup za pojedinacni thread 
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                    return instance;
                }
            }
        }
    }

//negde u Form2 :
Singleton s1 = Singleton.Instance;
Singleton s2 = Singleton.Instance;
if (s1.Equals(s2))
    MessageBox.Show("Isti su tj pokazuju na jedan te isti objekat  :");