WINFORM 多控件闪烁问题

比如一个form中有20个picturebox或自定义图片控件.采用该方式可以解决依次加载闪烁问题.
注, 重载CreateParams能让控件重绘提速。所以然待究。然,Vista以下操作系统会出现CPU满载
protected override CreateParams CreateParams
{
    get
    {
       if( Environment.OSVersion.Version.Major >= 6 )
        { 
            // Vista以上       
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x02000000;
            return cp;
        }
        else
        {
            return base.CreateParams;
        }
    }
}

另外一个方法是调用win API.经过测试,再第一种方法使用后,部分界面存在延迟显示的问题,经该方法解决.
注,yourCtrl.Handler可通过form的this.Handler获取.
[System.Runtime.InteropServices.DllImport( "user32" )]
private static extern int SendMessage( IntPtr hwnd, int wMsg, int wParam, IntPtr lParam ); 
private const int WM_SETREDRAW = 0xB; 
 
private void RefreshYourCtrl()
    SendMessage( yourCtrl.Handle, WM_SETREDRAW, 0, IntPtr.Zero );//禁止重绘 
    // 重新布局 
  SendMessage( yourCtrl.Handle, WM_SETREDRAW, 1, IntPtr.Zero );//取消禁止 
  yourCtrl.Refresh(); 
}

最后提一个最好的方法:用GDI可以有效解决控件多的闪烁问题。
posted @ 2017-09-05 09:41  sunlyk  阅读(887)  评论(0编辑  收藏  举报