OnPaint メソッドのオーバーライド
.NET Framework で定義されているイベントをオーバーライドするための基本的な手順は、いずれの場合も同じです。次の一覧は、それをまとめたものです。
継承元のイベントをオーバーライドするには
保護された
On
EventName メソッドをオーバーライドします。オーバーライドされた
On
EventName メソッドから基底クラスのOn
EventName メソッドを呼び出して、登録されているデリゲートがイベントを受け取るようにします。
Paint イベントについてここで詳しく説明するのは、すべての Windows フォーム コントロールで、Control から継承した Paint イベントをオーバーライドする必要があるためです。 基底の Control クラスは、派生コントロールをどのように描画する必要があるのかは把握せず、OnPaint メソッドの描画ロジックを提供することもありません。 Control の OnPaint メソッドは、登録されたイベント レシーバーに 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 イベントが発生します。
関連項目
.NET Desktop feedback