23

ルーレット ホイールのあるパネルがあり、ちらつきを止めるためにパネルをダブル バッファリングする必要があります。誰でも私を助けることができますか?

編集:

はい、試してみました。

panel1.doublebuffered は存在せず、this.doublebuffered のみです。そして、フォームだけをバッファリングする必要はありません。パネルだけです。

4

6 に答える 6

25

Panel または PictureBox から派生する必要があります。

バッファリングを有効にする方法に応じて、これには影響があります。

this.DoubleBuffer フラグを設定すれば問題ありません。

スタイルを手動で更新する場合は、WM_PAINT で自分でフォームをペイントする必要があります。

あなたが本当に野心的であると感じたら、独自のバック バッファーを維持し、ビットマップとして描画することができます。


using System.Windows.Forms;

public class MyDisplay : Panel
{
    public MyDisplay()
    {
        this.DoubleBuffered = true;

        // or

        SetStyle(ControlStyles.AllPaintingInWmPaint, true);
        SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
        UpdateStyles();
    }
}
于 2009-05-04T00:57:43.333 に答える
21

これを行う別の方法は、InvokeMember メソッドを使用して、ダブルバッファリングされたメンバーを呼び出すことです。

 typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty    
            | BindingFlags.Instance | BindingFlags.NonPublic, null,
            panel2, new object[] { true }); 

このようにすることで、サブクラスを作成する必要がなくなります

于 2015-07-22T12:17:07.057 に答える
4

Winform パネルにはDoubleBuffered プロパティがあります。

編集:保護されていることに気付くべきでした。他の人はそれをサブクラス化する方法を説明しています。:)

于 2009-05-04T00:37:36.580 に答える