【VB开源代码栏目提醒】:网学会员为广大网友收集整理了,程序错误18 - 毕业设计,希望对大家有所帮助!
程序设计重常见的错误分以下三种: ??编译错误比如送货的人没有穿鞋没拿货就出发了这种不合规则的做法在整个过程还没开始我们就知道错了就好比是编译错误 ??逻辑错误比如这个人在行进中路线发生错误比如在某个岔道口选错了方向结果走到了其它村子没有完成任务这就是处理逻辑错误。
??运行错误比如遵守了规则并且所有路线都是对的但没想到某条路被洪水冲断了这就是运行异常错误。
1 1语法和编译错误 –不正确地书写
代码会造成编译错误。
例如输入了错误的关键字遗漏了某些必需的标点符号使用了For语句而没有Next语句与之对应调用函数没有提供必要的参数等有的错误语句直接在
代码窗口中以红色警告色显示有的在编译应用程序时自动检测并显示错误消息。
总之这些错误在
VB开发环境中能自动检测出来。
2 2逻辑错误 –从语法的角度看
代码是正确有效的运行过程也是顺利的但是产生了不正确的结果其原因就是应用程序的处理逻辑出现了错误。
–如何检验逻辑错误可以采用人工检查
代码或测试程序的方法 –测试就是运行应用程序将结果和预期目标进行比较的一种动态检查手段。
–调试对于含有逻辑错误的程序需要进行调试
VB开发环境提供了功能强大使用方便的调试工具能帮助我们了解程序运行的整个过程和每个时刻的状态从而迅速定位错误。
3 –应用程序运行期间当一个语句执行操作时发生错误的事件就会产生运行异常错误。
比如硬件问题、用户意料之外的数组下标越界或读取未准备好的软盘文件等。
这些错误如果程序中没有任何预防措施会使程序突然异常终止而无法恢复运行。
–为避免异常错误的出现在
VB程序中可以用错误处理语句截获并中断错误转而执行正确的操作截获错误也称捕获错误。
不管是多么优秀的程序员逻辑错误在程序编制过程 中都是不可避免的。
熟练使用调试工具可以加快程 序开发速度 ??设置程序运行断点在猜测可能发生错误的过程中设置断点当执行到断点所在的语句时程序会中断运行暂停。
合理执行程序确保进入该过程然后进行单步跟踪 ??跟踪程序运行一步一步控制程序语句的执行从而找到
问题所在的语句 ??监视变量值对关键变量进行实时的监视观察变量值的变化是否正常 ??添加调试语句比如使用MsgBox或Debug对象输出关键结果增加或屏蔽使用注释一些语句 两种方法设置断点 ??首先将光标移到要设置断点的
代码行然后直接按下“F9”键或者执行【调试】→【切换断点】菜单项与之等效的方式在右键弹出菜单和“调试工具栏”中可以找到 ??或者在
代码窗口要设置断点的
代码行左边的灰白空白区单击鼠标 运行程序 ??执行到断点语句时程序会自动暂停 ??但是如果程序没有按照预想的暂停说明在该语句之前处理逻辑就已经发生了错误 当前语句 指示器 断点指示器 当前执行 语句 断点所在 语句 断点只是暂停
程序仍然可以正常继续运行 ??中断模式下只要按下“F5”键或单击工具栏中的“继续”单箭头按钮或者执行【运行】→【继续】菜单项就能继续运行。
??单击工具栏中的“结束”正方块按钮或按下【运行】→【结束】菜单项结束程序。
??有时需要一步一步跟踪程序
代码才能发现错误原因。
有两种跟踪方式 –逐语句F8执行每一条
代码行遇到自定义的子过程或函数也进入到过程或函数的内部。
–逐过程ShiftF8调用子过程或函数作为一个整体
代码行运行不进入子过程内部 ??跟踪时程序仍然处于中断状态可以随意增加或取消断点或改变运行路径或改变变量值 ??鼠标直接提示将鼠标直接停留在变量的位置 ??在立即窗口中打印在立即窗口中输入xx的值可以直接显示在该窗口中 ??设置变量监视将关键变量添加到监视窗口中可以随时看到其变化 ??设置变量中断模式在变量满足某种条件值时或变量发生改变时中断程序 ??修改变量值在监视窗口中直接进行编辑 / ??只是显示表达式的值监视窗口一直打开并同步显示 ??设置监视值为真时程序中断如输入表达式为x10 ??设置监视值改变时程序中断 指定表达式 监视范围 ??立即窗口”是另外一种调试方式在该窗口中能计算任何有效的表达式并输出结果。
在当前活动窗体或模块作用域内的变量都可以用在表达式中 “”等效于“Print”输出语句。
??修改程序执行路线比如希望程序从某指定地方开始执行不需要关闭程序重来。
方法 –设置下一条要执行的语句在中断模式下将光标移到希望要执行的
代码行选择【调试】→【设置下一条语句】菜单命令然后按下“F8”键做单步跟踪或“F5”键继续运行这就意味着只要将光标移到当前语句之前的
代码行就可以将这之间的操作悔过从来了。
??修改变量值错误的值当然得不到正确的结果倘若给一个正确的值后果会怎样折半排错。
方法 –编辑变量值如上所述的方法可以悔过一些操作但变量的内容不可能也回到过去所以我们可以在需要的时候直接编辑变量放入我们关心的或符合处理逻辑的数据然后再测试逻辑是否正确。
在“监视窗口”中点击变量的值编辑。
??一个程序在运行期间可能会遇到一些非预期的或不正常的错误部分异常错误可以在
设计程序时考虑到并采取预防措施从而避免程序的异常终止。
预防的方法 –On Error语句时刻自动捕获错误并启动错误处理 –Resume语句在错误处理过程中决定处理
方案如是恢复对原有错误语句的运行还是忽略进入下一行
代码运行。
在预计会出错的过程中使用该语句: ??On Error GoTo line 如果发生一个运行错误则执行顺序从发生错误的语句直接跳转到line所指定的
代码。
line之后的
代码段通常是进行错误处理的程序 ??On Error Resume Next如果发生一个运行错误则执行顺序从发生错误的语句跳转到该语句的下一条语句忽略错误。
??On Error GoTo 0取消当前过程中所有的错误处理程序执行该语句后过程中所有后续的其它On Error语句都失效。
On Error GoTo line line:是错误处理段的标号 在该标号之前应使用Exit Sub语句退出过程否则会自动顺序执行下去。
Sub OnErrorStatementDemo Dim res As Integer On Error GoTo ErrorHandler FileCopy a:test.txt c:a.txt ……. Exit Sub ErrorHandler: if Err.Number 76 ??路径未找到 resMsgBox“请确认插入了正确的软盘”vbRetryCancel if res4 then Resume End if …… End Sub On Error Resume Next 忽略错误不进行任何处理 On Error Resume Next Set xlApp CreateObjectexcel.application If Err.Number 440 Or Err.Number 432 Then Msg “创建对象失败 MsgBox Msg Err.Clear End If On Error Goto 0 取消当前过程中设置的错误捕获陷阱执行该 语句后所有On Error语句都失效但不影响 该语句之前的错误捕获 Resume ??Resume 返回到出错语句处执行重新尝试在错误有纠正的机会时使用 ??Resume Next 返回到出错语句的下一条语句遇到不可纠正能够忽略的错误时使用 ??Resume Line 返回到程序中指定的标号处继续执行 Err Err对象可以随时直接访问不需要程序来创建 该对象。
其属性有 ??Number错误号0-512系统使用可以自定义比如600则赋值vbObjectError 600 ??Description错误描述可以自定义 ??Source引发错误的对象名或应用程序名 Err ??Clear方法 –清除错误对象 –如果使用了退出过程或Resume语句或On Error语句后 会自动执行该语句 Err ??Raise方法 Err.Raise number source description helpfile helpcontext 产生一个运行错误 可以手工模拟程序运行出错 用于测试错误处理程序 Err.Raise 55 ??引发文件已经打开错误 ‘引发一个自定义错误 Function TestNameCurrentName NewName If InstrNewName bob Then Err.Raise vbObjectError 513 “MyProj.MyObject” “名字中不能出 现“bob c:MyProjHelp1.Hlp End If End Function System Object ??App 当前的应用程序 ??Screen 屏幕 ??Printer 打印机 ??Clipboard 剪贴板 ??Debug 立即窗口 ??Err 错误
系统对象不需要在程序中定义就可使用 Screen Screen对象是指整个Windows桌面可取得屏幕的有关信息如屏幕尺寸、可用字体等 ??ActiveControl 属性获得当前输入焦点的控件 ??Height Width 属性屏幕宽度和高度只读 ??MouseIcon 属性自定义鼠标图标 ??MousePointer 属性鼠标指针类型 ??FontCount 属性可用字体数 ??Fonts 属性可用字体名
列表Fonts1…. 举例使窗体一运行就在屏幕中央 Clipboard 剪贴板对象没有任何属性及事件但提供方法 访问系统剪贴板 ??Clear方法清除剪贴板内容 ??GetText方法取剪贴板文本内容 ??GetData方法取剪贴板图形内容 ??SetText 方法将文本放到剪贴板上 ??SetData方法将图形放到剪贴板上 ??GetFormat方法确定剪贴板上的数据格式 举例编辑菜单中的“粘贴”的可用性 Printer 打印步骤: ??如果要使用缺省打印机以外的打印机打印需在 Printers 集合中指定打印机给 Printer 对象。
不指定则为默认打印机。
??将文本和图形装入 Printer 对象。
??用 NewPage 和 EndDoc 方法打印 Printer 对象的内容。
??用KillDoc方法可结束当前的打印
作业。
Printer 属性 ??Copies打印拷贝的数目 ??CurrentX CurrentY打印的行数和列数 ??DrawStyle指定图形的线型 ??DrawWidth指定所划线的宽度 ??FontFontName FontSizeFontBold字体信息 ??Height Width当前打印页的高度和宽度 ??Zoom打印输出的缩放因子 ??Orientation打印输出模式纵向或横向 Printer 方法 ??Circle Line画圆、椭圆、圆弧 ??NewPage将换行符输出到打印机 ??Print打印数据或文本 ??PaintPicture绘制图形图象文件 ??Pset打印输出圆形点 ??EndDoc终止
文档打印释放句柄 ??KillDoc从打印队列中清楚当前打印
文档 方法 Printer.CurrentX 1000 Printer.CurrentY 1000 Printer.Print “ How are you” Printer.Print 2 Printer.EndDoc 方法 Name “Tomson” Year 2000 Printer.Print Name Printer.Print Year Printer.Print cmdSave.Height 18 方法 Printer.Print “He has ” 3 “ Children” 使用分号字符是相连打印的 Printer.Print “He has” 3 “Children” 使用逗号字符是分打印区打印的一个打印区是14列宽 方法 Pic1.Picture LoadPicture“1.bmp” Printer.PaintPicture Pic1.Picture Pic1.Left _ Pic1.Top Pic1.Width Pic1.Height vbMergeCopy if MsgBox“Print it now” vbYesNo vbNo then Printer.KillDoc else Printer.EndDoc end if