透明控制画出形状

时间:2016-02-26 19:36:34

标签: c# winforms user-controls


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

现在我遇到了问题,当标签可见时,我无法正确查看图片框。

enter image description here

我该如何解决这个问题?

还在用户控件上绘制事件不起作用

    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);
        }
    }

1 个答案:

答案 0 :(得分:-1)

表单控件实际上没有transpartent背景,它们会复制它的父内容。

此外,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));
    }
}