赞
踩
控件闪烁目前了解的原因无非是各个控件绘制的先后的问题导致的,解决绘制的问题推荐两个方式
1.双缓冲
可以在控件初始化设置,注意父窗体要设置运行允许双缓冲
- SetStyle(ControlStyles.UserPaint, true);
- SetStyle(ControlStyles.AllPaintingInWmPaint, true);
- SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
- this.UpdateStyles();
双缓存说白了就是先会绘制到缓存中,而不是直接绘制到屏幕。有些情况下感觉没有效果,其实不然,只是控件太多,我们不能保证每一控件都是双缓冲
2.CreateParams
自定义控件内添加:
- /// <summary>
- /// 封装创建控件时所需的信息
- /// </summary>
- protected override CreateParams CreateParams
- {
- get
- {
- var parms = base.CreateParams;
- parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN
- return parms;
- }
- }
调用的窗体里添加:
- /// <summary>
- /// 封装创建控件时所需的信息
- /// </summary>
- protected override CreateParams CreateParams
- {
- get
- {
- CreateParams cp = base.CreateParams;
- cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
- return cp;
- }
- }
第二种操作简单,作用也比较明显
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。