2010-05-08 6 views
3

Je dessine une grille d'objets dans un panneau. quand je fais défiler le panneau rapidement je reçois un scintillement. Je pensais que permettre le double buffering peut prendre soin de cela mais ce que je trouve c'est qu'il ne dessine pas complètement tout et il me reste des sections vides. quelqu'un pourrait-il me donner des suggestions quant à ce qui pourrait se produire et comment je pourrais le corriger.doublebuffering ne réduit pas le scintillement

MISE À JOUR:

je trouve que je créais l'objet graphique avec CreateGraphics() plutôt que d'utiliser le paramètre dans la méthode de peinture

Répondre

1

Comment avez-vous la double mise en mémoire tampon?

Vous devez soit définir la propriété DoubleBuffered du contrôle true

public UserControl1() 
{ 
    InitializeComponent(); 
    this.DoubleBuffered = true; 
} 

Ou

Utilisez SetStyle, et définir à la fois OptimizedBoubleBuffer et AllPaintingInWmPaint

public UserControl1() 
{ 
    InitializeComponent(); 
    SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);  
} 

ControlStyles.AllPaintingInWmPaint charge le contrôle ignorer les messages WM_ERASEBKGND. Cela permettra de réduire le scintillement que vous voyez en particulier à partir du défilement. Cela est implicite lors de la définition de la propriété DoubleBuffered sur true, en fait, il fait le même appel à SetStyle que dans le second exemple.

Questions connexes