C#:使用双缓冲让界面绘制图形时避免闪烁

以前做用户控件的时候喜欢拿已有的基础控件来拼。

发现这样做用户控件比较方便。

但是在控件投入大量使用之后,发现这种做法对控件的速度影响非常大。

如果一个控件是由1个Label,一个TextBox复合而成的。

那么创建一个这样的控件就相当于要生成2个控件。在设计界面和程序启动的时候速度明显感觉到变慢了。

 

于是全部重新修改,尽量把能不用控件的地方全部改成绘制。

比如Label用画出来的文字去替代。

 

比如一个日历控件上的31天的日期,以前用的Label,或者Button。

现在全部换成画出来的。创建速度从20毫秒加快到了0毫秒。

 

随之而来带来的一个问题就是。绘画的操作太多。导致界面闪烁比较严重。

问了一下公司的前辈,得到了下面的一个方法。使用之后确实完全没有闪烁了。。十分吃惊。赶紧记下。

 

 

 

将这段代码加到用户控件的构造函数中即可生效。

 

这段代码的主要功能是开启了双缓冲。

平时我以为开双缓冲只需要设置ControlStyles.OptimizedDoubleBuffer为true而已。

但是经过实践才发现,起关键作用的是OptimizedDoubleBuffer和AllPaintingInWmPaint两个。

当这两个都为true的时候。闪烁几乎消失。效果非常好。所以我在这里记下。

给自己,也给大家。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值