[ JedanDvaTri @ 12.05.2009. 22:29 ] @
Kao sto naslov kaze ... zanima me mehanizam (iliti na srpskom "sta se desava") kod metoda on"ime dogadjaja" :).
Ne razumem upotrebnu vrednost tih metoda , niti razumem na koji nacin rade.

Isto tako ne razumem zasto postoje...kada imamo event delegate na koje "prikacimo" handler metodu koja ce da odreaguje na dogadjaj.

Da li bi neko bio zlatan i probao da mi objasni razlike izmedju on"ime dogadjaja" metoda ( koje override-ujemo u nasoj windows form aplikaciji) i handler metoda ??? Na primer radi onKeyUp metoda....?

p.s Primer bi bio sjajan....
[ Igor Gajic @ 12.05.2009. 22:45 ] @
http://msdn.microsoft.com/en-us/library/wkzf914z.aspx
[ JedanDvaTri @ 12.05.2009. 23:24 ] @
Ehm, vec sam i ja sam googlao... i nasao razne linkove , ukljucujuci i taj.... i jos uvek mi nije jasno...nazalost
[ DarkMan @ 13.05.2009. 14:33 ] @
Evo ti jedan primer kako se implementira neki property sa eventom koji se aktivira kada se taj property promeni:
Code:

    public class MyClass
    {
        private int m_MyValue = 0;

        public virtual int MyValue
        {
            get { return m_MyValue; }
            set
            {
                if(m_MyValue != value) {
                    m_MyValue = value;
                    OnMyValueChanged(EventArgs.Empty);
                }
            }
        }

        public event EventHandler MyValueChanged = null;

        protected virtual void OnMyValueChanged(EventArgs e)
        {
            if(this.MyValueChanged != null) {
                this.MyValueChanged(this, e);
            }
        }
    }


OnMyValueChanged je metoda koja ce aktivirati event MyValueChanged.
U toj metodi imas proveru "this.MyValueChanged != null" kojom se proverava da li ima registrovanih (nakacenih) handlera za taj event, a jednim pozivom ovog eventa se pozivaju svi handleri koji su registrovani i to onim redom kojim su se registrovali.

Kada koristis neku instancu doticne klase tebi je dostupan samo taj handler kojim mozes pratiti da li se vrednost property-a promenila.
Code:

    public class Test
    {
        public Test()
        {
            MyClass myClass = new MyClass();
            myClass.MyValueChanged += new EventHandler(myClass_MyValueChanged);
        }

        void myClass_MyValueChanged(object sender, EventArgs e)
        {
            MessageBox.Show("MyValue changed");
        }
    }


Ako nasledis klasu taj event i dalje mozes da nadgledas tako sto ces registrovati event (nakaciti se na event):
Code:

    public class MyClassEx: MyClass
    {
        public MyClassEx()
        {
            this.MyValueChanged += new EventHandler(MyClassEx_MyValueChanged);
        }

        public void MyClassEx_MyValueChanged(object sender, EventArgs e)
        {
            MessageBox.Show("MyValue changed");
        }
    }

Medjutim ti mozes pratiti event i tako sto ces override-ovati metodu OnMyValueChanged:
Code:

    public class MyClassEx2: MyClass
    {
        protected override void OnMyValueChanged(EventArgs e)
        {
            MessageBox.Show("MyValue changed");
            base.OnMyValueChanged(e);
        }
    }


Ako odradis override OnMyValueChanged i u tom override-u ne pozoves metodu OnMyValueChanged iz bazne klase sprecices podizanje doticnog eventa.
Mozes odraditi i override property-a MyValue i izmeniti ga tako da se ovaj event nikada ni ne poziva.
[ JedanDvaTri @ 13.05.2009. 19:41 ] @
@ Darko
Hvala na odgovoru !!! Tako nesto sam trazio! Sad mi je potpuno jasno :) .