Search code examples
c#.netwinformsdoublebufferedownerdrawn

How do I enable double-buffering of a control using C# (Windows forms)?


How do I enable double-buffering of a control using C# (Windows forms)?

I have a panel control which I am drawing stuff into and also an owner-drawn tab control. Both suffer from flicker, so how can I enable double-buffering?


Solution

  • In the constructor of your control, set the DoubleBuffered property, and/or ControlStyle appropriately.

    For example, I have a simple DoubleBufferedPanel whose constructor is the following:

    this.DoubleBuffered = true;
    this.SetStyle(ControlStyles.UserPaint | 
                  ControlStyles.AllPaintingInWmPaint |
                  ControlStyles.ResizeRedraw |
                  ControlStyles.ContainerControl |
                  ControlStyles.OptimizedDoubleBuffer |
                  ControlStyles.SupportsTransparentBackColor
                  , true);