2008-09-15 11 views

Respuesta

13

Puede intentar poner lo siguiente en su constructor después de la llamada InitiliseComponent.

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

EDIT:

Si usted está dando esto un ir, si es posible, eliminar su propio código de doble búfer y sólo tiene el control dibujarse a sí mismo en respuesta a los métodos virtuales correspondientes que se llama.

+0

Yo suelo poner esas cosas antes de que el Application.Run, pero sí creo que esta es la mejor solución a este problema. – Quibblesome

+0

Estoy de acuerdo. También encontré una buena URL en otra pregunta relacionada con el parpadeo. http://www.codeproject.com/KB/graphics/DoubleBuffering.aspx – user7305

+0

¡He intentado tantas soluciones pero esto lo soluciona! +1 por decir para ponerlo después de InitializeComponent(); !! xoxoxo – Emily

0

Dice que ha intentado el doble almacenamiento en búfer, pero luego dice dibujar primero en una imagen y borrarla. ¿Has intentado configurar DoubleBuffered = true en el constructor en lugar de hacerlo tú mismo con una imagen?

1

Puede ser lo suficientemente bueno para sólo llamar

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

El parpadeo que está viendo más probable porque Windows dibuja el fondo del control primero (a través de WM_ERASEBKGND), luego le pide a su control para hacer lo dibujo que necesita hacer (a través de WM_PAINT). Al deshabilitar la pintura de fondo y hacer toda la pintura en su anulación de OnPaint puede eliminar el problema en el 99% de los casos sin la necesidad de utilizar toda la memoria necesaria para el doble almacenamiento en búfer.

8

Saqué esto de un programa de C# en funcionamiento. Otros carteles tienen errores de sintaxis y claramente copian de C++ en lugar de C#

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