加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net – 在WinForms用户控件上轻击标签背景,启用了背景图像

发布时间:2020-12-17 00:03:55 所属栏目:大数据 来源:网络整理
导读:我正在开发一个Windows窗体项目,并且遇到UserControl Double Buffering的一些问题. 我创建了一个usercontrol并有一个背景图像,然后在它上面我有几个单选按钮和标签.单选按钮和标签都具有透明背景作为颜色. 但是,当我显示并隐藏用户控件时,我可以看到那些具有
我正在开发一个Windows窗体项目,并且遇到UserControl Double Buffering的一些问题.
我创建了一个usercontrol并有一个背景图像,然后在它上面我有几个单选按钮和标签.单选按钮和标签都具有透明背景作为颜色.
但是,当我显示并隐藏用户控件时,我可以看到那些具有透明背景的标签和单选按钮上的闪烁.

我试过了

Me.SetStyle(ControlStyles.DoubleBuffer _
Or ControlStyles.AllPaintingInWmPaint _
Or ControlStyles.UserPaint _
Or ControlStyles.SupportsTransparentBackColor,_
True)

在initializeComponent()之后,在此用户控件上启用双缓冲区,但它似乎不起作用.

这不是双缓冲可以解决的闪烁源.当UC重新绘制自己时,它会绘制背景图像,留下控件所在的孔.然后每个控件都自己绘制,填充孔,首先要求UC再次绘制自己以产生背景像素,然后将自己绘制在顶部.临时洞是你看到的闪烁.

您可以通过允许UC在控件的客户区域中绘制自己来减少反对意见,以便正确设置背景.将此代码粘贴到UserControl类中:

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

这不会使绘画更快,并可能有副作用.如果这仍然是一个问题,那么你需要使BackgroundImage绘制更快.将其预先缩放到用户控件的客户端大小,以便可以在不重新缩放的情况下绘制它.对位图使用PixelFormat.Format32bppPArgb格式,它比大多数视频适配器上的任何其他格式快约10倍.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读