VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • vb.net教程之vb.net继承的例子

vb.net继承的例子
这次列举一个在窗体上画出一些图形,如:长方形、正方形等的例子。
在vb.net中,控件可以被Windows系统重新绘制,用户可以通过重载OnPaint事件来画自己的图形。PaintEventArgs是系统底层调入子例程的一个对象,用户可以通过这个对象在窗体的表面画一些图形,用户还需要建立一个Pen对象,它的颜色的缺省值是黑色,线条的宽度的缺省值是1。下面这个例子说明了这个对象的用法。
Protected Overrides Sub OnPaint(e as PaintEventArgs)
Dim g as Graphics=e.graphics
Dim rpen As new Pen(Color.Black)
g.drawLine(rpen,10,20,70,80)
End Sub
下面画一个简单的长方形,先写一个长方形的类,它可以把自己画在Windows窗体上,只有两个方法,一个是构造函数,一个是draw方法,先声明一个命名空间,然后再写下长方形的类的实现代码,如下:
Namespace VBPatterns
Public Class Rectangle
Private x,y,h,w As Integer
Protected rpen As Pen
Public Sub New(Byval x_ As Integer,_
Byval y_ As Integer,_
Byval h_ AS Integer,Byval w_ As Integer)
MyBase.New()
x=x_
y=y_
h=h_
w=w_
rpen=New Pen(Color.Black)
End Sub
End Class
End Namespace
现在每次在Main Form窗体中声明一个变量,就把它声明为命名空间中的一个成员。下面,首先把这个长方形的类声明为VBPatterns命名空间的一个成员:
Public Class RectForm
Inherits System.WinForms.Form
Private rect As VBPatterns.Rectangle
并且建立一个长方形类的对象
Public Sub New()
MyBase.New()
'This call is required by the Win Form Designer.
InitializeComponent()
rect=New VBPatterns.Rectangle(40,20,30,80)
End Sub
现在重载OnPaint事件:
Protected Overrides Sub OnPaint(Byval e As PaintEventArgs)
Dim g As Graphics
g=e.Graphics
rect.draw(g)
End Sub
从长方形建立一个正方形:正方形不过是长方形的一个实例,可以从长方形的类派生出正方形的类而不需要重写太多的代码,下面就是实现的代码:
Namespace VBPatterns
Public Class Square
Inherits Rectangle
Public Sub New(Byval x As Integer,_
Byval y As Integer,Byval w As Integer)
MyBase.New(x,y,w,w)
End Sub
End Class
End Namespace
正方形的类实际上只包含了一个构造函数,不过它还调用了长方形的一些方法,注意到正方形类实际上没有draw方法,如果用户不声明一个新的方法,则基本类的方法就会自动被运用。
下面是通过构造函数建立了一个长方形和一个正方形
Public Sub New()
InitializeComponent
rect=New Rectangle(10,10,30,80)
sq=New Square(50,50,50)
End Sub
并重载Onpaint方法:
Protected Overrides Sub OnPaint(Byval e As PaintEventArgs)
Dim g As Graphics
g=e.Graphics
rect=draw(g)
sq.draw(g)
End Sub
在vb 6.0中,用户可以把一个变量或者类声明为公有或者是私有,在类中公有变量可以被其他的类访问,而私有变量只能在类中被访问。在vb.net中引入了关键字Protected,Protected能在类中和它派生出来的类访问,也就是说Protected变量不能在类的外面被公有的访问。
假设现在需要派生一个新的类叫做DoubleRect,它是从类Rectangle派生出来的,它的功能是画两个稍微错开的长方形,而且颜色不一样。在构造函数中,将用红色来处理长方形的颜色,代码如下:
Namespace VBPatterns
Public Class DoubleRect
Inherits Rectangle
Private redPen As Pen
'----
Public Sub New(Byval x As Integer,_
Byval y As Integer,_
Byval w As Integer,Byval h As Integer)
MyBase.New(x,y,w,h)
redPen=NewPen(Color.FromArGB(255,Color.Red),2)
End Sub
这意味着新类DoubleRect将具有自己的draw方法,现在基本的类已经有一个draw方法了,所以必须再建立一个具有相同名字的新方法,所以重载这种方法,代码如下:
Public Overrides Sub draw(Byval g As Graphics)
MyBase.draw(g)
g.drawRectangle(redPen,x+4,y+4,w,h)
End Sub
注意:这里想使用坐标系,而且长方形的大小已经在构造函数进被给定了,但有时用户需要改变这些参数,那么可以在DoubleRect中保留这些参数的备份,自己再声明一些参数,或者在基本类Rectangle中把这些参数设为Protected型,如:
Protected x,y,h,w As Integer
还必须告诉编译器,通过声明Rectangle的draw方法为overridable,这样就可以给draw方法重载了,代码如下:
Public Overridable Sub draw(Byval g As Graphics)
g.DrawRectangle(rpen,x,y,w,h)
End Sub 

相关教程