none
Externe Variable übergeben RRS feed

  • 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!
    Donnerstag, 15. Januar 2015 10:18

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

    Donnerstag, 15. Januar 2015 11:51
    Moderator
  • 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
    Donnerstag, 15. Januar 2015 11: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
    Donnerstag, 15. Januar 2015 11: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

    Donnerstag, 15. Januar 2015 11:51
    Moderator