Double Buffering wenn OnPaint () nicht gezeichnet wird: Warum funktioniert das nicht?

8

Ich arbeite an einer einfachen Vektorgrafik-App in C # /. Net. Die Zeichnung wird in einem Panel gemacht, aber ich verwende nicht das OnPaint () -Ereignis für alle - tatsächlich ruft OnPaint () sogar nur eine andere Methode auf, die tatsächlich alles im Dokument zeichnet.

Ich habe versucht, Double Buffering hinzuzufügen, aber wenn ich DoubleBuffered auf true setze, ist das Flimmerproblem noch schlimmer. Warum ist das? Wenn ich das Steuerelement doppelt puffern möchte, muss ich unbedingt meine gesamte Zeichnung im OnPaint () -Ereignis mit dem mitgelieferten Graphics-Objekt ausführen, anstatt Panel.CreateGraphics () zu verwenden und dann zu diesem Zeichen zu ziehen?

EDIT: Dies ist der grundlegende Code, den ich verwende.

%Vor%

Die allgemeine Idee ist, dass sich die beiden Variablen ScaleFactor und Offset auf die Zoom-Ebene und die Pan-Ebene in der Benutzeroberfläche beziehen. g ist ein Grafikobjekt.

    
ian93 24.06.2010, 19:18
quelle

2 Antworten

28
%Vor%

Das ist der Fehler. Doppelpufferung kann nur funktionieren, wenn Sie in den Puffer zeichnen. Dasjenige, auf das e.Graphics verweist. Korrektur:

%Vor%

Achten Sie darauf, dass Panel standardmäßig nicht doppelt gepuffert ist. Sie müssen Ihre eigenen ableiten. Fügen Sie dies in eine neue Klasse ein:

%Vor%

Kompilieren. Drop it von der Spitze der Toolbox.

    
Hans Passant 24.06.2010, 20:10
quelle
2

Ich persönlich beschäftige mich nicht mit der DoubleBuffered Einstellung. Ich zeichne einfach alles auf eine Bitmap und zeichne dann im Paint-Event diese Bitmap auf den Bildschirm.

%Vor%     
Brandi 24.06.2010 19:34
quelle

Tags und Links