¿Cómo eliminar el parpadeo en el control personalizado de Windows.Forms cuando se desplaza?

Quiero crear un control personalizado en C #. Pero cada vez que tengo que volver a dibujar por completo mi control, parpadea, incluso si utilizo el doble almacenamiento en memoria intermedia (dibujar primero en una imagen y borrarla).

¿Cómo elimino el parpadeo cuando tengo que volver a dibujar por completo?

Podría intentar poner lo siguiente en su constructor después de la llamada InitiliseComponent.

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

EDITAR:

Si está probando esto, si puede, elimine su código de doble buffer y simplemente haga que el control se dibuje en respuesta a los métodos virtuales apropiados.

Saqué esto de un progtwig de C # en funcionamiento. Otros carteles tienen errores de syntax y se copian claramente de C ++ en lugar de C #

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

Puede ser suficiente llamar

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

El parpadeo que está viendo es más probable porque Windows dibuja primero el fondo del control (a través de WM_ERASEBKGND) y le pide a su control que haga cualquier dibujo que necesite (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.

Dice que ha intentado utilizar doble almacenamiento en memoria intermedia, 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?