2016-02-26 83 views
0


我是新的创建用户控制,并且在我的第一个用户控件我从图片框和标签,
的PictureBox用于绘制形状和标签显示文本在该形状使用。 我被设置为标签的picturebox父级,并且将backcolor标签设置为透明,如果没有设置为visible = false的任何文本标签过德鲁形状的透明控制

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

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

你已经接受了错误的答案。您需要添加到代码中的只有一行,用于将标签添加到picturebox的控件集合,另一行用于设置其位置。 Pictubrebox在容器中没有帮助,但它们的工作也是如此。 – TaW

回答

-1

窗体控件没有一个真正的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)); 
    } 
} 
+0

我如何使用Graphics作为BackgroundImage? – Sara

+0

如果您直接绘制,而不是绘制到绘图框绘制到usercontrol,请使用Paint事件。 – Gusman

+0

谢谢,但不行! :(,结果相同 – Sara