2009-05-11 40 views
11

Tôi googled cho "Vẽ văn bản trên picturebox C#", nhưng tôi không thể tìm thấy bất cứ điều gì hữu ích. Sau đó tôi googled cho "Vẽ văn bản trên mẫu C#" và tôi tìm thấy một số mã, nhưng nó không hoạt động theo cách tôi muốn nó làm việc.Làm thế nào để vẽ văn bản trên picturebox?

private void DrawText() 
    { 
     Graphics grf = this.CreateGraphics(); 
     try 
     { 
      grf.Clear(Color.White); 
      using (Font myFont = new Font("Arial", 14)) 
      { 
       grf.DrawString("Hello .NET Guide!", myFont, Brushes.Green, new PointF(2, 2)); 
      } 
     } 
     finally 
     { 
      grf.Dispose(); 
     } 
    } 

Khi tôi gọi hàm, màu nền của biểu mẫu trở thành màu trắng (mặc định là màu đen).

Câu hỏi của tôi:

1: Điều này có hoạt động trên hình ảnh không?

2: Cách khắc phục sự cố?

+0

Bạn chỉ có thể tạo đối tượng Label, viết trên đó và đặt nó thành bất kỳ tọa độ nào bạn muốn. – BobbyShaftoe

+1

Màu nền của nhãn sẽ không giống như hình ảnh tôi muốn viết văn bản. –

Trả lời

34

Bạn không muốn cuộc gọi đó đến Clear() - đó là lý do tại sao nó chuyển nền trắng, và nó sẽ che phủ hình ảnh của bạn.

Bạn muốn sử dụng sự kiện Paint trong PictureBox. Bạn lấy tham chiếu đồ họa từ e.Graphics, và sau đó sử dụng DrawString() mà bạn có trong mẫu của bạn.

Đây là mẫu. Chỉ cần thêm một hộp hình mẫu của bạn, và thêm một event handler cho sự kiện Sơn:

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
{ 
    using (Font myFont = new Font("Arial", 14)) 
    { 
     e.Graphics.DrawString("Hello .NET Guide!", myFont, Brushes.Green, new Point(2, 2)); 
    } 
} 

(Lưu ý rằng bạn sẽ không thấy văn bản lúc thiết kế - bạn sẽ phải chạy chương trình cho nó vẽ).

+0

Tôi không hiểu cách khắc phục sự cố. –

+0

Hãy cho tôi một vài phút và tôi sẽ đăng một số mã mẫu ... –

+1

+1; @ John: chỉ cần không gọi Dispose của đối tượng e.Graphics trong sự kiện Paint; bạn chỉ "mượn" nó. –

Các vấn đề liên quan