質問
vb2005パネルのちらつきを減らすにはどうすればよいですか? 親パネル内には、使用している他の2つのパネルがあります。
最も外側のパネルには背景スプライトが含まれ、最も内側の2つのパネルはオーバーレイであり、背景スプライトの場所に合わせて変化します。
オーバーレイスプライトを変更するときは、フリッカーを減らして、スプライトから次のスプライトへのスムーズな移行を行いたいと思います。
これは、オーバーレイパネルの画像を変更するコードです 新しい値が古い値と同じ場合、オーバーレイパネルは変更されません
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
解決
この答えは気に入らないでしょう。ちらつきは、デフォルトの.NETパネルがダブルバッファリングされていないために発生します。したがって、すべての描画はバックバッファではなく可視メモリで直接実行されます。
Panelクラスをサブクラス化し、新しいクラスでダブルバッファリングを有効にする必要があります。これを行うには、
SetStyle
OptimededDoubleBufferingおよびDoubleBufferingフラグを有効にしてコンストラクターを呼び出します。
ダブルバッファリングされた新しいパネルクラスを作成したら、標準のパネルの代わりにそれらをアプリケーションで使用できます。
答えが気に入らないと言った;)
他のヒント
手綱は正しい、サブクラス化が最善の方法です。ただし、その間に、その呼び出しをUpdateからInvalidateに変更してください。それは少し役立つかもしれません。
所属していません StackOverflow