OnPaint メソッドのオーバーライド

.NET Framework で定義されているイベントをオーバーライドするための基本的な手順は、いずれの場合も同じです。次の一覧は、それをまとめたものです。

継承元のイベントをオーバーライドするには

  1. 保護された OnEventName メソッドをオーバーライドします。

  2. オーバーライドされた OnEventName メソッドから基底クラスの OnEventName メソッドを呼び出して、登録されているデリゲートがイベントを受け取るようにします。

Paint イベントについてここで詳しく説明するのは、すべての Windows フォーム コントロールで、Control から継承した Paint イベントをオーバーライドする必要があるためです。 基底の Control クラスは、派生コントロールをどのように描画する必要があるのかは把握せず、OnPaint メソッドの描画ロジックを提供することもありません。 ControlOnPaint メソッドは、登録されたイベント レシーバーに Paint イベントをディスパッチするだけです。

方法: シンプルな Windows フォーム コントロールを開発する」のサンプルを学習済みであれば、OnPaint メソッドをオーバーライドする例を既に見ていることになります。 次のコードは、そのサンプルから抜粋したものです。

Public Class FirstControl  
   Inherits Control  
  
   Public Sub New()  
   End Sub  
  
   Protected Overrides Sub OnPaint(e As PaintEventArgs)  
      ' Call the OnPaint method of the base class.  
      MyBase.OnPaint(e)  
      ' Call methods of the System.Drawing.Graphics object.  
      e.Graphics.DrawString(Text, Font, New SolidBrush(ForeColor), RectangleF.op_Implicit(ClientRectangle))  
   End Sub  
End Class
public class FirstControl : Control {  
   public FirstControl() {}  
   protected override void OnPaint(PaintEventArgs e) {  
      // Call the OnPaint method of the base class.  
      base.OnPaint(e);  
      // Call methods of the System.Drawing.Graphics object.  
      e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle);  
   }
}

PaintEventArgs クラスには、Paint イベント用のデータが格納されます。 次のコードに示すように、このクラスには 2 つのプロパティがあります。

Public Class PaintEventArgs  
   Inherits EventArgs  
   ...  
   Public ReadOnly Property ClipRectangle() As System.Drawing.Rectangle  
      ...  
   End Property  
  
   Public ReadOnly Property Graphics() As System.Drawing.Graphics  
      ...  
   End Property
   ...  
End Class  
public class PaintEventArgs : EventArgs {  
...  
    public System.Drawing.Rectangle ClipRectangle {}  
    public System.Drawing.Graphics Graphics {}  
...  
}  

ClipRectangle は描画される四角形です。Graphics プロパティは、Graphics オブジェクトを参照します。 System.Drawing 名前空間のクラスは、新しい Windows グラフィックス ライブラリである GDI+ の機能へのアクセスを提供するマネージド クラスです。 Graphics オブジェクトには、点、文字列、線、円弧、楕円、およびその他多数の図形を描画するメソッドがあります。

コントロールでは、ビジュアル表示を変更する必要がある場合に、必ず OnPaint メソッドが呼び出されます。 その後、このメソッドによって Paint イベントが発生します。

関連項目