2009-05-11 21 views
11

I googled dla "Rysowanie tekstu na obrazku C#", ale nie mogłem znaleźć nic przydatnego.Następnie I googled dla "Rysowanie tekstu na formularzu C#" i znalazłem kod, ale nie działa tak, jak chcę to działa.Jak narysować tekst na obrazku?

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(); 
     } 
    } 

Po wywołaniu funkcji kolor tła formularza staje się biały (domyślnie czarny).

Moje pytania:

1: Czy to zadziała na PictureBox?

2: Jak rozwiązać problem?

+0

Można po prostu utworzyć obiekt Label, napisać na nim i ustawić dowolną współrzędną. – BobbyShaftoe

+1

Kolor tła etykiety nie będzie taki sam, jak kolor obrazu, na który chcę napisać tekst. –

Odpowiedz

34

Nie chcesz tego połączenia z Clear() - dlatego zmienia kolor tła na biały i spowoduje ukrycie Twojego zdjęcia.

Chcesz użyć zdarzenia Paint w PictureBox. Otrzymasz odniesienie do grafiki z e.Graphics, a następnie użyj funkcji DrawString(), którą masz w swojej próbce.

Oto przykład. Wystarczy dodać Picture Box do formularza i dodać moduł obsługi zdarzeń dla zdarzenia PAINT:

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

(Zauważ, że nie będzie widać tekst w czasie projektowania - musisz uruchomić program dla niego malować).

+0

Nie rozumiem, jak rozwiązać problem. –

+0

Daj mi kilka minut, a ja opublikuję przykładowy kod ... –

+1

+1; @John: po prostu nie wzywaj do usunięcia obiektu e.Graphics w zdarzeniu Paint; tylko "pożyczasz" to. –