Control.CreateGraphics メソッド

定義

コントロールの Graphics を作成します。

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

戻り値

Graphics

コントロールの Graphics

次のコード例では、コントロールが書式設定されたテキストに収まるよう、指定したコントロールのサイズを変更します。 書式設定されたテキストは、 Text コントロールが割り当てられたプロパティで、テキストに適用されます FontAutoSizeControlこの例のメソッドには、textPaddingコントロールのすべての端に適用するパディングを表すパラメーターもあります。 パディングを等しく表示するには、テキストをコントロールで MiddleCenter サポートされている場合の System.Drawing.ContentAlignment 値に合わせます。

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

注釈

メソッドを使用してCreateGraphics取得するオブジェクトはGraphics、現在の Windows メッセージが処理された後に通常は保持されません。これは、そのオブジェクトで塗りつぶされたものは次のWM_PAINT メッセージで消去されるためです。 したがって、オブジェクトを Graphics 再利用するためにキャッシュすることはできません。ただし、次のような Graphics.MeasureString非ビジュアル メソッドを使用する場合を除きます。 代わりに、オブジェクトを使用Graphicsするたびに呼び出CreateGraphicsし、使用が完了したら呼び出すDispose必要があります。 Windows メッセージの詳細については、次を参照してください WndProc

仕様上、 CreateGraphics 呼び出し元のスレッドに所有権を設定し、他のスレッドで呼び出されると失敗します。

注意

このプロパティにInvokeRequired加えて、スレッド セーフなコントロールには、スレッド セーフInvokeBeginInvokeな 4 つのメソッドがあります。またEndInvokeCreateGraphicsコントロールのハンドルが既に作成されている場合です。 バックグラウンド スレッドでコントロールのハンドルが作成される前に呼び出 CreateGraphics すと、スレッド間の呼び出しが無効になることがあります。 他のすべてのメソッド呼び出しでは、いずれかの呼び出しメソッドを使用して、コントロールのスレッドへの呼び出しをマーシャリングする必要があります。

適用対象

こちらもご覧ください