C# Wie auf Paintmethode zugreifen?

SubNatural

Commander
Registriert
Jan. 2009
Beiträge
2.774
Ich habe mal eine ziemlich blöde Frage,
und zwar, ob es irgendeine Möglichkeit gibt in eine Paintmethode zu wechseln.

Code:
        public Form1()
        {
            InitializeComponent();
            zeichnen();
        }

        public void zeichnen(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.DrawLine(Pens.CornflowerBlue, 1, 1, 1, 1);
        }

Also von der Form1() in die zeichnen(PaintEventArgs e) zu wechseln.
Wenn ich das so wie im Code ersuche kommt:
Keine Überladung für die zeichnen-Methode nimmt 0 Argumente an.
Klar kann ich mit this.Invalidate(); zeichnen lassen, aber es wäre natürlich mit einem Direktzugriff leichter ;)

Danke
Daniel
 
Das ist doch nur ein Event Handler und dieser wird über Invalidate() oder Refresh() aufgerufen.

Überlade alternativ doch einfach (ohne Sinn und Zweck aber):
Code:
public void zeichnen() { Invalidate(); }
 
Du kannst das OnPaint-Event der Form überschreiben und dort dann zeichnen.

Schreib einfach "override OnPaint".

Der Designer vervollständigt dir das in "protected override OnPaint(PaintEventArgs e)"

In der Methode gibts dann schon einen Aufruf der "base.OnPaint(e);" lautet.

Dahinter kannst du dann selbst Zeichnen. Als Graphics-Objekt nimmst du das aus den PaintEventArgs.


Beispiel: Füge das hier dem Code deiner Form 1 hinzu und es wird ein Dreieck darauf gemalt.
Du brauchst dabei nichts aufrufen, Invalidaten oder so. Das macht Windows alles selbst.

Code:
 protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            e.Graphics.DrawLine(Pens.Black, 10, 60, 60, 60);
            e.Graphics.DrawLine(Pens.Black, 10, 60, 30, 20);
            e.Graphics.DrawLine(Pens.Black, 60, 60, 30, 20);
        }
 
Zuletzt bearbeitet:
Ja aber was ist, wenn ich es bei einem Klick aufrufen möchte?
 
Dann erstellst du dir das Graphics-Objekt mit der Methode CreateGraphics der Windows-Form im Button-Click Event.

Also in etwa so:

Graphics g = this.CreateGraphics();

Macht aber IMHO wenig Sinn, denn wenn das Fenster neu gezeichnet wird, ist dein gezeichnetes Zeug wieder weg. Und Fenster werden alle Nase lang neu gezeichnet.
Vielleicht wärs ja ne Alternative wenn du dir eine bool-Variable erstellst und sie bei einem Klick auf true setzt, dann this.Invalidate() aufrufst und meinen Codeschnipsel folgendermaßen änderst:

Code:
protected override void OnPaint(PaintEventArgs e)
{
   base.OnPaint(e);
  if (bButtonClicked)
  {
     e.Graphics.DrawLine(Pens.Black, 10, 60, 60, 60);
     e.Graphics.DrawLine(Pens.Black, 10, 60, 30, 20);
     e.Graphics.DrawLine(Pens.Black, 60, 60, 30, 20);
   }
}
 
Zurück
Oben