hi zusammen 😃
ich habe eine dll auf die ich zugreife. diese enthält eine klasse myclass.
in einer schleife erzeuge ich nun mehrere instanzen dieser klasse und weise mit
myclass.onevent+= new myclass_onevent(methode);
myclass_onevent(andere klasse k)
{
}
jeder instanz ein event zu. alle instanzen reagieren nun auf ein event. wie kriege ich nun heraus, von welcher instanz das event aktuell angesteuert wird?
ich hoffe das war verständlich 😃
dank und gruß
afr0
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.
😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]
Wenn es ein Event nach MS-Spezifikation ist, dann kriegst Du im Event den sender... diesen kannst Du auswerten und schon weisst Du wer den Event ausgelöst hat.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Eigentlich gehört zu einem Event auch immer ein Parameter vom Typ Object, der den Sender angibt:
private void MeinEvent(object sender, EventArgs e)
Das kannst du dann nach deinem Klassentyp casten.
<Edit>siehe Programmierhans</Edit>
"Indem Sie über dieses ernste Thema lachen disqualifizieren Sie sich selbst."
mrleeh.de
als objekt wird nur eine andere klasse übergeben. deshalb komme ich hier gerade nicht weiter... 😦
einzige möglichkeit die ich momentan sehe, ist, dass ich x einzelne instanzen anlege
also newclass instanz1 = new newclass
newclass instanz2 = ....
und jeder instanz nen eigenes event zuweise.
ist aber keine schöne lösung....
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.
😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]
Wo ist denn nun dein Problem ?
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
mein problem ist folgendes:
ich erstelle ca 30 instanzen dieser klasse. jede instanz reagiert auf das event.
wenn das event gefeuert wird, wird als parameter eine andere klasse erzeugt über die ich infos bekomme. nun muss ich wissen welche info zu welcher übergeordneten klasse gehört.
also ich habe myclass mit dem event
und ich habe anotherclass mit den infos.
anotherclass kann nun durch myclass1 oder auch durch myclass20 erzeugt worden sein... das weiß ich aber nicht.
und ich möchte nur ungern 30 instanzen der klasse manuell anlegen...
ich dachte es gibt da vllt ne möglichkeit das zu umgehen 😃
in vb zum beispiel kann man klassen indizieren indem man ein array anlegt. dann kann man dem event den index aus dem array zuweisen. soweit ich weiß gibts sowas aber nicht in c# oder?
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.
😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]
Leg doch die Instanzen in Dictionaries ab...
Dictionary<Event-Werfendes-Teil, Klasse die Du dann suchst>
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
aufs delegate kann ich nicht zugreifen, da ich aus ner dll eines fremdanbieters zugreife...
danke 😃 die infos haben mir schon gereicht.
code kann ich momentan leider nicht liefern... aber ich denke dictionary wird das sein was ich brauche.
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.
😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]
Hier ein kleines Beispiel dazu, wenn ich das Problem richtig verstanden habe.
{
public class Program
{
static void Main(string[] args)
{
List<MyClass> classes = new List<MyClass>();
for (int i = 0; i < 10; i++)
{
MyClass c = new MyClass { Nr = i };
c.MyEvent += () => MyClassEvent(c);
classes.Add(c);
}
foreach (var c in classes)
{
Console.WriteLine("Raising MyClassEvent Nr:{0}", c.Nr);
c.RaiseEvent();
}
}
static void MyClassEvent(MyClass myClass)
{
Console.WriteLine("MyClassEvent Nr:{0} fired", myClass.Nr);
}
}
public delegate void MyEventHandler();
public class MyClass
{
public int Nr { get; set; }
public event MyEventHandler MyEvent;
public void RaiseEvent()
{
if (MyEvent != null)
MyEvent();
}
}
Lg XXX
Hallo Afrokalypse,
so ganz genau habe ich es nicht verstanden, aber wenn sender nicht ist, was du suchst, dann müsste this sein, was du suchst. Sender ist das Objekt, das den Event feuert, this ist das Objekt, das den Event abonniert hat. Was anderes braucht man eigentlich nie.
herbivore
Ich glaub was er meint ist, das das Event das er abonnieren will, keinen sender liefert und er aber trotzdem auf das Event-feuernde Objekt zugreifen will.
Hier nochmal mein Beispiel an deinem Beispiel demonstriert:
myclass.onevent+= (andereKlasse k)=> myclass_onevent(myclass, k);
myclass_onevent(MyClass myclass, andereKlasse k)
{
}
Lg XXX
die klassen die ich nutze sind aus einer dll. die dll kann ich nur einbinden und die klassen verwenden. überladen geht nicht, da es sich um ein client server gebilde handelt und in dem fall eine exception seitens dll (client version not allowed) geworfen wird.
die event methode übergibt nur einen parameter und das ist eine weitere klasse aus der dll.
als beispiel nehme ich mal mehrere gameserver auf denen mehrere spiele laufen können. ein spiel kann auf mehreren servern gespielt werden.
der GameMonitor überwacht die spiele
private void btn1_Click(object sender, EventArgs e)
{
GameServer gm = new GameMonitor();
gm.Username = "user1";
gm.Password = "pass1";
gm.OnRefreshGame +=
new GameMonitor.OnRefreshGameEventHandler(gm_OnRefreshGame);
gm.Start();
}
void gm_OnRefreshGame(Game g)
{
//auslesen welches spiel gespielt wird. hier gibts keine verbindung zwischen spiel
//und GameMonitor mehr.
Console.WriteLine(g.GameName);
}
ich hoffe es ist jetzt verständlicher 😃
@ XXX:
wenn ich deinen code richtig verstehe, kann ich so also das event 'erweitern'?
gruß
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.
😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]
Sorry für Doppelpost aber das wollte ich gerne extra schreiben.
Danke XXX deine Variante funktioniert super.
Dieses Konstrukt kenne ich gar nicht. Wo kann ich das noch mal genauer nachlesen? Hast du dazu vllt einen Link?
Dank und Gruß
afr0
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.
😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]