Laden...

[erledigt] Bei mehreren Images bei MouseLeftButtonDown die Quelle des Ereignisses ermitteln

Erstellt von Vision vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.052 Views
V
Vision Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren
[erledigt] Bei mehreren Images bei MouseLeftButtonDown die Quelle des Ereignisses ermitteln

Hallo zusammen,

ich schreibe gerade ein kleines WPF-Programm, in dem ich über zwei for-Schleifen dynamisch Bilder lade und diesen einen EventHandler MouseLeftButtonDown zuweise. In der Methode, die ich mit dem EventHandler aufrufe, finde ich nicht heraus, von welchem Bild das Event abgefeuert wurde, da der 'sender' anscheinend immer identisch ist (ich hatte das selbe einmal mit Labels gemacht, da hatte ich komischer weise immer einen anderen 'sender', bei dem der Text des Labels mit angegeben wurde).

Da ich nun über den Sender nicht heraus bekomme, von welchem Bild das Event gefeuert wurde, habe ich mir gedacht, dass es ja über die EventArgs gehen müsste. Ich habe auch schon fleißig gesucht und versucht, mir einen eigenen EventHandler zu schreiben, an den ich die Argumente übergeben kann, aber irgendwie bin ich zu blöd dafür. Zum einen kann ich den eigenen EventHandler ja nicht an MouseLeftButtonDown binden, da eine Umwandlung von meinem Eventhandler zum Mouse-Eventhandler nicht zulässig ist (muss ich dann meinen Eventhandler von MouseEvent ableiten?).
Zum zweiten kapier ich nicht, wie ich dann die Argumente übergeben kann. Kann mir da wer weiter helfen? Vielleicht gibt es ja noch einen viel einfachereren weg...

Danke schonmal für eure Hilfe...

V
Vision Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Ja, die FAQs hab ich auch schon gefunden, aber ich steige da einfach nicht durch.
Normalerweise binde ich einen Eventhandler durch:


img.MouseLeftButtonDown += new MouseButtonEventHandler(meineMethode);

Wo defeniere ich denn meinen EventHandler, wie binde ich den an das MouseLeftButtonDown-Event (da sind ja nur MouseButtonEvents erlaubt), und wie übergebe ich dann die Argumente (der Aufruf von meineMethode wird ja warscheinlich wieder ohne Argumente erfolgen)...

6.911 Beiträge seit 2009
vor 10 Jahren

Hallo Vision,

da der 'sender' anscheinend immer identisch ist (ich hatte das selbe einmal mit Labels gemacht, da hatte ich komischer weise immer einen anderen 'sender', bei dem der Text des Labels mit angegeben wurde).

Wie hast du denn festgestellt dass der 'sender' identisch ist? Prüfe das mal mittels object.ReferenceEquals.
Dass beim Label der Text im VS-Debugger dargestellt wird kommt daher, dass beim Label die ToString-Methode entsprechend überschrieben worden ist od. ein DebuggerDisplay definiert wurde. Nur weil es sowas beim Image nicht gibt, heißt das nicht dass es die gleiche Instanz ist.

Ich glaube schon dass es auch bei Image verschiedene Instanzen sind und somit brauchst du keine Klimmzüge über eigene Ereignisse machen.

da eine Umwandlung von meinem Eventhandler zum Mouse-Eventhandler nicht zulässig ist (muss ich dann meinen Eventhandler von MouseEvent ableiten?).

Das geht nicht, denn es ist ein Delegat und selbst wenn es gehen würde, so setzt die WPF nicht die Eigenschaften in deinem Objekt. D.h. an die von dir gewünschte Information kommst du auf diesem Wege nicht, da die Infrastruktur dafür keine Möglichkeit bietet.

In WPF gibt es noch andere Möglichkeiten wie Attached-Behaviors mit denen du hier mehr Möglichkeiten hast. Schau dir diese ggf. mal an.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

V
Vision Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Danke für den Tip, dass das Label die ToString-Methode überschreibt. Ich habe mir jetzt einfach eine eigene MyImage-Klasse erstellt, die die Methode ToString() mit der Source überschreibt und es klappt. Ich bekomme bei sender.ToString() die Quelle des Images ausgegeben. Das ist alles, was ichwollte. Es kann so einfach sein.