C# Event und Wertübergabe gleichzeitig funktioniert nicht.
Hallo, Wenn ich ein Click-Event manuell erstelle, sieht es ja z.B. so aus:
hinzufügenPicture1.Click += new System.EventHandler(hinzufügenPicture1_Click); //Event wird hinzugefügt
private void hinzufügenPicture1_Click(object sender, EventArgs e)
{
// Wenn man das Hinzufügen-Bild anklickt:
}
Wie kann ich aber jetzt z.B. den Integer X mitübergeben? So geht es nicht:
hinzufügenPicture1.Click += new System.EventHandler(hinzufügenPicture1_Click); //Event wird hinzugefügt
private void hinzufügenPicture1_Click(object sender, EventArgs e, int X)
{
// Wenn man das Hinzufügen-Bild anklickt:
}
Irgendwas mache ich falsch. Ich bitte um Hilfe.
4 Antworten
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.
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?
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.
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.
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:
}
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"