C# 绘制形状的透明控制

C# 绘制形状的透明控制,c#,winforms,user-controls,C#,Winforms,User Controls,我是创建用户控件的新手,在我从picturebox和label使用的第一个用户控件中, 用于绘制形状的picturebox和用于在该形状上显示文本的标签。 我为标签设置了picturebox父项,如果没有任何文本标签设置为visible=false,则标签backcolor也设置为透明 现在我有一个问题,当标签可见时,我无法正确地看到picturebox 我怎样才能解决这个问题 另外,用户控件上的绘制事件不起作用 private void Ucontrol_Paint(object s


我是创建用户控件的新手,在我从picturebox和label使用的第一个用户控件中,
用于绘制形状的picturebox和用于在该形状上显示文本的标签。 我为标签设置了picturebox父项,如果没有任何文本标签设置为visible=false,则标签backcolor也设置为透明

现在我有一个问题,当标签可见时,我无法正确地看到picturebox

我怎样才能解决这个问题

另外,用户控件上的绘制事件不起作用

    private void Ucontrol_Paint(object sender, PaintEventArgs e)
    {
        if (RightToLeft)
        {
            lblTxt.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
        }
        else
        {
            lblTxt.RightToLeft = System.Windows.Forms.RightToLeft.No;
        }

        lblTxt.ForeColor = FontColor;
        lblTxt.Text = Txt;
        if (Question)
        {
            BorderColor = Color.DarkBlue;
            BackColor = Color.FromArgb(75, 163, 234);
            CreateQuestion(BorderColor, BackColor);
        }
        else
        {
            BorderColor = Color.DarkGreen;
            BackColor = Color.FromArgb(59, 226, 75);
            CreateAnswer(BorderColor, BackColor);
        }
    }

表单控件没有真正的transpartent背景,它们复制它的父内容

此外,PictureBox不能是另一个控件的父控件,因为它们不是容器

然后,不使用picturebox,只需设置usercontrol背景图像并在其上添加标签,透明度就可以了

以下是手动绘制控件内容的工作示例:

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();

        Label lbl = new Label();
        lbl.Location = new Point(10, 10);
        lbl.Width = 150;
        lbl.Height = 150;
        lbl.BackColor = Color.Transparent;
        lbl.Text = @"asdfasdfasdfasdf\r\nasdfasdfasdf\r\n\r\nasdfasdfasdf";

        lbl.Visible = true;

        this.Controls.Add(lbl);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        e.Graphics.FillRectangle(Brushes.Red, new Rectangle(10, 10, 100, 100));
        e.Graphics.FillEllipse(Brushes.Yellow, new Rectangle(10, 10, 100, 100));
    }
}

如何使用图形作为背景图像?如果您直接绘制,而不是绘制到picturebox绘制到usercontrol,请使用Paint事件。除非您使用的是非常旧的框架,否则应该使用Paint事件,在这种情况下,您需要对其进行设置:我在.net 4.5上!用户控件支持透明和标签支持,但我看不到标签下的形状!愚蠢的问题,你把标签的背景颜色设置为透明了吗?我正在一个控件中测试它,它可以正常工作。你接受了一个错误的答案。您只需在代码中添加一行,将标签添加到picturebox的控件集合中,并设置其位置。Pictubreboxes在容器中没有帮助,但它们也可以工作。