Wie Flicker in Windows.Forms benutzerdefinierte Steuerelement beim Scrollen zu beseitigen?

8

Ich möchte ein benutzerdefiniertes Steuerelement in C # erstellen. Aber jedes Mal, wenn ich mein Steuerelement vollständig neu zeichnen muss, flackert es, selbst wenn ich eine doppelte Pufferung verwende (zuerst zu einem Bild zeichnen und dann blitzen).

Wie beseitige ich das Flimmern, wenn ich es komplett neu zeichnen muss?

    
user7305 15.09.2008, 16:07
quelle

4 Antworten

13

Sie könnten versuchen, nach dem Aufruf von InitiliseComponent Folgendes in Ihren Konstruktor einzufügen.

%Vor%

BEARBEITEN:

Wenn Sie dies ausprobieren, entfernen Sie, wenn Sie können, Ihren eigenen doppelten Puffercode und lassen Sie das Steuerelement selbst als Antwort auf die entsprechenden virtuellen Methoden zeichnen, die aufgerufen werden.

    
Shaun Austin 15.09.2008, 16:36
quelle
8

Ich habe dies aus einem funktionierenden C # -Programm gezogen. Andere Poster haben Syntaxfehler und wurden klar aus C ++ anstelle von C # kopiert %Vor%     

Brad Bruce 11.12.2008 01:54
quelle
1

Es kann gut genug sein, einfach

aufzurufen %Vor%

Das Flackern, das Sie am wahrscheinlichsten sehen, weil Windows zuerst den Hintergrund des Steuerelements zeichnet (via WM_ERASEBKGND) und dann Ihr Steuerelement auffordert, die Zeichnung auszuführen, die Sie tun müssen (über WM_PAINT). Wenn Sie die Hintergrundfarbe deaktivieren und die gesamte OnPaint-Überschreibung ausführen, kann das Problem in 99% der Fälle behoben werden, ohne dass der gesamte für die doppelte Pufferung benötigte Speicher verwendet werden muss.

    
Eric W 17.09.2008 05:24
quelle
0

Sie sagen, Sie haben versucht, doppelt zu puffern, aber dann sagen Sie, zuerst zu einem Bild zu zeichnen und das zu blocken. Haben Sie versucht, DoubleBuffered = true im Konstruktor zu setzen, anstatt es selbst mit einem Image zu tun?

    
Grokys 15.09.2008 16:16
quelle

Tags und Links