Cómo eliminar el parpadeo en Windows.Formas de control personalizado cuando el desplazamiento?
Pregunta
Quiero crear un control personalizado en C#.Pero cada vez que me tienen completamente redibujado de mi control, parpadea, aunque yo uso el doble búfer (dibujo a una Imagen de la primera, y la fusión que).
¿Cómo puedo eliminar el parpadeo cuando tengo completamente redibujar?
Solución
Usted podría tratar de poner lo siguiente en su constructor después de la InitiliseComponent llamada.
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
EDITAR:
Si usted está dando a este un ir, si se puede, retire su propio doble búfer de código y sólo tiene el control de dibujarse a sí mismo en respuesta a la correspondiente a los métodos virtuales que se llama.
Otros consejos
Me sacó esto desde un programa de C#.Otros carteles tener errores de sintaxis y claramente copiado de C++ en lugar de C#
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
Puede ser lo suficientemente bueno como para solo llamar
SetStyle(ControlStyles::UserPaint | ControlStyles::AllDrawingInWmPaint, true);
El parpadeo que se están viendo más probable es debido a que Windows se dibuja el fondo de el control de la primera (a través de WM_ERASEBKGND), luego le pregunta a su control para hacer lo que el dibujo que hay que hacer (a través de WM_PAINT).Deshabilitando el fondo de la pintura y hacer todo tipo de pintura en la OnPaint anular puede eliminar el problema en el 99% de los casos sin la necesidad de utilizar toda la memoria necesaria para el doble búfer.
Dices que has probado el doble búfer, pero luego te dicen que el dibujo a una Imagen de la primera y la fusión que.¿Has probado la configuración de DoubleBuffered = true en el constructor, en lugar de hacerlo usted mismo con una Imagen?