PaintEventHandler
-
Hallo,
ich schreibe momentan eine Klasse welche ein Koordinatensystem zur Verfügung stellt, in welches dann punkte und kanten eingetragen werden können.
Ich würde gerne das malen der Punkte, vom malen des Koordinatensystems trennen.
Also nur wenn das window resized wird, soll das koordinatensystem neu gemalt werden.
Ansonsten würder ich gerne ausschließlich die punkte und Kanten draüber malen.
Wie kann ich in einem resize event malen ??
Bis jetzt male ich lediglich im OnPaintEventL.g.
-
Was du machen könntest wäre in der OnSize methode ein internes boolean zu setzen der angibt ob die Position neu berechnet werden soll oder nicht.
Aber was versprichst du dir von der Aktion? Performance sprünge brauchst du nicht erwarten.
-
Hi,
also ich erwarte schon dass es wesentlich schneller geht. Tut es auch.
Mein Koordinatensystem ist nicht wenig zu zeichnen, da ich ein Pflasterung mache.... bin der Überzeugung, dass sowas übersichtlicher ist auf nem Bildschirm.Habe jetzt einfach eine neue Methode mit eingeführt, welche
sich das Graphics objekt holt, und dann über das Koordinatensystem zeichnet.Beim Resize muss ich aber immer alles neu zeichnen.
Kann aber, wenn ich nur nen Punkt einfügen möchte (gott sei dank) auf die neuberechnung des ganzen Fensters verzichten.
-
Kann aber, wenn ich nur nen Punkt einfügen möchte (gott sei dank) auf die neuberechnung des ganzen Fensters verzichten.
Ah ok, ich nahm an das du auch beim einfügen eines Punktes alles neu Zeichnen musst da sich der Bereich vergrößert oder verschiebt.
-
Hallo Alexander,
du mußt immer alles im Paint-Event (bzw. in der OnPaint-Methode) zeichnen.
Nicht nur beim Vergrößern eines Fensters sondern z.B. auch beim Minimieren/Wiederherstellen als auch beim Ändern des Z-Index (anderes Fenster wird über dein Fenster gesetzt und dann z.B. wieder minimiert) wird das Fenster (teilweise, d.h. evtl. per Clipping) neu gezeichnet.Wenn die Erstellung des Koordinatensystems aufwändig ist, dann benutze dafür ein Image (Bitmap) als Zwischenpuffer und zeichne es dann im Paint-Event mittels e.Graphics.DrawImage(image) bevor du dann die einzelnen Punkte zeichnest.
Und wenn sich die Punkte (besonders, wenn es viele, d.h. z.B. mehr als 1000 sind) auch nicht so oft ändern, so kannst du diese auch in diesem (oder einem zweiten) Image zwischenspeichern.