Control.CreateGraphics Método

Definição

Cria o Graphics para o controle.

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

Retornos

Graphics

O Graphics para o controle.

Exemplos

O exemplo de código a seguir redimensiona o controle especificado para que o controle acomode seu texto formatado. O texto formatado é a Text propriedade com o controle atribuído Font aplicado ao texto. O AutoSizeControl método neste exemplo também tem um textPadding parâmetro que representa o preenchimento a ser aplicado a todas as bordas do controle. Para fazer o preenchimento parecer igual, alinhe o texto com o MiddleCenter valor de System.Drawing.ContentAlignment se o controle der suporte a ele.

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

Comentários

O Graphics objeto que você recupera por meio do CreateGraphics método normalmente não deve ser retido após o processamento da mensagem atual do Windows, pois qualquer coisa pintada com esse objeto será apagada com a próxima mensagem WM_PAINT. Portanto, você não pode armazenar em cache o Graphics objeto para reutilização, exceto para usar métodos não visuais como Graphics.MeasureString. Em vez disso, você deve chamar CreateGraphics sempre que quiser usar o Graphics objeto e, em seguida, chamar Dispose quando terminar de usá-lo. Para obter mais informações sobre mensagens do Windows, consulte WndProc.

Por design, CreateGraphics define a propriedade para o thread de chamada e falha se ele for chamado em outros threads.

Observação

Além da InvokeRequired propriedade, há quatro métodos em um controle que são thread safe: Invoke, e BeginInvokeEndInvokeCreateGraphics se o identificador para o controle já foi criado. Chamar CreateGraphics antes que o identificador do controle tenha sido criado em um thread em segundo plano pode causar chamadas cruzadas ilegais. Para todas as outras chamadas de método, você deve usar um dos métodos de invocação para fazer marshaling da chamada para o thread do controle.

Aplica-se a

Confira também