最近在做一个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中控件时,就可以防止闪屏了!!!良心推荐