2009-05-04 8 views
16

私はそれにルーレットホイールを持っているパネルを持っている、と私はそれがちらつきを停止するように、パネルをダブルバッファリングする必要があります。誰か助けてくれますか?C#でPanelをダブルバッファリングするにはどうすればよいですか?

〜T-フォックス

EDIT:

はい、私はそれを試してみました。

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

+1

Panel * * DoubleBufferedプロパティを持っています(JPはそのドキュメントのdocにリンクしています)。このプロパティは保護されているため、そのプロパティにアクセスできないことに注意してください。 Panelのサブクラスを作成し、それをコンストラクタに設定します。 – Andy

+1

これは他の人にとっては問題ではないかもしれませんが、 'InitializeComponent'に値を設定するとデザイナーがクラッシュします。 @Andyで述べたように、コンストラクタでそれを行います。 – Dan

答えて

5

WinformパネルにはDoubleBuffered propertyがあります。

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

22

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(); 
    } 
} 
+0

回答を投稿していただきありがとうございます。 –

+0

AFAIK PictureBoxはとにかくダブルバッファーになっています.. – TaW

5

あなたはPanelのderividedクラスのDoubleBuffered -Property公開することができます。

public class DoubleBufferedPanel : Panel 
{   
    [DefaultValue(true)] 
    public new bool DoubleBuffered 
    { 
     get 
     { 
      return base.DoubleBuffered; 
     } 
     set 
     { 
      base.DoubleBuffered = value; 
     } 
    } 
} 
+7

ダブルバッファリングで*を除いてこのクラスを使用することに意味がないので、もっと簡単にします: 'class DoubleBufferedPanel:Panel {public DoubleBufferedPanel(){base { DoubleBuffered = true; }} '。 –

+0

非常にシンプルで、確かに。このワンライナーをプロジェクトに追加した後、私がやらなければならなかったことは、デザイナーに行き、問題のパネルのデータタイプを2か所で変更しました。 – TaW

9

これを行うための別の方法は、メンバーを呼び出すことですがInvokeMemberメソッドを使用して、doublebuffered:

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

このようにすれば、サブクラスを作成する必要はありません

関連する問題