質問

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に変更してください。それは少し役立つかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top