C#winform使用双缓冲解决刷新闪屏的问题


最近在做一个winform项目,其中一个panel内的全部控件都是动态添加到页面中的,并且这些动态的控件需要做添加、删除等的功能,考虑到界面的美观,在每添加或删除时都要重新加载所有动态控件,但是,有一个问题就是清空控件再添加时页面会闪屏,这个问题很影响人机交互的效果,最后通过一个大佬了解到了“双缓冲”技术,在大佬给的示例中我稍微修改了一下,现在分享给大家:
1、首先我重写了panel控件,项目(右键)–>添加新项–>自定义控件
添加自定义控件
2、添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public partial class Mypanel : Panel
    {<!-- -->
        public Mypanel()
        {<!-- -->
            InitializeComponent();
            //panel双缓冲
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            this.SetStyle(ControlStyles.UserPaint, true);
        }

        protected override void OnPaint(PaintEventArgs pe)
        {<!-- -->
            base.OnPaint(pe);
        }
    }

3、在使用双缓冲的窗体Load事件中添加如下代码:

1
2
//窗体双缓冲
this.DoubleBuffered = true;

这样,重新加载Mypanel中控件时,就可以防止闪屏了!!!良心推荐