Compartir a través de


Control.CreateGraphics Método

Definición

Crea el Graphics para el control.

public:
 System::Drawing::Graphics ^ CreateGraphics();
public System.Drawing.Graphics CreateGraphics ();
member this.CreateGraphics : unit -> System.Drawing.Graphics
Public Function CreateGraphics () As Graphics

Devoluciones

Graphics

Graphics del control.

Ejemplos

En el ejemplo de código siguiente se cambia el tamaño del control especificado para que el control se adapte a su texto con formato. El texto con formato es la Text propiedad con la asignación del control aplicada Font al texto. El AutoSizeControl método de este ejemplo también tiene un textPadding parámetro que representa el relleno que se va a aplicar a todos los bordes del control. Para que el relleno aparezca igual, alinee el texto con el MiddleCenter valor de System.Drawing.ContentAlignment si el control lo admite.

private:
   void AutoSizeControl( Control^ control, int textPadding )
   {
      
      // Create a Graphics object for the Control.
      Graphics^ g = control->CreateGraphics();
      
      // Get the Size needed to accommodate the formatted Text.
      System::Drawing::Size preferredSize = g->MeasureString( control->Text, control->Font ).ToSize();
      
      // Pad the text and resize the control.
      control->ClientSize = System::Drawing::Size( preferredSize.Width + (textPadding * 2), preferredSize.Height + (textPadding * 2) );
      
      // Clean up the Graphics object.
      delete g;
   }
private void AutoSizeControl(Control control, int textPadding)
{
   // Create a Graphics object for the Control.
   Graphics g = control.CreateGraphics();

   // Get the Size needed to accommodate the formatted Text.
   Size preferredSize = g.MeasureString(
      control.Text, control.Font).ToSize();

   // Pad the text and resize the control.
   control.ClientSize = new Size(
      preferredSize.Width + (textPadding * 2), 
      preferredSize.Height+(textPadding * 2) );

   // Clean up the Graphics object.
   g.Dispose();
}
Private Sub AutoSizeControl(control As Control, textPadding As Integer)
   ' Create a Graphics object for the Control.
   Dim g As Graphics = control.CreateGraphics()
   
   ' Get the Size needed to accommodate the formatted Text.
   Dim preferredSize As Size = g.MeasureString( _
     control.Text, control.Font).ToSize()
   
   ' Pad the text and resize the control.
   control.ClientSize = New Size( _
     preferredSize.Width + textPadding * 2, _
     preferredSize.Height + textPadding * 2)
   
   ' Clean up the Graphics object.
   g.Dispose()
End Sub

Comentarios

El Graphics objeto que recuperas a través del CreateGraphics método no debería conservarse normalmente después de que se haya procesado el mensaje actual de Windows, ya que todo lo que se pinta con ese objeto se borrará con el siguiente mensaje de WM_PAINT. Por lo tanto, no se puede almacenar en caché el Graphics objeto para su reutilización, excepto para usar métodos no visuales como Graphics.MeasureString. En su lugar, debe llamar a CreateGraphics cada vez que quiera usar el Graphics objeto y, a continuación, llamar Dispose a cuando haya terminado de usarlo. Para obtener más información sobre los mensajes de Windows, vea WndProc.

Por diseño, CreateGraphics establece la propiedad en el subproceso que realiza la llamada y produce un error si se llama a en otros subprocesos.

Nota

Además de la InvokeRequired propiedad , hay cuatro métodos en un control que son seguros para subprocesos: Invoke, BeginInvoke, EndInvokey CreateGraphics si el identificador del control ya se ha creado. Llamar CreateGraphics a antes de que se haya creado el identificador del control en un subproceso en segundo plano puede provocar llamadas entre subprocesos no válidas. Para todas las demás llamadas de método, debe usar uno de los métodos de invocación para serializar la llamada al subproceso del control.

Se aplica a

Consulte también