none
继承于.net2.0 中的System.Windows.Forms.ListView的自定义控件,在IE中使用时,并设置this.DoubleBuffered = true;了,但还是闪烁,请问大家有什么好的解决办法? RRS feed

  • 问题

  • 设置控件this.DoubleBuffered = true;,且屏蔽了擦出背景的消息0x14,但仍然在IE中显示,在点击IE其他非控件页面时,控件会出现闪烁现像,

    在网上查找资料和尝试都没有能解决,故提此问题,希望有知道此问题解决办法的老师,帮忙回答一下!

    在此,谢谢啦!

    2014年2月25日 10:10

答案

  • 您好,
    form有加入以下的code嗎?

    protected override CreateParams CreateParams {
      get {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
        return cp;
      }
    } 
    How to fix the flickering in User controls


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年2月25日 10:27
  • 在你的控件的构造函数中添加:

    SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true); 
    UpdateStyles();

    宿主你的控件的控件中也要做这些处理。

    为了找到究竟是哪个控件没有正确解决闪烁问题,我建议你按照控件的父子层级,给每个控件设置不同的背景色。然后你改变整体大小时出现闪烁后就能识别出是哪个控件的背景色被重绘了。

    2014年2月26日 6:23

全部回复

  • 您好,
    form有加入以下的code嗎?

    protected override CreateParams CreateParams {
      get {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
        return cp;
      }
    } 
    How to fix the flickering in User controls


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年2月25日 10:27
  • 非常谢谢!尝试后,还是不行,并且样式大走样。

    还有就是我问的是针对usercontrol的情况,而非form

    请问你还有其他方法吗?


    2014年2月26日 3:48
  • 在你的控件的构造函数中添加:

    SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true); 
    UpdateStyles();

    宿主你的控件的控件中也要做这些处理。

    为了找到究竟是哪个控件没有正确解决闪烁问题,我建议你按照控件的父子层级,给每个控件设置不同的背景色。然后你改变整体大小时出现闪烁后就能识别出是哪个控件的背景色被重绘了。

    2014年2月26日 6:23
  • 非常感谢,问题解决了。

    2014年2月26日 7:19