vbnetgraphic简单的画图程序
VB用Picture控件绘制图形并保存

Co4;bmp"
'设置或返回对话框的默认文件扩展名
CommonDialog1.ShowOpen
If CommonDialog1.FileName = "" Then Exit Sub
Rem 由绝对路径变相对路径 CurPath = App.Path AbsPath = CommonDialog1.FileName RPath = Replace(AbsPath, CurPath, vbNullString)
CommonDialog1.InitDir = App.Path CommonDialog1.FileName = "abcp"
'设置默认路径
CommonDialog1.DialogTitle = "请选择的模板文件名"
CommonDialog1.Filter = "位图文件(*.bmp)|*.bmp"
y = Sin(x * 3.1415926 / 180) Picture1.PSet (x, y) Next
Picture1.CurrentX = 10 Picture1.CurrentY = 0 Picture1.Font = "黑体" Picture1.FontSize = 20 Picture1.ForeColor = 16777215 Picture1.Print "ABCDF中国"
End Sub Rem 绘曲线图 Private Sub Command1_Click()
Dim x As Integer Dim y As Single
Picture1.AutoRedraw = True Picture1.Cls Picture1.Scale (0, 1.2)-(360, -1.2) Picture1.Line (0, 0)-(360, 0) For x = 0 To 360
VB图形和绘图操作

VB图形和绘图操作VB图形和绘图操作一、坐标:X值:是沿X轴的位置,窗体中最左端是缺省位置0Y值:是沿Y轴的位置,窗体中最上端是缺省位置0X,Y的值可以小于0,也可以大于容器宽度或高度二、坐标值的刻度:缺省使用缇(Twip)为测量单位. 「Twip」中文译为"缇",是一种和屏幕无关的长度单位,目的是为了让应用程序元素输出到不同设备时都能保持一致的计算方式。
打印机的一个点,即我们说的“磅”,相当于20个 Twips,一英吋相当于 1440个Twips, 一公分(厘米)则相当于567 Twips ,也就是说,如果屏幕上某个对象的长度是1440 Twip的话,将会印出一英吋来。
由于我们在屏幕上操作时会习惯用「像素」(也就是我们常说的屏幕分辨率DPI,系统可以设置各种DPI值),所以我们直接输入数字时必须再将「像素」换算成「Twip」。
当DPI设置为96时(系统默认值),1个像素=(1/96)*1440=15 Twip;当DPI设置为120时,1个像素=(1/120)*1440=12 Twip。
当DPI为96时,如果希望窗体的高是「400」像素,宽是「300」像素,属性的设定值就是:Height=400×15=6000 Twip,Width =300×15=4500 Twip.在VisualBasic应用程序中,屏幕(Screen)是一个对象。
其Width和Height属性以Twip为单位反映出屏幕的宽度和高度。
而TwipsPerPixelX和TwipsPerPixelY这两个属性只与硬件有关,而与屏幕上可设定的分辨率无关。
将Width除以TwipsPerPixelX可以计算出屏幕的水平分辨率(像素数),同样将Height除以TwipsPerPixelY 也可以计算出屏幕的垂直分辨率。
要想保持一个窗口或是控件的物理大小不变,只要计算出设计时的分辨率与实际运行时的分辨率的比值,然后根据这个比值来调节窗口和其中的控件的大小和相对位置,以及显示的字体尺寸,就可以保持同一应用程序的窗口在不同的系统下的物理外观(当然在不同尺寸的显示器上只能保持比例不变,物理大小还是不同的)。
VB.NET中的图形处理

中的图形处理的图形处理需要五个环节:第⼀:定义绘图对象Dim g As Graphics '定义绘图对象 g第⼆:定好绘图的区域g = Me.CreateGraphics '将窗体指定为绘画区域g = PictureBox1.creategraphics '将图⽚框指定为绘画区域第三:定义绘图⼯具绘图⼯具分三类,如果是画边型的就定义画笔 如果是填充区域型的就定义画刷 如果是画⽂字就需定义字刷对象举例如下:Dim p As New Pen(Color.Red, 3) '定义颜⾊是红⾊,宽度为3个单位的画笔⼯具Dim sb As New SolidBrush(Color.Purple) '定义颜⾊是紫⾊的画刷⼯具Dim f As New Font("⾪书", 8, FontStyle.Regular) '定义刷⽂字的对象第四:绘制图型绘制直线:g.DrawLine(画笔,起点,终点)绘制矩形:⽅法1: g.DrawRectangle(画笔, 左上⾓横坐标,左上⾓纵坐标, 宽度, ⾼度)⽅法2: g.DrawRectangle(画笔, 矩形区域对象)举例:pt1 = New Point(10, 20) '设置点对象s = New Size(60, 50) '确定⼤⼩对象的范围:宽 60 ⾼ 50rect = New Rectangle(pt1, s) '确定矩形区域的范围:左上⾓横坐标10,纵坐标20,宽60,⾼50 g.DrawRectangle(p, rect) '画矩形,或如下直接书写g.DrawRectangle(Pens.PaleGoldenrod, 10, 20, 60, 50)第五:释放资源p.Dispose() '释放画笔对象g.Dispose() '释放绘图对象 。
第二章VB.NET绘图基础

第⼆章绘图基础GDI+( Graphics Device Interface Plus)是 Windows操作系统⽤来执⾏绘画及其他相关图形操作的⼀套⼦系统,是由. Net Framework中的System.Drawing命名空间提供的⼀组通过C++类实现的应⽤程序编程接⼝,主要负责显⽰屏幕和打印设备输出的有关信息,它使开发⼈员可以利⽤ Windows内置的图形功能轻松地创建图形应⽤程序。
作为图形设备接⼝的GDI+使得应⽤开发⼈员在输出屏幕和打印机信息时⽆需考虑具体显⽰设备的细节,只需调⽤GDI+库输出的类的⼀些⽅法即可完成图形操作,真正的绘图⼯作由这些⽅法交给特定的设备驱动程序来完成,GDI+使得图形硬件和应⽤程序相互隔离从⽽使开发⼈员编写与设备⽆关的应⽤程序变得⾮常容易。
本教程将以 中的GDI+的技术来实现各种绘图功能。
GDI+绘图的流程1. 创建 Graphics对象;2. 创建画笔和画刷;3. 使⽤ Graph对象的绘图⽅法绘制图形输出⽂字等;4. 释放 Graphics对象和绘图对象所占⽤的系统资源。
'Form1_Paint是当窗体重绘制图形时候触发,如:窗体初始化、窗体改变⼤⼩,都会触发这个paint事件来完成图形的重画⼯作。
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint'创建 Graphics对象Dim g As Graphics = e.Graphics'创建画刷Dim b As SolidBrush = New SolidBrush(Color.Blue)'创建字体Dim f As Font = New Font("宋体", 15, FontStyle.Bold)'绘制⽂字g.DrawString("Hello,World!", f, b, 30, 60)'释放 Graphics对象和绘图对象所占⽤的系统资源f.Dispose()b.Dispose()g.Dispose()End Sub刨建 Graphics对象在中⽤GDI+创建绘图,必须先创建 Graphics对象。
vb画图板 (3)

vb画图板
在VB中实现画图板可以通过以下步骤:
1. 创建一个新的窗体,并设置窗体的标题和大小。
2. 在窗体上添加一个Panel控件,作为画布。
3. 添加鼠标按下、移动和松开的事件处理程序,用于绘制图形。
4. 在鼠标按下事件处理程序中,获取鼠标的起点坐标,并创建一个Graphics对象来绘制图形。
5. 在鼠标移动事件处理程序中,获取鼠标的当前坐标,并根据不同的绘图工具(例如画线、矩形、圆形等)来绘制图形。
6. 在鼠标松开事件处理程序中,释放Graphics对象,并更新画布。
下面是一个简单的示例代码,实现了在画布上绘制直线和矩形的功能:
```vb
Public Class Form1
Dim startPt As Point
Dim endPt As Point
Dim drawShape As String
Private Sub Panel1_MouseDown(sender As Object, e As MouseEventArgs) Handles Panel1.MouseDown
startPt = e.Location
End Sub
Private Sub Panel1_MouseMove(sender As Object, e As MouseEventArgs) Handles Panel1.MouseMove
If e.Button = MouseButtons.Left Then
endPt = e.Location
Select Case drawShape
Case \。
划曲线VB,NET

在实际应用中,很多图形是由点和线构成的,的Graphics 类提供了很多画线图的方法,我们可以使用这些重载了的方法组合出丰富的图案来。
下面我们就来了解下这些绘线图的方法。
一、DrawLine 方法该方法绘制一条连接由坐标对指定的两个点的线条,所以我们需要指定这两个点的坐标,如下所示:DrawLine(pen,x1,y1,x2,y2)或者DrawLine(pen,Point1, Point2)下面示例将在PictureBox控件表面绘制一条直线:Dim g As Graphics = Me.PictureBox1.CreateGraphicsDim mpen As New Pen(Color.Red)g.DrawLine(mpen, 0, 80, 0, 160)也可以使用如下代码来实现一样的效果:Dim g As Graphics = Me.PictureBox1.CreateGraphicsDim mpen As New Pen(Color.Red)Dim p1 As Point = New Point(0, 80)Dim p2 As Point = New Point(0, 160)g.DrawLine(mpen, p1, p2)当然,我们也可以使用DrawLine方法画出更加复杂的图形,如下代码所示:Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim g As Graphics = Me.PictureBox1.CreateGraphicsDim mpen As New Pen(Color.Red)Dim i As IntegerFor i = 0 To 160 Step 10g.DrawLine(mpen, 0, 80, i, 0)g.DrawLine(mpen, 0, 80, i, 160)g.DrawLine(mpen, 160, 80, 160 - i, 160)g.DrawLine(mpen, 160, 80, 160 - i, 0)NextEnd Sub运行后效果如下图一所示:图一:使用DrawLine方法画复杂图形二、DrawLines 方法该方法绘制一系列连接一组Point 结构的线段,它按顺序把每个点都连接起来,构成一段曲线,DrawLines的形式如下:DrawLines(Pen, Point())Point()参数就是一个由一系列的点构成的数组。
VB开简易的画图板

VB开简易的画图板功能:VB开简易的画图板,使其具有画图板的各块功能VB 界面如下:图二Option ExplicitDim i, drawact As IntegerDim canline, canpen, canrubber, canenlarge, canellipse, canrectangle, canflood, canget, canbrush As Boolean Dim x0, y0, xnow, ynow, radius0, radius As Single Dim Filename As StringPrivate Sub Form_Load()' 初始化图片框的大小和AutoRedraw属性和窗体的标题Picture3.Width = Picture1.WidthPicture3.Height = Picture1.HeightPicture1.AutoRedraw = TruePicture3.AutoRedraw = TruePicture1.Picture = LoadPicture()Filename = "Untitled"Form1.Caption = FilenameEnd SubPrivate Sub Label2_Click(Index As Integer)' 选择某项操作时,将其下凹看上去像是被按下去的 For i = 0 To Label2.Count - 1Label2(i).BorderStyle = 0NextLabel2(Index).BorderStyle = 1drawact = IndexEnd SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)' 当鼠标按下时,对于选择不同的工具执行不同的操作 Select Case drawact' 橡皮Case 0canrubber = TruePicture1.CurrentX = X: Picture1.CurrentY = YPicture1.DrawMode = 13Picture1.DrawWidth = 7' 直线Case 1canline = Truex0 = X: y0 = Yxnow = X: ynow = YPicture1.DrawMode = 7Picture1.DrawWidth = 1' 矩形Case 2canrectangle = Truex0 = X: y0 = Yxnow = X: ynow = YPicture1.DrawMode = 7Picture1.DrawWidth = 2' 椭圆Case 3canellipse = Truex0 = X: y0 = Yxnow = X: ynow = YPicture1.DrawMode = 7Picture1.DrawWidth = 1' 铅笔Case 4canpen = TruePicture1.CurrentX = X: Picture1.CurrentY = YPicture1.DrawMode = 13' 刷子Case 5canbrush = TruePicture1.CurrentX = X: Picture1.CurrentY = YPicture1.DrawMode = 13Picture1.DrawWidth = 5' 油漆桶Case 6Picture1.BackColor = Label1.BackColor' 放大镜Case 7canenlarge = Truex0 = X: y0 = Yxnow = X: ynow = YPicture1.DrawMode = 7Picture1.DrawWidth = 1End SelectEnd SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)' 在标签中显示当前鼠标在画板中的位置Label3.Caption = "X: " + CStr(X) + Chr(13) + Chr(10) + "Y: " + CStr(Y)' 当鼠标移动时,对于选择不同的工具执行不同的操作 Select Case drawact' 橡皮Case 0If canrubber ThenPicture1.Line -(X, Y), vbWhiteEnd If' 直线Case 1If canline ThenPicture1.Line (x0, y0)-(xnow, ynow), Not (Picture1.ForeColor)Picture1.Line (x0, y0)-(X, Y), Not (Picture1.ForeColor)xnow = X: ynow = YEnd If' 矩形Case 2If canrectangle ThenPicture1.Line (x0, y0)-(xnow, ynow), Not (Picture1.ForeColor), BPicture1.Line (x0, y0)-(X, Y), Not (Picture1.ForeColor), Bxnow = X: ynow = YEnd If' 椭圆Case 3radius0 = Sqr((xnow - x0) ^ 2 + (ynow - y0) ^ 2)radius = Sqr((X - x0) ^ 2 + (Y - y0) ^ 2)If canellipse ThenPicture1.Circle (x0, y0), radius0, Not (Picture1.ForeColor)Picture1.Circle (x0, y0), radius, Not (Picture1.ForeColor)xnow = X: ynow = YEnd If' 铅笔Case 4If canpen ThenPicture1.Line -(X, Y), Picture1.ForeColorEnd If' 刷子Case 5If canbrush ThenPicture1.Line -(X, Y), Picture1.ForeColorEnd If' 油漆桶Case 6' do nothing' 放大镜Case 7If canenlarge ThenPicture1.Line (x0, y0)-(xnow, ynow), Not (Picture1.ForeColor), BPicture1.Line (x0, y0)-(X, Y), Not (Picture1.ForeColor), Bxnow = X: ynow = YEnd IfEnd SelectEnd SubPrivate Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)' 当鼠标放开时,对于选择不同的工具执行不同的操作 Select Case drawactCase 1canline = FalsePicture1.Line (x0, y0)-(xnow, ynow)Picture1.DrawMode = 13Picture1.Line (x0, y0)-(xnow, ynow), Picture1.ForeColorCase 2canrectangle = FalsePicture1.Line (x0, y0)-(xnow, ynow), Not (Picture1.ForeColor), BPicture1.DrawMode = 13Picture1.Line (x0, y0)-(xnow, ynow), Picture1.ForeColor, BCase 3canellipse = FalsePicture1.Circle (x0, y0), radius, Not (Picture1.ForeColor)Picture1.DrawMode = 13Picture1.Circle (x0, y0), radius, Picture1.ForeColorCase 4canpen = FalseCase 5canbrush = FalseCase 7canenlarge = FalsePicture1.Line (x0, y0)-(xnow, ynow), Not (Picture1.ForeColor), BIf (xnow - x0) * (ynow - y0) <> 0 ThenPicture3.PaintPicture Picture1.Image, 0, 0, Picture3.Width, Picture3.Height, x0, y0, (xnow - x0), (ynow - y0)Picture1.PaintPicture Picture3.Image, 0, 0End IfEnd SelectEnd SubPrivate Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)' 通过point方法拾取颜色,并设定为前景色Picture1.ForeColor = Picture2.Point(X, Y)Label1.BackColor = Picture2.Point(X, Y)End SubPrivate Sub MNew_Click(Index As Integer)' 新建一个图画Picture1.Picture = LoadPicture()Filename = "Untitled"Form1.Caption = FilenameEnd SubPrivate Sub MSave_Click()' 设置过滤器CommonDialog1.Filter = "bmp文件|*.bmp|所有文件|*.*"' 设置缺省过滤器CommonDialog1.FilterIndex = 2If Filename = "Untitled" Then'如果文件尚未命名,则显示保存对话框CommonDialog1.ShowSaveFilename = CommonDialog1.FilenameIf Filename <> "" ThenSavePicture Picture1.Image, FilenameEnd IfElse'否则直接保存SavePicture Picture1.Image, FilenameEnd IfForm1.Caption = FilenameEnd SubPrivate Sub MExit_Click(Index As Integer)' 退出程序EndEnd Sub1.电脑上必须要先Microsoft Visual Studio(也就是VB软件)2.用VB软件设置窗口如上(图二)3.各个Command对应的VB代码如下:运行VB时,需要先打开SolidWorks一个新零件窗口,然后运行VB,点击界面按钮即可运行结果:完美实现对应功能。
VB.NET实验报告(五)

xx 大学本科生实验报告(五)姓名:XXX学院: 计算机科学学院专业: 信息管理与信息系统班级:2011 级信管班实验课程名称:程序设计实验日期:2012 年 5 月18 日指导教师及职称: XXX实验成绩:开课时间:2012-2013 学年第二学期实验管理中心印制实验题目图形应用程序开发小组合作2.掌握图形坐标系的变换方法。
3.掌握GDI+中的绘图工具。
4.掌握常用几何图形绘制方法。
5.掌握简单艺术图形的绘制方法。
6.了解GDI+的图像处理功能。
二.实验环境Microsoft Visual Studio 2008三、实验内容与步骤一、利用方法DrawEllipse在窗体上绘制艺术图案。
构造图案的算法为:把一个半径为r的圆周分为n份,以这个n个等分点为圆心,r1为半径绘制n个圆<径。
(1)进入应用程序的后,根据题目要求设计好窗体;(2)编辑代码,进行代码的调试,主要代码如下所示:# Buttonl ■ r dkkIn二巾广乜oTs teri. I ithD)gra.vkJi^亓5宅"< B:r#rieg:L'E-^C「氏2"! 玄EaHl_L ~~Suh BuK I onl_□ i cb'£B>¥al “證加A? S JTJ I H- Otjert. t Xs 呂”I R EvAfli^rci'l Kaidh. BicU i,jiit.CLidkI in £J L I Gruphi os 二IT &. MAaphi cs Um > Al f ML- lev P<JifE«L«>r.filllt) lini r M)S KP^I-= 10Q Hin JL ill I A I E現q* = 旳Jhn t 上^LKLtLe = 3M / i(Trmil H1^T TITII fflrn 勿1"1”1 f ir i - 1 r* nfin x 血9 1 (t > i)■in y hi Sin^il« r * $i n *= i.]a - E- 60T ■ y ■石Dr祚211曙応5# N y,辺GDIp SLEP41& 0 耳Diurps'ii-e [)- EW討-Ini Q4cc(3)实验结果如下图所示:□ syll- 1心|回|^3HUV J I^B二、设计应用练习,练习基本绘图指令。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
graphic 简单的画图程序[vb]Public Class Form1Dim DrawState As BooleanDim PreX As SingleDim PreY As SingleDim eP As New Pen(Color.Black, 3) ' 构造黑色画笔,并将它赋给对象变量eP'Dim g As Graphics = Me.CreateGraphics ' 在窗体上构造一块画布,并将它赋给对象变量gPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load' 将DrawState初始化为False,表示提笔DrawState = FalseEnd SubPrivate Sub Form1_MouseDown(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.MouseEventArgs) Handles Me.MouseDown' 当鼠标左键被按下时,把DrawState设为True,表示落笔开始画线Dim g As Graphics = Me.CreateGraphicsIf e.Button = Windows.Forms.MouseButtons.Left ThenDrawState = True ' 设置画图状态PreX = e.X ' PreX和PreY保存了线条的起点。
PreY = e.YEnd If' 当按住鼠标右键时,画一个直径为50的圆If e.Button = Windows.Forms.MouseButtons.Right Theng.DrawEllipse(eP, e.X - 25, e.Y - 25, 100, 100)End IfEnd SubPrivate Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove' 当鼠标移动时,如果处于画线状态,则在(PreX,PreY)与(X,Y)之间画一条直线Dim g As Graphics = Me.CreateGraphicsIf DrawState = True Theng.DrawLine(eP, PreX, PreY, e.X, e.Y)PreX = e.XPreY = e.YEnd IfEnd SubPrivate Sub Form1_MouseUp(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.MouseEventArgs) Handles Me.MouseUp' 当释放鼠标左键时,解除画线状态If e.Button = Windows.Forms.MouseButtons.Left ThenDrawState = FalseEnd IfEnd SubEnd ClassPublic Class Form1Dim DrawState As BooleanDim PreX As SingleDim PreY As SingleDim eP As New Pen(Color.Black, 3) ' 构造黑色画笔,并将它赋给对象变量eP'Dim g As Graphics = Me.CreateGraphics ' 在窗体上构造一块画布,并将它赋给对象变量gPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load' 将DrawState初始化为False,表示提笔DrawState = FalseEnd SubPrivate Sub Form1_MouseDown(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.MouseEventArgs) Handles Me.MouseDown' 当鼠标左键被按下时,把DrawState设为True,表示落笔开始画线Dim g As Graphics = Me.CreateGraphicsIf e.Button = Windows.Forms.MouseButtons.Left ThenDrawState = True ' 设置画图状态PreX = e.X ' PreX和PreY保存了线条的起点。
PreY = e.YEnd If' 当按住鼠标右键时,画一个直径为50的圆If e.Button = Windows.Forms.MouseButtons.Right Theng.DrawEllipse(eP, e.X - 25, e.Y - 25, 100, 100)End IfEnd SubPrivate Sub Form1_MouseMove(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.MouseEventArgs) Handles Me.MouseMove' 当鼠标移动时,如果处于画线状态,则在(PreX,PreY)与(X,Y)之间画一条直线Dim g As Graphics = Me.CreateGraphicsIf DrawState = True Theng.DrawLine(eP, PreX, PreY, e.X, e.Y)PreX = e.XPreY = e.YEnd IfEnd SubPrivate Sub Form1_MouseUp(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.MouseEventArgs) Handles Me.MouseUp' 当释放鼠标左键时,解除画线状态If e.Button = Windows.Forms.MouseButtons.Left ThenDrawState = FalseEnd IfEnd SubEnd Class改法1[vb]Public Class Form1Dim DrawState As BooleanDim PreX As SingleDim PreY As SingleDim eP As New Pen(Color.Black, 3) ' 构造黑色画笔,并将它赋给对象变量ePDim g As Graphics ' 在窗体上构造一块画布,并将它赋给对象变量gPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load' 将DrawState初始化为False,表示提笔DrawState = FalseEnd SubPrivate Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown' 当鼠标左键被按下时,把DrawState设为True,表示落笔开始画线'Dim g As Graphics = Me.CreateGraphicsIf e.Button = Windows.Forms.MouseButtons.Left ThenDrawState = True ' 设置画图状态PreX = e.X ' PreX和PreY保存了线条的起点。
PreY = e.YEnd If' 当按住鼠标右键时,画一个直径为50的圆If e.Button = Windows.Forms.MouseButtons.Right Theng.DrawEllipse(eP, e.X - 25, e.Y - 25, 100, 100)End IfEnd SubPrivate Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove' 当鼠标移动时,如果处于画线状态,则在(PreX,PreY)与(X,Y)之间画一条直线'Dim g As Graphics = Me.CreateGraphicsIf DrawState = True Theng.DrawLine(eP, PreX, PreY, e.X, e.Y)PreX = e.XPreY = e.YEnd IfEnd SubPrivate Sub Form1_MouseUp(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.MouseEventArgs) Handles Me.MouseUp' 当释放鼠标左键时,解除画线状态If e.Button = Windows.Forms.MouseButtons.Left ThenDrawState = FalseEnd IfEnd SubPrivate Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resizeg = Me.CreateGraphicsEnd SubEnd ClassPublic Class Form1Dim DrawState As BooleanDim PreX As SingleDim PreY As SingleDim eP As New Pen(Color.Black, 3) ' 构造黑色画笔,并将它赋给对象变量ePDim g As Graphics ' 在窗体上构造一块画布,并将它赋给对象变量gPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load' 将DrawState初始化为False,表示提笔DrawState = FalseEnd SubPrivate Sub Form1_MouseDown(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.MouseEventArgs) Handles Me.MouseDown' 当鼠标左键被按下时,把DrawState设为True,表示落笔开始画线'Dim g As Graphics = Me.CreateGraphicsIf e.Button = Windows.Forms.MouseButtons.Left ThenDrawState = True ' 设置画图状态PreX = e.X ' PreX和PreY保存了线条的起点。