Question

Comment réduire le scintillement dans un panneau vb2005? À l’intérieur du panneau parent, j’utilise 2 autres panneaux.

Le panneau le plus externe contient une image-objet d'arrière-plan et les deux panneaux les plus internes sont des superpositions qui changent pour s'adapter aux emplacements de l'image-objet d'arrière-plan.

Lorsque je change les images-objets de superposition, j'aimerais réduire le scintillement et en faire une transition en douceur d'une image-objet à une autre.

Voici le code qui modifie les images dans les panneaux de superposition le panneau de superposition n'est pas modifié si la nouvelle valeur est identique à l'ancienne valeur

 Private Sub TrackBar2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar2.Scroll, TrackBar1.Scroll
    If (Panel2.Tag <> TrackBar1.Value) Then
        Panel2.Tag = TrackBar1.Value
        Panel2.BackgroundImage = tops(TrackBar1.Value) //img array for the top panel
        Panel2.Update()
    End If
    If (Panel3.Tag <> TrackBar2.Value) Then
        Panel3.Tag = TrackBar2.Value
        If (TrackBar2.Value > 0) Then
            Panel3.Location = New Point(182, 210)
        Else
            Panel3.Location = New Point(182, 209)
        End If
        Panel3.BackgroundImage = bottoms(TrackBar2.Value)//img array for the bottom panel
        Panel3.Update()
    End If
Était-ce utile?

La solution

Vous n'allez pas aimer cette réponse. Le scintillement est dû au fait que le panneau .NET par défaut n'est pas mis en tampon double. Ainsi, tout le dessin est réalisé directement dans la mémoire visible, pas un tampon de retour.

Vous devez sous-classer la classe Panel et activer la double mise en mémoire tampon sur la nouvelle classe. Cela peut être fait en faisant un

SetStyle

appelez le constructeur avec les indicateurs OptimisedDoubleBuffering et DoubleBuffering activés.

Une fois que vous avez la nouvelle classe de panneaux à double tampon, vous pouvez les utiliser dans votre application au lieu du panneau standard.

Je vous ai dit que vous ne voudriez pas la réponse;)

Autres conseils

Rein a raison, le sous-classement est le meilleur moyen. En attendant, changez cet appel de Update à Invalidate; cela pourrait aider un peu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top