OnPaint メソッドのオーバーライド
更新 : 2007 年 11 月
.NET Framework で定義されているイベントをオーバーライドするための基本的な手順はすべてのイベントで同一です。次にこの手順を示します。
継承したイベントをオーバーライドするには
プロテクト メソッド OnEventName をオーバーライドします。
オーバーライドされた OnEventName メソッドから基本クラスの OnEventName メソッドを呼び出します。その結果、登録デリゲートがイベントを受信します。
すべての Windows フォーム コントロールでは Control から継承する Paint イベントをオーバーライドする必要があるため、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 イベントのデータが格納されます。次のコードに示すように、PaintEventArgs クラスには 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 メソッドを呼び出します。呼び出された OnPaint メソッドは Paint イベントを発生させます。