天天看点

C# 控件闪烁问题解决办法

控件闪烁目前了解的原因无非是各个控件绘制的先后的问题导致的,解决绘制的问题推荐两个方式

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; 
    }
}
           

第二种操作简单,作用也比较明显