天天看點

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

第二種操作簡單,作用也比較明顯