我是创建用户控件的新手,在我使用的第一个用户控件中使用了picturebox和label,
用于在该形状上显示文本的形状和标签的图片框。
我为标签设置了picturebox parent,如果没有任何文本标签设置为visible = false,则将backcolor标记为透明
现在我遇到了问题,当标签可见时,我无法正确查看图片框。
我该如何解决这个问题?
还在用户控件上绘制事件不起作用
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);
}
}
答案 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));
}
}