ユーザー描画コントロールUser-Drawn Controls

.NET Framework では、独自のコントロールを簡単に開発する機能を提供します。The .NET Framework provides you with the ability to easily develop your own controls. コードによって結合されて標準のコントロールのセットである、ユーザー コントロールを作成することもをゼロから独自のコントロールをデザインすることができます。You can create a user control, which is a set of standard controls bound together by code, or you can design your own control from the ground up. 既存のコントロールから継承するコントロールを作成し、本来の機能を追加する継承を使用することもできます。You can even use inheritance to create a control that inherits from an existing control and add to its inherent functionality. どのようなアプローチを使用すると、.NET Framework は、任意のコントロールを作成するためのカスタムのグラフィカル インターフェイスを描画するために機能を提供します。Whatever approach you use, the .NET Framework provides the functionality to draw a custom graphical interface for any control you create.

コントロールの描画には、コントロールのコードの実行、OnPaintメソッド。Painting of a control is accomplished by the execution of code in the control's OnPaint method. 1 つの引数、OnPaintメソッドは、PaintEventArgsすべての情報と、コントロールのレンダリングに必要な機能を提供するオブジェクト。The single argument of the OnPaint method is a PaintEventArgs object that provides all of the information and functionality required to render your control. PaintEventArgsプロパティとして、コントロールの描画に使用される 2 つのプリンシパル オブジェクトを提供します。The PaintEventArgs provides as properties two principal objects that will be used in the rendering of your control:

  • ClipRectangle オブジェクトの描画されるコントロールの一部を表す四角形。ClipRectangle object - the rectangle that represents the part of the control that will be drawn. これには、全体をコントロール、またはコントロールの描画方法に応じたコントロールの一部です。This can be the entire control, or part of the control depending on how the control is drawn.

  • Graphics オブジェクト - いくつかのグラフィック指向オブジェクトとコントロールを描画するために必要な機能を提供するメソッドをカプセル化します。Graphics object - encapsulates several graphics-oriented objects and methods that provide the functionality necessary to draw your control.

詳細については、Graphicsオブジェクトとそれを使用して、参照してください方法方法。描画の Graphics オブジェクトを作成です。For more information on the Graphics object and how to use it, see How to: Create Graphics Objects for Drawing.

OnPaintコントロールの描画または画面で、更新されるたびにイベントが発生し、ClipRectangleオブジェクトが描画を実行、四角形を表します。The OnPaint event is fired whenever the control is drawn or refreshed on the screen, and the ClipRectangle object represents the rectangle in which painting will take place. コントロール全体を更新する必要がある場合、ClipRectangleコントロール全体のサイズを表します。If the entire control needs to be refreshed, the ClipRectangle will represent the size of the entire control. コントロールの一部がただし、更新、する必要があるあれば、ClipRectangleオブジェクトが再描画する必要があるリージョンのみを表します。If only part of the control needs to be refreshed, however, the ClipRectangle object will represent only the region that needs to be redrawn. このようなケースの例は、別のコントロールまたはユーザー インターフェイスでのフォーム コントロールの一部が見えない場合になります。An example of such a case would be when a control was partially obscured by another control or form in the user interface.

継承する場合、Controlクラスがオーバーライドする必要があります、OnPaintメソッド内でのグラフィックス レンダリング コードを提供します。When inheriting from the Control class, you must override the OnPaint method and provide graphics-rendering code within. ユーザー コントロールまたは継承されたコントロールにカスタムのグラフィカル インターフェイスを提供する場合もこれを行うオーバーライドすることで、OnPaintメソッド。If you want to provide a custom graphical interface to a user control or an inherited control, you can also do so by overriding the OnPaint method. 例は、以下に示します。An example is shown below:

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)  
   ' Call the OnPaint method of the base class.  
   MyBase.OnPaint(e)  
  
   ' Declare and instantiate a drawing pen.  
   Using myPen As System.Drawing.Pen = New System.Drawing.Pen(Color.Aqua)  
      ' Draw an aqua rectangle in the rectangle represented by the control.  
      e.Graphics.DrawRectangle(myPen, New Rectangle(Me.Location, Me.Size))  
   End Using
End Sub  
protected override void OnPaint(PaintEventArgs e)  
{  
   // Call the OnPaint method of the base class.  
   base.OnPaint(e);  
  
   // Declare and instantiate a new pen.  
   using (System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua))  
   {
      // Draw an aqua rectangle in the rectangle represented by the control.  
      e.Graphics.DrawRectangle(myPen, new Rectangle(this.Location,   
         this.Size));  
   }
}  

前の例では、非常にシンプルなグラフィカル表示コントロールを描画する方法を示します。The preceding example demonstrates how to render a control with a very simple graphical representation. 呼び出す、OnPaint基底クラスのメソッドを作成、Penを描画する対象のオブジェクトし、最後に、四角形に楕円を描画しますが定め、LocationSizeコントロールの。It calls the OnPaint method of the base class, it creates a Pen object with which to draw, and finally draws an ellipse in the rectangle determined by the Location and Size of the control. この例での使用を示しますが、ほとんどのレンダリング コードは、これよりも大幅に複雑になります、Graphicsオブジェクト内に含まれる、PaintEventArgsオブジェクト。Although most rendering code will be significantly more complicated than this, this example demonstrates the use of the Graphics object contained within the PaintEventArgs object. 既にグラフィカル表現をなどが含まれるクラスから継承している場合UserControlまたはButton、その表現をレンダリングに組み込むしたくない、基本クラスを呼び出す必要はありません、 OnPaintメソッド。Note that if you are inheriting from a class that already has a graphical representation, such as UserControl or Button, and you do not wish to incorporate that representation into your rendering, you should not call your base class's OnPaint method.

内のコード、OnPaintおよび更新は、コントロールが最初に描画されるときに、コントロールのメソッドが実行されます。The code in the OnPaint method of your control will execute when the control is first drawn, and whenever it is refreshed. サイズを変更するたびに、コントロールが再描画されることを確認するには、コントロールのコンス トラクターに次の行を追加します。To ensure that your control is redrawn every time it is resized, add the following line to the constructor of your control:

SetStyle(ControlStyles.ResizeRedraw, True)  
SetStyle(ControlStyles.ResizeRedraw, true);  

注意

使用して、Control.Region四角形以外のコントロールを実装するプロパティ。Use the Control.Region property to implement a non-rectangular control.

関連項目See also