用户登录
用户注册

分享至

Winform下透明Panel

  • 作者: Heiy
  • 来源: 51数据库
  • 2021-10-13

网上很多写着透明panel的方法,都是把backcolor属性设置为透明,然后指定parent,实验了一下,对于部分情况下,是可用的,例如下层本身有自带的控件,但是,如果是用graphic绘制的内容,上层放一个设置了backcolor为透明的panel则不起作用。

google了一下,在stack overflow上找到了一个自定义透明panel

public class extendedpanel : panel
    {
        private const int ws_ex_transparent = 0x20;
        public extendedpanel()
        {
            setstyle(controlstyles.opaque, true);
        }

        private int opacity = 50;
        [defaultvalue(50)]
        public int opacity
        {
            get
            {
                return this.opacity;
            }
            set
            {
                if (value < 0 || value > 100)
                    throw new argumentexception("value must be between 0 and 100");
                this.opacity = value;
            }
        }
        protected override createparams createparams
        {
            get
            {
                createparams cp = base.createparams;
                cp.exstyle = cp.exstyle | ws_ex_transparent;
                return cp;
            }
        }
        protected override void onpaint(painteventargs e)
        {
            using (var brush = new solidbrush(color.fromargb(this.opacity * 255 / 100, this.backcolor)))
            {
                e.graphics.fillrectangle(brush, this.clientrectangle);
            }
            base.onpaint(e);
        }
    }

这个自定义panel可以解决问题,下图就是效果,透明的灰色是extendedpanel,黑色画线部分则是graphic绘制的。

 

软件
前端设计
程序设计
Java相关