关于C#UserControl闪烁的问题

闪烁严重的直接看最后,双缓冲,0x02000000,都没什么用!

以下是早期解法,闪烁能解,但是你会发现控件刷刷刷的闪,而且页面切换的时候也会闪。
 个人觉得这种全网都在重复的方法相当于你得了感冒,结果把自己鼻子切了,只要有这个问题就是你代码书写的问题!


Winform在单个UserControl中控件布局过多,在加载的时候就会出现页面闪烁的问题。网上也查了很多资料,有很多涉及到BufferedGraphics,双缓冲,重写控件,以及将构造函数中的东西都放在Form_Load中,然而都没有什么卵用。最后发现重载CreateParams可以做到,而且不是网上大部分写的只对WS_EX_COMPOSITED进行处理。

解决方法如下:
在容器Form中增加:

protected override CreateParams CreateParams
{
    get
    {
            var cp = base.CreateParams; 
            //WS_EX_COMPOSITED
            cp.ExStyle |= 0x02000000; 
            return cp; 
    }
}

在UserControl中增加:

protected override CreateParams CreateParams
{
       get
      {
              var cp = base.CreateParams; 
              //WS_CLIPCHILDREN 
              cp.Style &= ~0x02000000; 
              return cp;
       }
}   

WS_EX_COMPOSITED该窗口所有的子窗口使用双缓冲已自下而上的顺序绘图。

WS_CLIPCHILDREN控制父窗口对子窗口区域进行绘制,如果设置了相关属性,则父窗口不对子窗口区域进行绘制。


这个问题的最最最根本的原因就是,你的构造函数里面的东西太多了,不管你的父容器还是子容器能不放构造函数里的就不要放构造函数里面,Designer里面的代码能少就少。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值