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在容器中没有帮助,但它们也可以工作。