如何使面板的一部分透明

时间:2018-07-22 17:48:41

标签: c# winforms graphics drawing

我碰巧正在尝试执行以下操作:

enter image description here

带有白色背景颜色的半透明半菜单,但是例如,如果您单击某个选项(如果已选中),它将变为完全透明,允许您通过它查看背景图像。

在图像中,选择了Label1选项,其中标签框必须是透明的,Label1必须继续显示,面板的其余部分必须继续使用其相应的半透明白色...

为达到这个目的,我首先尝试在Form上绘制两个框,但事实证明,从来没有绘制透明框:

public partial class Form1 : Form
{
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        var brush = new SolidBrush(Color.FromArgb(25, Color.White));
        e.Graphics.FillRectangle(brush, new Rectangle(0, 0, 50, this.Height));

        var brush2 = new SolidBrush(Color.Transparent);
        e.Graphics.FillRectangle(brush2, new Rectangle(0, 50, 50, 20));
    }
}

除了前面的问题外,此方法的另一个问题是,每当我要移动透明位置框时,都将被迫使用this.Invalidate();

来使控件无效。

然后我决定使用面板:

public partial class Form1 : Form
{
    protected override void OnLoad(EventArgs ev)
    {
        base.OnLoad(ev);

        this.panel1.Paint += (s, e) =>
        {
            var brush = new SolidBrush(Color.FromArgb(25, Color.White));
            e.Graphics.FillRectangle(brush, new Rectangle(0, 0, 50, this.Height));

            var brush2 = new SolidBrush(Color.Transparent);
            e.Graphics.FillRectangle(brush2, new Rectangle(0, 50, 50, 20));
        };  
    }
}

但是...结果是相同的...

总而言之,所选选项必须是完全透明的,以便可以看到背景图像,但标签仍可见,其余选项必须是半透明的白色。

我该怎么做?

0 个答案:

没有答案