Comment éliminer le scintillement dans le contrôle personnalisé Windows.Forms lors du défilement?

Je veux créer un contrôle personnalisé en C #. Mais chaque fois que je dois redessiner complètement mon contrôle, il scintille, même si j’utilise un double tampon (dessiner d’abord sur une image, puis le masquer).

Comment puis-je éliminer le scintillement lorsque je dois redessiner complètement?

Vous pouvez essayer de mettre le texte suivant dans votre constructeur après l’appel InitiliseComponent.

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

MODIFIER:

Si vous le permettez, si vous le pouvez, supprimez votre propre code de mise en mémoire tampon double et laissez le contrôle se dessiner lui-même en réponse aux méthodes virtuelles appropriées appelées.

J’ai tiré cela d’un programme de travail C #. D’autres affiches présentent des erreurs de syntaxe et sont clairement copiées à partir de C ++ au lieu de C #

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

Il peut être assez bon d’appeler

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

Le scintillement que vous voyez est probablement dû au fait que Windows dessine l’arrière-plan du contrôle en premier (via WM_ERASEBKGND), puis demande à votre contrôle de dessiner à votre guise (via WM_PAINT). En désactivant la peinture d’arrière-plan et en effectuant toute la peinture dans votre remplacement OnPaint, vous pouvez éliminer le problème dans 99% des cas, sans qu’il soit nécessaire d’utiliser toute la mémoire nécessaire à la double mise en tampon.

Vous dites que vous avez essayé la mise en mémoire tampon double, mais ensuite vous dites dessiner une image en premier et le blasher. Avez-vous essayé de définir DoubleBuffered = true dans le constructeur plutôt que de le faire vous-même avec une image?