Pregunta

¿Cómo puedo reducir el parpadeo en un panel vb2005? Dentro del panel principal tengo otros 2 paneles que estoy usando.

El panel más exterior contiene un objeto sprite de fondo y los dos paneles más internos son superposiciones que cambian para adaptarse a los lugares del elemento sprite de fondo.

Cuando cambio los sprites de superposición, me gustaría reducir el parpadeo y hacer que la transición de un sprite a otro sea suave.

Aquí está el código que cambia las imágenes en los paneles de superposición el panel de superposición no se cambia si el nuevo valor es el mismo que el valor anterior

 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
¿Fue útil?

Solución

No te va a gustar esta respuesta. El parpadeo se debe al hecho de que el panel .NET predeterminado no tiene doble búfer, por lo que realiza todos los dibujos directamente en la memoria visible, no un búfer posterior.

Debe subclasificar la clase Panel y habilitar el búfer doble en la nueva clase. Esto se puede hacer haciendo un

SetStyle

llame al constructor con los indicadores OptimisedDoubleBuffering y DoubleBuffering habilitados.

Una vez que tenga la nueva clase de panel con doble búfer, puede usarlos en su aplicación en lugar del Panel estándar.

Te dije que no te gustaría la respuesta;)

Otros consejos

Rein es correcto, la subclasificación es la mejor manera. Mientras tanto, sin embargo, cambie esa llamada de Actualizar a Invalidar; Eso podría ayudar un poco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top