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.
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 - č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 - č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 - 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 - sobota, 23. junij 2007
Poskušaj uporabiti reflection...
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 - petek, 22. junij 2007
Kaj pa če na objekt slave nimam vpliva. In nima funkcije OnMouseEnter? Lp,Matjaž
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)