Frage

Ich möchte ein benutzerdefiniertes Steuerelement in C # erstellen. Aber jedes Mal, ich muß voll meine Kontrolle neu zu zeichnen, es flackert, auch wenn ich die doppelte Pufferung verwenden (Zeichnung auf ein Bild zuerst und Blitten das).

Wie kann ich beseitigen flackern, wenn ich muss vollständig neu gezeichnet?

War es hilfreich?

Lösung

Sie könnten versuchen, die folgenden in Ihrem Konstruktor nach dem InitiliseComponent Anruf setzen.

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
         ControlStyles.UserPaint |
         ControlStyles.AllPaintingInWmPaint, true);

EDIT:

Wenn Sie dies gehen geben, wenn Sie können, Ihren eigenen Double-Buffering-Code entfernen und nur noch die Steuerung selbst auf den entsprechenden virtuellen Methoden in Reaktion ziehen genannt zu werden.

Andere Tipps

Ich zog diese aus einem Arbeits C # Programm. Andere Plakate haben Syntaxfehler und deutlich von C ++ kopiert anstelle von C #

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
                        ControlStyles.UserPaint |
                        ControlStyles.AllPaintingInWmPaint, true);

Es kann gut genug sein, um einfach anrufen

SetStyle(ControlStyles::UserPaint | ControlStyles::AllDrawingInWmPaint, true);

Das Flackern Sie wahrscheinlich sehen, da Windows den Hintergrund der Kontrolle zieht zuerst (via WM_ERASEBKGND), fragt dann steuern, was zu tun Zeichnung, die Sie benötigen (über WM_PAINT) zu tun. Durch das Deaktivieren der Hintergrundfarbe und tun alle Malerei in Ihrem OnPaint überschreiben, ohne die Notwendigkeit, das Problem in 99% der Fälle beseitigen kann den Speicher für das doppelte Pufferung erforderlich verwenden.

Sie sagen, Sie doppelte Pufferung versucht haben, aber dann zu einem Bild Sie sagen Zeichnung erste und Blitten dass. Haben Sie versucht, Einstellung DoubleBuffered = true im Konstruktor, anstatt sie selbst mit einem Bild tun?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top