重写 OnPaint 方法
重写 .NET Framework 中定义的任何事件的基本步骤都是相同的,下表对其进行了总结。
重写继承事件
重写受保护的 On事件名称 方法。
从重写的 On事件名称 方法调用基类的 On事件名称 方法,以使注册的委托能够接收相应事件。
这里将详细介绍 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 事件的数据。 它有两个属性,如以下代码所示。
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 事件。