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.
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.