Winform下透明Panel
程序员文章站
2022-10-06 16:07:44
网上很多写着透明Panel的方法,都是把BackColor属性设置为透明,然后指定Parent,实验了一下,对于部分情况下,是可用的,例如下层本身有自带的控件,但是,如果是用Graphic绘制的内容,上层放一个设置了BackColor为透明的Panel则不起作用。 Google了一下,在Stack ......
网上很多写着透明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绘制的。