2009-05-04 6 views
1

Как уменьшить мерцание в панели vb2005? Внутри родительской панели у меня есть еще две панели, которые я использую.Уменьшение мерцания при изменении изображений в панели

Внешняя панель содержит фоновый спрайт, а две самые внутренние панели - это оверлеи, которые изменяются, чтобы соответствовать местам фонового спрайта.

Когда я изменяю оверлейные спрайты, я хотел бы уменьшить мерцание и сделать его плавным переход от одного спрайта к следующему.

Вот код, который изменяет изображения в наложении панелей панель оверлей не изменилось, если новое значение такое же, как старое значение

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 

ответ

3

Вы не собираетесь нравится этот ответ , Мерцание вызвано тем фактом, что панель .NET по умолчанию не является двойной буферизацией - поэтому он делает весь чертеж непосредственно в видимой памяти, а не обратно.

Вам необходимо подклассифицировать класс Panel и включить двойную буферизацию в новом классе. Это можно сделать, выполнив команду

SetStyle 

вызов в конструкторе с флагами Оптимизировано двойное буферирование и двойное буферизация.

Как только у вас есть новый класс панели, который имеет двойной буфер, вы можете использовать их в своем приложении вместо стандартной панели.

Я сказал вам, что вы не хотели бы, ответ;)

+0

Интересный метод – Jim

0

Rein прав, подклассов является лучшим способом. Тем не менее, измените этот вызов с «Обновить до invalidate»; что может помочь немного.