2016-05-26 78 views
1

我創建了一個自定義控件並將其綁定到Form。我在控件中繪製圖形文本並添加到Form中。但它沒有顯示錶格。這是我的代碼。在Winforms中不顯示DrawString自定義控件文本C#

//創建一個自定義的控制

public class DrawTextImage : Control 
    { 

     public void DrawBox(PaintEventArgs e, Size size) 
     { 
      e.Graphics.Clear(Color.White); 
      int a = 0; 
      SolidBrush textColor = new SolidBrush(Color.Black); 
      using (SolidBrush brush = new SolidBrush(Color.Red)) 
      { 

       e.Graphics.FillRectangle(brush, new Rectangle(a, a, size.Width, size.Height)); 
       e.Graphics.DrawString("Text", Font, textColor, new PointF(50, 50)); 
      } 
     } 
    } 

//加載Form1中

public Form1() 
     { 
      InitializeComponent();   

      DrawTextImage call = new DrawTextImage(); 
      call.Text = "TextControl"; 
      call.Name = "TextContrl"; 
      Size siz = new Size(200, 100); 
      call.Location = new Point(0, 0); 
      call.Visible = true; 
      call.Size = siz; 
      call.DrawBox(new PaintEventArgs(call.CreateGraphics(), call.ClientRectangle), siz); 
      this.Controls.Add(call); 
     } 

任何幫助,我做了什麼錯?

+1

現在你的控件只顯示一次文本。您應該在控件的「OnPaint」方法內執行繪圖部分。這是一個反覆出現的方法,就像電子遊戲的主循環一樣。 – raidensan

+0

切勿使用'control.CreateGraphics'!切勿嘗試緩存'Graphics'對象!使用'Graphics g = Graphics.FromImage(bmp)'或者在控件的'Paint'事件中使用'e.Graphics'參數來繪製一個'Bitmap bmp'。 – TaW

回答

4

您應該使用控件自己的Paint事件,而不是您必須手動調用的自定義方法。

public class DrawTextImage : Control 
{ 
    protected override void OnPaint(PaintEventArgs e) 
    { 
     e.Graphics.Clear(Color.White); 
     int a = 0; 
     SolidBrush textColor = new SolidBrush(Color.Black); 
     using (SolidBrush brush = new SolidBrush(Color.Red)) 
     { 
      //Note: here you might want to replace the Size parameter with e.Bounds 
      e.Graphics.FillRectangle(brush, new Rectangle(a, a, Size.Width, Size.Height)); 
      e.Graphics.DrawString("Text", Font, textColor, new PointF(50, 50)); 
     } 
    } 
} 

刪除電話DrawBox,這是不必要的。

只要需要重繪控制界面,就會自動觸發Paint事件。您可以通過使用控件的Invalidate()Refresh()方法自己在代碼中請求。