【winform窗体控件上叠加自定义控件出现透明卡顿】的解决办法

如图,在项目中,给panel上面加了一个自定义控件,如下图红框标记的位置。但是在窗体加载时,每次自定义控件都会先变成透明,卡顿一下后才会显示出来

设计器里的效果:

卡顿后的效果:

 

解决办法:

在使用自定义控件的窗体代码中重写下面的方法: 

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

在自定义控件的窗体代码中重写下面的方法:

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

2020-9-30补充:上述方法可能带来其他问题:

参考:https://blog.csdn.net/taoerit/article/details/51879391?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-4-51879391.nonecase&utm_term=winform%E7%A8%8B%E5%BA%8F%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95&spm=1000.2123.3001.4430

1 如果使用此代码了,且部分界面不能显示,就是此代码造成的

          a    我在一个界面上用了3个panel,并且每个panel显示编码器的图像,界面切换时发现只有三个panel图像,其他都不见了,我把这个代码去掉后就显示正常了,具体什么原因就不知道了。

         b   有一次我给form添加了个背景图片,切换了几次背景不见了,去掉代码就好了。

 

   多做单元测试,将功能在demo里测试,demo里不需要加什么双缓冲等等,如果demo里有问题,那么就是功能问题了。

 

2016-8-18  添加,  下面也可以解决双缓冲,暂时没发现什么问题,但是需要单独对每个控件进行设置缓冲

 
  1. public static void SetDouble(Control cc)

  2. {

  3.  
  4. cc.GetType().GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance |

  5. System.Reflection.BindingFlags.NonPublic).SetValue(cc, true, null);

  6.  
  7. }

使用方法:

 
  1. SetDouble(this);

  2. SetDouble(label1);

 

也可以试一下这个代码

 
  1. protected override void WndProc(ref Message m)

  2. {

  3.  
  4. if (m.Msg == 0x0014) // 禁掉清除背景消息

  5.  
  6. return;

  7.  
  8. base.WndProc(ref m);

  9.  
  10. }

 

 

 

参考:https://www.bbsmax.com/A/MyJxW7aezn/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值