覆寫 OnPaint 方法
覆寫 .NET Framework 中任何所定義事件的基本步驟完全相同,並摘要於下列清單中。
若要覆寫繼承的事件
覆寫受保護的
On
EventName 方法。從覆寫的
On
EventName 方法呼叫基底類別的On
EventName 方法,因此,註冊的委派會收到事件。
這裡會詳細討論 Paint 事件,因為每個 Windows Forms 控制項都必須覆寫繼承自 Control 的 Paint 事件。 基底 Control 類別不知道需要如何繪製衍生控制項,而且不會在 OnPaint 方法中提供任何繪製邏輯。 Control 的 OnPaint 方法只會將 Paint 事件分派至已註冊的事件接收器。
如果您完成如何:開發簡單的 Windows Forms 控制項中的範例,則會看到覆寫 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 事件的資料。 其具有兩個屬性,如下列程式碼中所示。
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 命名空間中的類別是受控類別,其可存取 GDI+ (新的 Windows 圖形庫) 的功能。 Graphics 物件具有可繪製點、字串、線條、弧線、橢圓形和其他許多圖形的方法。
只要控制項需要變更其視覺效果,就會叫用其 OnPaint 方法。 此方法接著會引發 Paint 事件。