日期:2012-10-28  浏览次数:20495 次

走近VB.Net(七)在窗体上画图
如果看过一些文章一定知道在窗体上画图要使用system.drawing类,在VB.Net中没有line与label控件,需要自已写一些代码,

首先写一个事件过程onpaint.在显示窗体的同时显示图形

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)

'TODO: 请在此处添加绘图代码

End Sub





ByVal e As PaintEventArgs是一个参数类,这个有些象在VB6在使用的自定义类型,在一个集合中有多个成员变量,(参考

《VB.Net核心定义》之集合/成员)。在e后面打点就可以看到相关的参数。在mouse_down,mouse_up等事件中获取X,Y坐标就使用

e.X跟e.Y。在窗体上有些事件需要手工添加,前面几章有相关内容,现在我们要使用的是e.Graphics参数,

请添加如下代码:

Dim gp As Graphics = e.Graphics

当然你要记住在程序代码的起始加了Imports System.Drawing 这样system.drawing.graphics 可以写成graphics,而system.drawing.pen

可以写成pen
另外我们要创建一个画笔对象,这就象现实中一样,画笔是一个对象,我们使用画笔去绘图。

Dim newpen As New Pen(Color.Black,5)

甚至可以这样写:

Dim newpen As New Pen(color.FromARGB(22, 23, 24), 5)

Pen是一个重载性质的函数,也就是有好几种格式,在打逗号以后出现的提示上可以看到一个向下的键头与数字,点击箭头可以

察看函数的不同版本使用的不同参数。这里使用了一个system.draw.color类的fromARGB的函数,由于他也是一个重载的孙数,你可以写入

A,R,G,B四个参数,也可以写入R,G,B三个参数,一共有四种版本供您使用,也只要在打逗号以后出现的提示上可以看到一个向下的键头与数字即可。

你可以只使用一个色彩的参数,或者在后面加一个整数,定义画笔的大小,也就是画出来的线条应该有多宽,记住color也是system.drawing

的一个类如:Dim newpen As New Pen(Color.Black)

现在使用drawline方法画出想要的线条,如下:

gp.Drawline(newpen, 10, 20, 70, 80)

Drawline也是一个重载的方法(Overloads Public Sub DrawLine)一般是使用5个参数,后面四个可以是integer类型,也可以是single的

浮点类型。这里使用的是整数

第一个是代表画笔,后面依次是x1,y1(起点坐标),X2,Y2(终点坐标)





画一个矩形如下:

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)

Dim gp As Graphics = e.Graphics

Dim newpen As New Pen(Color.Black, 5)

gp.DrawRectangle(newpen, 10, 20, 70, 80)

End Sub



画正方形要求最后两个参数相同:

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)

Dim gp As Graphics = e.Graphics

Dim newpen As New Pen(Color.Black, 5)

gp.DrawRectangle(newpen, 10, 20, 80, 80)

End Sub



画一抛物线如下:

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)

Dim gp As Graphics = e.Graphics

Dim newpen As New Pen(Color.Black, 5)

gp.drawarc(newpen, 10, 20, 70, 80, 123, 233)

End Sub



画贝塞尔曲线如下:

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)

Dim gp As Graphics = e.Graphics

Dim newpen As New Pen(Color.Black, 5)

gp.DrawBezier(newpen, 10, 20, 70, 80, 123, 233, 23, 45)

End Sub



你也可以在一屏之内同时进行多次绘图,如下:

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)

Dim i As Integer

Dim gp As Graphics = e.Graphics

For i = 1 To 10

Dim newpen As New Pen(color.FromARGB(i * 25, i * 25, i * 25), 5)

gp.DrawRectangle(newpen, 10 + i * 6, 20 + i * 6, 80, 80)

Next

End Sub

运行一下,这个图片一定让你捧腹一笑,你可以随意改变参数看看有什么效果。