Events

Napisal sem svoj objekt, ki ima definiran event MouseEnter. Znotraj objekta imam spremenljivko, ki kaže na nek drug objekt, ki ima tudi event MouseEnter. Na kakšen način bi event na glavnem objektu poreusmeril na even na spremenljivki (objekt). Še koda

public class Master
{
    private Slave slave = new Slave();

    public event MouseEventHandler MouseEnter;
}

public class Slave
{
    public event MouseEventHandler MouseEnter;
}

 
V tem primeru bi rad, da če definiram event MauseEnter na Master objektu, da se dejansko izvrši event MouseEnter na Slave objektu.
 

Avtor: o-MA-n-tjaz, objavljeno na portalu SloDug.si (Arhiv)

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.

MihaM
MihaM - četrtek, 28. junij 2007

Mislim da eksplicitni casting niti ni potreben return (Shape)this -> return this;Se pa človek vpraša zakaj bi kaj takega sploh počel - koda je namreč nekoristna

AndrejT
AndrejT - četrtek, 28. junij 2007

base ne kaže na instanco objekta (za to imaš this), temveč je samo pomoč pri dostopanju do memberjev baznega tipa. Če želiš kot lastnost ispostaviti bazo objekta, ki nosi to lastnost, lahko uporabiš:public class TShape : Shape {        public Shape Owner        {            get            {                return (Shape)this;            }        } } Gre pa za isti objekt, zato ne vidim razloga, zakaj bi ga izpostavljal skozi lastnost? TShape lahko namreč kadarkoli castaš v Shape.

o-MA-n-tjaz
o-MA-n-tjaz - četrtek, 28. junij 2007

Hvala za odgovor.Mam pa še eno vprašanje, ki ga bom kar tukaj dopisal.Zakaj ni možno napisati sledečega property-a: public class TShape : Shape         public Shape Owner        {            get            {                return base; // tu javi napako: Use of keyword 'base' is not valid in this context            }        } } 

AndrejT
AndrejT - torek, 26. junij 2007

o-MA-n-tjaz:Kaj pa če na objekt slave nimam vpliva. In nima funkcije OnMouseEnterObjekti imajo metode za proženje eventov označene s protected [ali podobno] in kot take niso vidne navzven. Če imaš možnost (npr. da je slave izpeljan iz Control ali Form), lahko ustvariš nov objekt [MySlave], ki je izpeljan iz [Slave] in mu dodaš novo - public - metodo, ki bo poklicala protected OnMouseEnter. Iz mastra boš lahko tako poklical njegov OnMouseEnter in posledično sprožil event MouseEnter.

MihaM
MihaM - sobota, 23. junij 2007

Poskušaj uporabiti reflection...

tomaz_sres
tomaz_sres - petek, 22. junij 2007

Recimo, da sta to formi, ce prav stekam hoces, da se, ko se sprozi MouseEnter na master formi izvrsi MouseEnter na slave formi? public partial class SlaveForm : Form     {         public SlaveForm()         {             InitializeComponent();         }         public void SlaveForm_MouseEnter(object sender, EventArgs e)         {             MessageBox.Show("Tukaj event s slave MouseEnter");         }     }  public partial class MasterForm : Form     {         public MasterForm()         {             InitializeComponent();         }         private void MasterForm_MouseEnter(object sender, EventArgs e)         {             SlaveForm SlaveFormOut = new SlaveForm();             SlaveFormOut.SlaveForm_MouseEnter(this, e);         }     }

o-MA-n-tjaz
o-MA-n-tjaz - petek, 22. junij 2007

Kaj pa če na objekt slave nimam vpliva. In nima funkcije OnMouseEnter? Lp,Matjaž 

MihaM
MihaM - četrtek, 21. junij 2007

v razredu Master naredi takole metodo:protectd virtual void OnMouseEnter(MouseEventArgs e){  if (MouseEnter != null)  {    MouseEnter(this, e); }slave.OnMouseEnter(e);} Tak je tudi proporočen način dela z dogodki (da ga kličeš posredno, preko metode)