次の方法で共有


ユーザー描画コントロール

.NET Framework には、独自のコントロールを簡単に開発する機能が用意されています。 いくつかの標準コントロールをコードで結び付けることにより、ユーザー コントロールを作成できます。または、独自のコントロールを一から設計することもできます。 さらには、継承機能を利用して、既存のコントロールを継承するコントロールを作成し、本来の機能を拡張することもできます。 どのようなアプローチの場合でも、.NET Framework には、作成するコントロールに対してカスタム グラフィカル インターフェイスを描画する機能が用意されています。

コントロールの描画は、コントロールの OnPaint メソッドのコードを実行することで行われます。 OnPaint メソッドの引数は PaintEventArgs オブジェクトであり、コントロールのレンダリングに必要な情報と機能をすべて提供します。 PaintEventArgs はプロパティとして、コントロールのレンダリングで使用される 2 つの主要なオブジェクトを提供します。

  • ClipRectangle オブジェクト - 描画されるコントロールの一部を表す四角形です。 コントロールの描画方法によって、コントロール全体またはコントロールの一部になります。

  • Graphics オブジェクト - コントロールを描画するために必要な機能を提供するいくつかのグラフィック指向オブジェクトとメソッドをカプセル化します。

Graphics オブジェクトとその使い方の詳細については、「方法 : 描画する Graphics オブジェクトを作成する」を参照してください。

OnPaint イベントは、コントロールが描画されるか、表示が更新されるたびに発生します。ClipRectangle オブジェクトは、コントロールが描画される四角形を表します。 コントロール全体を更新する必要がある場合、ClipRectangle オブジェクトはコントロール全体のサイズを表します。 ただし、コントロールの一部だけを更新する必要がある場合、ClipRectangle オブジェクトは再描画する必要のある領域だけを表します。 ユーザー インターフェイスで別のコントロールまたはフォームが重なっているためにコントロールの一部が見えない場合などはその一例です。

Control クラスから継承する場合は、OnPaint メソッドをオーバーライドし、その中にグラフィック レンダリング コードを記述する必要があります。 ユーザー コントロールまたは継承したコントロールにカスタム グラフィカル インターフェイスを提供する場合も、OnPaint メソッドをオーバーライドします。 次に例を示します。

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

   // Declare and instantiate a new pen.
   System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua);

   // Draw an aqua rectangle in the rectangle represented by the control.
   pe.Graphics.DrawRectangle(myPen, new Rectangle(this.Location, 
      this.Size));
}
protected   void OnPaint(PaintEventArgs pe)
{
   // Call the OnPaint method of the base class.
   super.OnPaint(pe);

   // Declare and instantiate a new pen.
   System.Drawing.Pen myPen =  new System.Drawing.Pen(Color.get_Aqua());

   // Draw an aqua rectangle in the ClipRectangle.
   pe.get_Graphics().DrawRectangle(myPen, pe.get_ClipRectangle());
}

この例は、単純なグラフィカル表示によってコントロールをレンダリングする方法を示しています。 このコードは基本クラスの OnPaint メソッドを呼び出し、描画に使用する Pen オブジェクトを作成して、コントロールの LocationSize で指定された四角形に楕円を描画します。 ほとんどのレンダリング コードはこの例よりもかなり複雑ですが、この例は PaintEventArgs オブジェクトに含まれる Graphics オブジェクトの使用方法を示しています。 UserControlButton など、既にグラフィカル表示が使用されているクラスから継承し、そのグラフィカル表示をコントロールのレンダリングに使用しない場合は、基本クラスの OnPaint メソッドを呼び出さないでください。

コントロールの OnPaint メソッドのコードは、コントロールが最初に描画されるとき、および表示が更新されたときに実行されます。 サイズが変更されたときにコントロールが必ず再描画されるようにするには、コントロールのコンストラクターに次の行を追加する必要があります。

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

注意

四角形以外のコントロールを実装するには、Control.Region プロパティを使用します。

参照

処理手順

方法 : 描画する Graphics オブジェクトを作成する

参照

Region

ControlStyles

Graphics

OnPaint

PaintEventArgs

概念

内在コントロール

さまざまなカスタム コントロール