如何使用户控件背景色在C#透明?(How to make a UserControls BackCo

2019-07-18 04:35发布

我在Windows窗体用户控件(包括单选按钮和三个标签以及一个进度条)创建了一个简单的棍子人。

我设置新的用户控制,以透明的背颜色,这样,当我将其拖动到我的形式,它与其他颜色和附图的形式的共混物。 我没有得到我想要实现的。

下面是图片:

Answer 1:

用户控件已经支持这一点,它的ControlStyles.SupportsTransparentBackColor风格标志已经开启。 所有你需要做的是设置背景色属性Color.Transparent。

你必须牢记这透明度模拟接下来的事情,它是通过询问控制的家长自行绘制来产生后台完成。 那么,什么是重要的是,你得到家长正确设置。 这是一个有点棘手做的,如果家长不是容器控件。 就像一个PictureBox。 设计者可以使表单父,所以你会看到表格的背景,而不是图片框。 你需要修复的代码,编辑表单构造使它看起来类似于这样:

var pos = this.PointToScreen(userControl11.Location);
userControl11.Parent = pictureBox1;
userControl11.Location = pictureBox1.PointToClient(pos);


Answer 2:

在控制的构造函数中设置样式,支持透明背景色

SetStyle(ControlStyles.SupportsTransparentBackColor, true);

然后设置背景颜色透明单位

this.BackColor = Color.Transparent;

从MSDN

一个更复杂的方法(也可能是工作之一) 这里所描述 -与overrding CreateParamsOnPaint



Answer 3:

为什么所有这些事情? 用户控件类有属性地区。 设置这个给你什么都喜欢的形状,并且不需要任何其他调整。

public partial class TranspBackground : UserControl
{
    public TranspBackground()
    {
        InitializeComponent();
    }

    GraphicsPath GrPath
    {
        get
        {
            GraphicsPath grPath = new GraphicsPath();
            grPath.AddEllipse(this.ClientRectangle);
            return grPath;
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        // set the region property to the desired path like this
        this.Region = new System.Drawing.Region(GrPath);

        // other drawing goes here
        e.Graphics.FillEllipse(new SolidBrush(ForeColor), ClientRectangle);
    }

}

其结果是,如下图中:

没有低级代码,没有扭捏,简单干净。 然而,有一个问题,但在大多数情况下,它可以不被发现,边缘不光滑和抗锯齿也不会帮助。 但是,解决方法是相当容易的。 其实不是所有这些复杂的背景处理要容易得多..



文章来源: How to make a UserControls BackColor transparent in C#?