2014-10-20 39 views
0

我有一個自定義控制,基本上平的字符串和該字符串下方的線:當放置在窗體上C#繪製構成控制

public class TitleLabel : UserControl 
{ 
    //Properties here... 

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

     e.Graphics.DrawString(Caption, Font, brush, 0, 0); 
     e.Graphics.DrawLine(pen, 1, captionSize.Height + 2, this.Width - 1, captionSize.Height + 2); 
    } 
} 

此控制工作正常。但是,我需要將它放在另一個用戶控件中:

public class TitleBox : UserControl 
{ 
    public TitleLabel TitleLabel {get; set;} 

    public TitleBox() 
    { 
     this.TitleLabel = new TitleTable(); 
     this.TitleLabel.Location = new Point(10, 10); 
    } 
} 

但是,執行上述操作並不會繪製第一個控件。我是否需要在第二個控件中掛接其Paint事件?

+0

我已經刪除了我回答。發佈一些簡短但完整的樣本來重現問題。這將幫助我們看到什麼是錯的。 – 2014-10-20 09:04:16

+0

您可能只需從其父繪畫事件調用嵌入式控件上的Invalidate()。 – TaW 2014-10-20 09:10:26

回答

1

僅僅創建TitleLabel控件的內部是不夠的TitleBox。此外,您必須將新創建的控件添加到UserControl.Controls財產TitleBox(此屬性存儲的所包含的用戶控件內的控件的集合),例如:

public class TitleBox : UserControl 
{ 
    public TitleLabel TitleLabel {get; set;} 

    public TitleBox() 
    { 
     this.TitleLabel = new TitleTable(); 
     this.TitleLabel.Location = new Point(10, 10); 

     this.Controls.Add(this.TitleLabel); 
    } 
}