2009-05-11 13 views
11

Busqué en Google para "Dibujar texto en cuadro de imagen C#", pero no pude encontrar nada útil. Luego busqué en Google "Dibujando texto en formulario C#" y encontré un código, pero no funciona como quiero que funcione.¿Cómo dibujar texto en cuadro de imagen?

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

Cuando llamo a la función, el color de fondo del formulario se convierte en blanco (que es negro por defecto).

Mis preguntas:

1: ¿Este trabajo en un cuadro de imagen?

2: ¿Cómo solucionar el problema?

+0

Puede crear un objeto Label, escribir en él y configurarlo en la coordenada que desee. – BobbyShaftoe

+1

El color de fondo de la etiqueta no va a ser el mismo que el de la imagen en la que quiero escribir el texto. –

Respuesta

34

No desea esa llamada a Clear(); es por eso que está convirtiendo el fondo en blanco, y cubrirá su imagen.

Desea utilizar el evento Paint en el PictureBox. Obtiene la referencia de gráficos de e.Graphics y luego usa DrawString() que tiene en su muestra.

Aquí hay un ejemplo. Sólo tiene que añadir un cuadro de imagen a su forma, y ​​añadir un controlador de eventos para el evento 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)); 
    } 
} 

(Tenga en cuenta que no verá el texto en tiempo de diseño - que tendrá que ejecutar el programa para que pintar).

+0

No entiendo cómo solucionar el problema. –

+0

Dame unos minutos y publicaré un código de muestra ... –

+1

+1; @John: simplemente no llame a Dispose del objeto e.Graphics en el evento Paint; solo lo estás "pidiendo prestado". –