Benutzer mit den meisten Antworten
Externe Variable übergeben

Frage
-
Hallo!
Ich möchte dieser Methode eine externe Variable "int zahl" übergeben. Wie ist das Möglich?
private void Bild1_Paint(object sender, PaintEventArgs e) { using (Graphics g = e.Graphics) { Pen pen = new Pen(Brushes.Blue, 2); g.DrawRectangle(pen, new Rectangle(new Point(10, 10), new Size(10, 10))); g.DrawEllipse(pen, new Rectangle(new Point(50, 50), new Size(20, 20))); } }
Kann man den Konstruktor der Methode erweitern?
Der Aufruf sieht so aus:
this.Paint += new PaintEventHandler(Bild1_Paint);
Wie müsste ich den Aufruf ergänzen, sodass der Konstruktor der Methode so aussieht:
private void Bild1_Paint(object sender, PaintEventArgs e, int zahl)
Vielen Dank!
Antworten
-
Hallo,
wie ich schon mal in deiner anderen Frage geschrieben habe, kannst du diese ganzen gemeinsamen Daten einfach direkt in der Klasse ablegen:int zahl=0; private void Bild1_Paint(object sender, PaintEventArgs e) { //verwende zahl
Die Variable kannst du dann von überall in der Klasse setzen und auch wieder abrufen.
Der sender-Parameter entspricht dem Objekt, das das Event ausgelöst hat. Darüber lassen sich auch keine weiteren Informationen dieser Art transportieren.
PS: Methoden haben keinen Konstruktor, du erzeugst an obiger Stelle einen Delegaten um die Methode mit dem Event zu verknüpfen.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Aleksander Chalabashiev Mittwoch, 21. Januar 2015 09:57
- Als Antwort markiert Aleksander Chalabashiev Montag, 26. Januar 2015 09:09
-
Also die Signatur der Methode wirst du nicht ändern können. Allerdings kannst im sender ein Feld anlegen, das die Daten enthält. Sieht Dann etwa so aus:
class Sender{ int zahl = 123; private void Bild_Paint(object sender, PaintEventArgs e){ Sender s = sender as Sender; int z = s.zahl; //... } this.Paint += new PaintEventHandler(Bild_Paint); //... }
Die zahl müsstest du dann halt immer an die Aktuelle Zahl anpassen. Das ganze funktioniert mit allen möglichen Daten.
- Bearbeitet MSFDM Donnerstag, 15. Januar 2015 11:27
- Als Antwort markiert Supertux2014 Montag, 26. Januar 2015 12:26
Alle Antworten
-
Also die Signatur der Methode wirst du nicht ändern können. Allerdings kannst im sender ein Feld anlegen, das die Daten enthält. Sieht Dann etwa so aus:
class Sender{ int zahl = 123; private void Bild_Paint(object sender, PaintEventArgs e){ Sender s = sender as Sender; int z = s.zahl; //... } this.Paint += new PaintEventHandler(Bild_Paint); //... }
Die zahl müsstest du dann halt immer an die Aktuelle Zahl anpassen. Das ganze funktioniert mit allen möglichen Daten.
- Bearbeitet MSFDM Donnerstag, 15. Januar 2015 11:27
- Als Antwort markiert Supertux2014 Montag, 26. Januar 2015 12:26
-
Hallo,
wie ich schon mal in deiner anderen Frage geschrieben habe, kannst du diese ganzen gemeinsamen Daten einfach direkt in der Klasse ablegen:int zahl=0; private void Bild1_Paint(object sender, PaintEventArgs e) { //verwende zahl
Die Variable kannst du dann von überall in der Klasse setzen und auch wieder abrufen.
Der sender-Parameter entspricht dem Objekt, das das Event ausgelöst hat. Darüber lassen sich auch keine weiteren Informationen dieser Art transportieren.
PS: Methoden haben keinen Konstruktor, du erzeugst an obiger Stelle einen Delegaten um die Methode mit dem Event zu verknüpfen.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Aleksander Chalabashiev Mittwoch, 21. Januar 2015 09:57
- Als Antwort markiert Aleksander Chalabashiev Montag, 26. Januar 2015 09:09