ルーレット ホイールのあるパネルがあり、ちらつきを止めるためにパネルをダブル バッファリングする必要があります。誰でも私を助けることができますか?
編集:
はい、試してみました。
panel1.doublebuffered は存在せず、this.doublebuffered のみです。そして、フォームだけをバッファリングする必要はありません。パネルだけです。
ルーレット ホイールのあるパネルがあり、ちらつきを止めるためにパネルをダブル バッファリングする必要があります。誰でも私を助けることができますか?
編集:
はい、試してみました。
panel1.doublebuffered は存在せず、this.doublebuffered のみです。そして、フォームだけをバッファリングする必要はありません。パネルだけです。
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();
}
}
これを行う別の方法は、InvokeMember メソッドを使用して、ダブルバッファリングされたメンバーを呼び出すことです。
typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty
| BindingFlags.Instance | BindingFlags.NonPublic, null,
panel2, new object[] { true });
このようにすることで、サブクラスを作成する必要がなくなります
Winform パネルにはDoubleBuffered プロパティがあります。
編集:保護されていることに気付くべきでした。他の人はそれをサブクラス化する方法を説明しています。:)