2010-03-16 15 views
0

Je travaille sur un projet de formulaire Windows et j'ai un problème avec UserControl Double Buffering. J'ai créé un contrôle utilisateur et j'ai une image de fond, puis j'ai quelques boutons radio et étiquettes en plus. Les boutons radio et les étiquettes ont tous un fond transparent en couleur. Cependant, lorsque je montre et cache le contrôle Utilisateur, je peux voir le scintillement sur les étiquettes et les boutons radio qui ont un arrière-plan transparent.étiquette backgrond feuilleter sur un contrôle utilisateur WinForms a une image d'arrière-plan activée

Et j'ai essayé

Me.SetStyle(ControlStyles.DoubleBuffer _ 
Or ControlStyles.AllPaintingInWmPaint _ 
Or ControlStyles.UserPaint _ 
Or ControlStyles.SupportsTransparentBackColor, _ 
True) 

Après InitializeComponent() pour activer double tampon sur ce contrôle utilisateur, mais il ne semble pas fonctionner.

Répondre

3

Ce n'est pas une source de scintillement que le double tampon peut résoudre. Lorsque l'UC se repeint, il dessine l'image d'arrière-plan, laissant des trous où les contrôles vont. Les contrôles ont ensuite l'occasion de se peindre eux-mêmes, en remplissant le trou en demandant d'abord à l'UC de se dessiner à nouveau pour produire les pixels d'arrière-plan, puis de se dessiner sur le dessus. Le trou temporaire est ce que vous voyez comme scintillement.

Vous pouvez le rendre moins répréhensible en permettant à l'UC de se dessiner dans la zone client des contrôles afin que l'arrière-plan soit déjà correctement défini. Coller ce code dans la classe UserControl:

protected override CreateParams CreateParams { 
    get { 
    var parms = base.CreateParams; 
    parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN 
    return parms; 
    } 
} 

Cela ne rend pas la peinture plus vite et peut avoir des effets secondaires. Si cela pose toujours un problème, vous devez rendre le BackgroundImage plus rapide. Prescale à la taille du client du contrôle de l'utilisateur afin qu'il puisse être dessiné sans redimensionnement. Utilisez le format PixelFormat.Format32bppPArgb pour le bitmap, il est environ 10 fois plus rapide que n'importe quel autre sur la plupart des cartes vidéo.

+0

cela a résolu mon prolem, merci. – user294720