次の方法で共有


User-Drawn 制御

.NET Framework には、独自のコントロールを簡単に開発する機能が用意されています。 コードによって連結された標準コントロールのセットであるユーザー コントロールを作成することも、独自のコントロールを一から設計することもできます。 継承を使用して、既存のコントロールから継承するコントロールを作成し、その固有の機能を追加することもできます。 どのような方法を使用する場合でも、.NET Framework には、作成するコントロールのカスタム グラフィカル インターフェイスを描画する機能が用意されています。

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

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

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

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

OnPaint イベントは、コントロールが画面上で描画または更新されるたびに発生し、ClipRectangle オブジェクトは描画が行われる四角形を表します。 コントロール全体を更新する必要がある場合、ClipRectangle はコントロール全体のサイズを表します。 ただし、コントロールの一部のみを更新する必要がある場合、ClipRectangle オブジェクトは、再描画する必要がある領域のみを表します。 このような場合の例として、コントロールがユーザー インターフェイス内の別のコントロールまたはフォームによって部分的に隠された場合があります。

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

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));  
   }
}  

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

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

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

手記

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

参照