私はそれにルーレットホイールを持っているパネルを持っている、と私はそれがちらつきを停止するように、パネルをダブルバッファリングする必要があります。誰か助けてくれますか?C#でPanelをダブルバッファリングするにはどうすればよいですか?
〜T-フォックス
EDIT:
はい、私はそれを試してみました。
panel1.doublebufferedは存在しません、this.doublebufferedのみです。フォームだけをバッファリングする必要はありません。パネルだけです。
私はそれにルーレットホイールを持っているパネルを持っている、と私はそれがちらつきを停止するように、パネルをダブルバッファリングする必要があります。誰か助けてくれますか?C#でPanelをダブルバッファリングするにはどうすればよいですか?
〜T-フォックス
EDIT:
はい、私はそれを試してみました。
panel1.doublebufferedは存在しません、this.doublebufferedのみです。フォームだけをバッファリングする必要はありません。パネルだけです。
WinformパネルにはDoubleBuffered propertyがあります。
編集:保護されていることに気づいたはずです。他の人はサブクラス化する方法を説明しています。 :)
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();
}
}
回答を投稿していただきありがとうございます。 –
AFAIK PictureBoxはとにかくダブルバッファーになっています.. – TaW
あなたはPanel
のderividedクラスのDoubleBuffered
-Property公開することができます。
public class DoubleBufferedPanel : Panel
{
[DefaultValue(true)]
public new bool DoubleBuffered
{
get
{
return base.DoubleBuffered;
}
set
{
base.DoubleBuffered = value;
}
}
}
ダブルバッファリングで*を除いてこのクラスを使用することに意味がないので、もっと簡単にします: 'class DoubleBufferedPanel:Panel {public DoubleBufferedPanel(){base { DoubleBuffered = true; }} '。 –
非常にシンプルで、確かに。このワンライナーをプロジェクトに追加した後、私がやらなければならなかったことは、デザイナーに行き、問題のパネルのデータタイプを2か所で変更しました。 – TaW
これを行うための別の方法は、メンバーを呼び出すことですがInvokeMemberメソッドを使用して、doublebuffered:
typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty
| BindingFlags.Instance | BindingFlags.NonPublic, null,
panel2, new object[] { true });
このようにすれば、サブクラスを作成する必要はありません
Panel * * DoubleBufferedプロパティを持っています(JPはそのドキュメントのdocにリンクしています)。このプロパティは保護されているため、そのプロパティにアクセスできないことに注意してください。 Panelのサブクラスを作成し、それをコンストラクタに設定します。 – Andy
これは他の人にとっては問題ではないかもしれませんが、 'InitializeComponent'に値を設定するとデザイナーがクラッシュします。 @Andyで述べたように、コンストラクタでそれを行います。 – Dan