GDI+绘图过程中的抖屏
问题:
使用Panel画板画图,使用定时器刷新,出现抖屏或者闪动现象。
原因
- 在一般情况下,我们通常使用的是WF自己本身进行GDI绘制,出现抖动或者出现闪动时,直接将WF中的属性DoubleBuffered()属性改为True。
- 但是有些情况,我们是希望在自己自定义的Panel中进行GDI+绘制以及定时器制作动画。这时,Pannel本身并没有这样的属性。我们就想办法去自定义,也就是说,这个成了解决问题的核心。具体怎么来解决呢,请看解决方案。
解决方案
- 在Form类中定义双缓存类DoubleBufferPanel继承Pannel类
public class DoubleBufferPanel : Panel
{
public DoubleBufferPanel()
{
this.SetStyle(ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint,
true);
}
}
- 然后在*.designer.cs中找到实例化Panel类的位置,将其更新。
- private System.Windows.Forms.Panel panel;
- this.panel = new System.Windows.Forms.Panel();
+ private DoubleBufferPanel panel;
+ this.panel = new DoubleBufferPanel();
这样搞的话,这个问题就被完美的解决了!