C# Event und Wertübergabe gleichzeitig funktioniert nicht.

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

System.Eventhandler erwartet eine bestimmte Signatur. Daher musst du auch eine Methode mit einer solchen übergeben.

Die Frage wäre sowieso, was für ein Wert denn in x stehen soll? Wer ruft es auf und kann es übergeben? Das bist nämlich nicht du. Das wird intern geregelt, wo du keinen Zugriff drauf hast. Das System weiß von dem x nichts und wüsste auch gar nicht, was es für einen Wert übergeben soll.


Woolli  30.04.2013, 10:54

Hallo Mickeyman, das stimmt nicht ganz. Es ist moeglich anonymous methoden zu verwenden (sehe mein antwort) in diese methoden kann man durchaus parameter uebergeben, oder diese in einen eigenen EventArgs object hinterlegen... mehr darueber hier:

http://msdn.microsoft.com/en-us/library/ms366768.aspx

unter der abschnitt "subscribe to events by using an anonymous method"

0
Mickeyman  30.04.2013, 19:53
@Woolli

Aber dafür muss doch die anonyme Methode oder Lambda-Expr wiederum die passende Signatur besitzen...

Deine Lösung ist nur eine Möglichkeit, das Problem zu lösen.

0
Woolli  02.05.2013, 08:57
@Mickeyman

Nunja, es wurde ja auch nur nach eine moeglichkeit gefragt wie eine zusaetzliche parameter beim event uebergeben werden kann....

Aber dafür muss doch die anonyme Methode oder Lambda-Expr wiederum die passende Signatur besitzen...

Was meinst du damit? und macht es diese loesung schlechter?

0
Mickeyman  02.05.2013, 19:23
@Woolli

Oh, das sollte nicht beleidigend sein.

Ich wollte damit nur sagen, dass meine Antwort, dass die Signatur passen muss, aus meiner Sicht dennoch stimmt. Weil du ja geschrieben hast, dass es nicht ganz stimmt.

0
Woolli  06.05.2013, 08:11
@Mickeyman

HI Mickeyman, ne kein Problem ich war/bin nicht beleidigt. Mich hatte es nur interesiert was du damit meinst... ich habe es einfach nciht verstanden, und vielleicht hatte ich etwas uebersehn... man lernt bekanntlich nie aus.

0

Vermutlich überprüft die Methode System.EventHandler die Signatur der Methode, also Rückgabewert und Eingabeparameter. Wenn diese von der Vorgabe abweichen (zum Beispiel aufgrund eines zusätzlichen Parameters wie deiner Integer-Variable), wird die Funktion nicht als Eventhandler angenommen. Es gibt aber leider keine Möglichkeit, das zu umgehen; du wirst es über zusätzliche Attribute in deiner Klasse regeln müssen.


greatjack 
Beitragsersteller
 28.04.2013, 12:21

Wie stellst du dir das vor (zusätzliche Atribute)??

0

Mickeyman hat gut erklärt, warum das nicht geht. Sinn hätte es auch nicht, denn der EventHandler wird "von intern" aufgerufen, was in X stehen soll ist nirgendwo definiert.

Was soll denn in X stehen und woher kommt der Wert? Danach richtet sich, ob du es mit Eigenschaften, Klassenvariablen oder ganz anders lösen kannst.

Moin greatjack.

versuche es so:

hinzufügenPicture1.Click += new EventHandler((sender, e) => hinzufügenPicture1_Click(sender, e, 22));


private void hinzufügenPicture1_Click(object sender, EventArgs e, int X)
        {
            // Wenn man das Hinzufügen-Bild anklickt:
        }