Monday, April 19, 2010

Panel Double buffering VB.NET and C# - Flicker Free

I faced a problem when loading background image in the panel. It used to flicker a lot. I thought of double buffering concept. But there is no in-built double buffering property for panel.

All what I did is to write a class which inherits from Panel Class, and in the constructor  set the DoubleBuffered to true and set the appropriate control styles.

VB.NET Code

Public Class DoubleBufferPanel

Inherits Panel


Public Sub New()


Me.DoubleBuffered = True

SetStyle(ControlStyles.AllPaintingInWmPaint Or _

ControlStyles.DoubleBuffer Or ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True)

UpdateStyles()


End Sub
End Class

 
After building the project, we should be able to see the DoubleBufferPanel component in the ToolBox.

Double buffer Panel


Then drag and drop the panel  and used it. The problem is solved. It's so simple.

C# Code

public class DoubleBufferPanel : Panel
{


public DoubleBufferPanel()
{


// Set the value of the double-buffering style bits to true.
   this.DoubleBuffered = true;



   this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint |
    ControlStyles.AllPaintingInWmPaint,true);


    this.UpdateStyles();


}


}

14 comments:

  1. How come I get a 'no source code available' tab and my application breaks?

    ReplyDelete
  2. a great thread ;) thank you sooo much!!!

    ReplyDelete
  3. Thanks for this.

    ReplyDelete
  4. You have NO IDEA of how much you've helped me out by sharing this... kudos!

    ReplyDelete
  5. Dude, you rock. Thank you for this.

    ReplyDelete
  6. Legend, Thanks a lot.

    ReplyDelete
  7. fantastic works perfectly

    ReplyDelete
  8. Thanks. I've been looking for a solution for days. This worked great, and so simple - once you know how it's done of course! Cheers!

    ReplyDelete