《VBNET程序设计实用教程5.ppt》由会员分享,可在线阅读,更多相关《VBNET程序设计实用教程5.ppt(66页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、VB.NETVB.NET清华大学出版社清华大学出版社VB.NET程序设计实用教程程序设计实用教程第5章 程序调试和异常处理本章任务本章任务 具有非结构化异常处理的简单计算器具有非结构化异常处理的简单计算器 具有结构化异常处理的简单计算器具有结构化异常处理的简单计算器本章主要内容本章主要内容在在VB.NET中使用调试工具调试中使用调试工具调试程序的方法程序的方法VB.NET的的3种工作模式种工作模式VB.NET中的常用调试窗口中的常用调试窗口结构化异常处理语句结构化异常处理语句(TryCatchFinallyEnd Try语句)的功能与使用语句)的功能与使用非结构化异常处理语句(非结构化异常处理
2、语句(On Error语语句和句和Resume语句)的功能与使用语句)的功能与使用主主要要内内容容5.1 5.1 程序的调试程序的调试 程序中的错误可分为程序中的错误可分为语法错误、逻辑错误语法错误、逻辑错误或或运行错误运行错误三三种类型,系统会在语法错误的下面加上波浪线,比较容易种类型,系统会在语法错误的下面加上波浪线,比较容易查找和排除,而逻辑错误或运行错误排除则比较困难。当查找和排除,而逻辑错误或运行错误排除则比较困难。当程序中出现了程序中出现了逻辑错误逻辑错误或或运行错误运行错误而又难以解决时,就应而又难以解决时,就应该借助于该借助于程序调试工具程序调试工具对程序进行调试。所谓对程序进
3、行调试。所谓程序调试程序调试就就是在应用程序中是在应用程序中查找查找并并修改错误修改错误的过程。通过程序的调试,的过程。通过程序的调试,可以纠正程序中的错误。为了更正程序中发生的不同错误,可以纠正程序中的错误。为了更正程序中发生的不同错误,VB.NETVB.NET提供了多种调试工具,如提供了多种调试工具,如设置断点、插入观察变量、设置断点、插入观察变量、逐行执行逐行执行和和过程跟踪、各种调试窗口过程跟踪、各种调试窗口等。等。5.1.1 VB.NET5.1.1 VB.NET的的3 3种工作模式种工作模式1 1设设 计计 模模 式式 1 2运运 行行 模模 式式 1 3中中 断断 模模 式式 5.
4、1.1 VB.NET5.1.1 VB.NET的的3 3种工作模式种工作模式 (1 1)设计模式)设计模式 在设计模式下,用户可以设计项目。使用在设计模式下,用户可以设计项目。使用VB.NET 新建一个项后,系统将自动进入设计模式,此新建一个项后,系统将自动进入设计模式,此时,时,IDE的标题栏将显示的标题栏将显示“设计设计”字样。处于设计字样。处于设计模式时,可进行应用程序的窗体设计、为窗体添加控模式时,可进行应用程序的窗体设计、为窗体添加控件、设置对象属性、编写程序代码等操作。在设计模件、设置对象属性、编写程序代码等操作。在设计模式下可以为程序设置断点。式下可以为程序设置断点。5.1.1 V
5、B.NET5.1.1 VB.NET的的3 3种工作模式种工作模式 (2)运行模式)运行模式 项目设计完之后,运行项目,系统就进入了运行模式。项目设计完之后,运行项目,系统就进入了运行模式。此时,在此时,在IDE的标题栏上将显示的标题栏上将显示“运行运行”字样。处字样。处于运行模式时,程序设计人员可以与程序交互、可以于运行模式时,程序设计人员可以与程序交互、可以查阅程序代码,但不能修改程序代码。执行查阅程序代码,但不能修改程序代码。执行【调试调试】【停止调试停止调试】命令,或单击工具栏上的命令,或单击工具栏上的“停止调试停止调试”按钮图标按钮图标“”就可以中止程序运行。就可以中止程序运行。5.1
6、.1 VB.NET5.1.1 VB.NET的的3 3种工作模式种工作模式 (3)中断模式)中断模式 当系统处于运行模式时,单击工具栏中的当系统处于运行模式时,单击工具栏中的“全部中断全部中断”按钮按钮“”,或执行,或执行【调试调试】【全部中断全部中断】命命令,都将暂停程序的运行,进入中断模式。此时,在令,都将暂停程序的运行,进入中断模式。此时,在IDE的标题栏中将显示的标题栏中将显示“中断中断”字样。中断模式主字样。中断模式主要用于程序调试和排除错误,可以查看代码,也可编要用于程序调试和排除错误,可以查看代码,也可编辑代码。同时,可以检查或修改数据。当想结束中断辑代码。同时,可以检查或修改数据
7、。当想结束中断重新从中断处继续执行程序时,只需单击重新从中断处继续执行程序时,只需单击“继续继续”按按钮钮“”即可。如果程序中设有断点或代码中含有即可。如果程序中设有断点或代码中含有Stop语句,则程序运行到断点或语句,则程序运行到断点或Stop语句处也将进语句处也将进入中断模式。入中断模式。5.1.2 5.1.2 使用调试工具调试程序使用调试工具调试程序 为为了了方方便便用用户户对对程程序序进进行行调调试试,VB.NET提提供供了了一一组组调调试试工工具具。可可通通过过“调调试试”菜菜单单和和“调调试试”工工具具栏栏来来调调用用这这些些调调试试工工具具,“调调试试”菜菜单单如如图图5-1所所
8、示示,“调调试试”工工具具栏栏如如图图5-2所所示示。当当调调试试工工具具栏栏没没有有出出现现时时,可可执执行行【视视图图】【工具栏工具栏】【调试调试】使之出现。使之出现。5.1.2 5.1.2 使用调试工具调试程序使用调试工具调试程序 1设置和删除断点设置和删除断点 断点是应用程序暂时停止执行的位置,也是让应断点是应用程序暂时停止执行的位置,也是让应用程序进入中断模式的地方。在程序设计中,可以在用程序进入中断模式的地方。在程序设计中,可以在中断模式和设计模式下设置和删除断点。在调试程序中断模式和设计模式下设置和删除断点。在调试程序时,按照程序的功能,可在怀疑有错误的语句处设置时,按照程序的功
9、能,可在怀疑有错误的语句处设置断点,这样,有利于测试程序的功能和发现程序的逻断点,这样,有利于测试程序的功能和发现程序的逻辑错误。辑错误。设置断点的方法主要有以下几种:设置断点的方法主要有以下几种:在代码窗口中,单击要设置断点的那一行代码,在代码窗口中,单击要设置断点的那一行代码,然后按然后按F9键;键;在代码窗口中,在要设置断点的那一行代码行上,在代码窗口中,在要设置断点的那一行代码行上,单击鼠标右键并选择单击鼠标右键并选择“插入断点插入断点”命令;命令;在代码窗口中,在要设置断点的那一行代码行的在代码窗口中,在要设置断点的那一行代码行的左边界上的竖条上单击。左边界上的竖条上单击。5.1.2
10、 5.1.2 使用调试工具调试程序使用调试工具调试程序 被设置成断点的代码行显示为红色,并在其左边显示被设置成断点的代码行显示为红色,并在其左边显示一个红点,如图一个红点,如图5-3所示。若要删除一个断点,只需所示。若要删除一个断点,只需重复上面步骤即可。重复上面步骤即可。5.1.2 5.1.2 使用调试工具调试程序使用调试工具调试程序2跟踪程序的执行跟踪程序的执行 在在VB.NET中,提供了中,提供了“逐语句逐语句”、“逐过程逐过程”、“跳出跳出”等好等好几种跟踪程序执行的方式。几种跟踪程序执行的方式。逐语句执行:逐语句执行:“逐语句逐语句”执行方式是一次执行一条语句,这种方执行方式是一次执
11、行一条语句,这种方式又称为单步执行。每执行一条语句之后,程序设计人员可以式又称为单步执行。每执行一条语句之后,程序设计人员可以使用使用“即时即时”窗口、窗口、“局部变量局部变量”窗口或窗口或“巡视巡视”窗口,来查窗口,来查看语句的执行结果,借此分析程序中存在的问题。看语句的执行结果,借此分析程序中存在的问题。逐过程执行:逐过程执行:“逐过程逐过程”执行与逐语句执行类似,差别在于当前执行与逐语句执行类似,差别在于当前语句如果包含过程调用,语句如果包含过程调用,“逐语句逐语句”将进入被调用过程,而将进入被调用过程,而“逐过程逐过程”则把整个被调用过程当作一条语句来执行。则把整个被调用过程当作一条语
12、句来执行。跳出:跳出:“跳出跳出”命令是连续执行当前过程的剩余语句部分,并在命令是连续执行当前过程的剩余语句部分,并在调用该过程的下一个语句行处中断执行。调用该过程的下一个语句行处中断执行。以上三种命令均可以通过执行以上三种命令均可以通过执行【调试调试】菜单中的相应菜单命令或菜单中的相应菜单命令或单击单击【调试调试】工具栏上的相应按钮来实现。工具栏上的相应按钮来实现。5.1.3 5.1.3 常用的调试窗口常用的调试窗口 在调试应用程序时,经常要分析应用程序的程序段或语句在调试应用程序时,经常要分析应用程序的程序段或语句的运行结果,并希望能够看到变量、属性、表达式等值的的运行结果,并希望能够看到
13、变量、属性、表达式等值的变化,以便找出错误所在处。为便于观察程序块或语句的变化,以便找出错误所在处。为便于观察程序块或语句的运行结果,在运行结果,在VB.NET提供了很多调试窗口,充分利用提供了很多调试窗口,充分利用这些窗口,可以提高程序调试的效率。下面将一一介绍主这些窗口,可以提高程序调试的效率。下面将一一介绍主要调用窗口的功能。要调用窗口的功能。5.1.3 5.1.3 常用的调试窗口常用的调试窗口1“命令命令”窗口窗口 在在VB.NET中,有一个中,有一个“命令命令”窗口,在该窗口中可以直接使窗口,在该窗口中可以直接使用用VB.NET的各种命令与系统交互。的各种命令与系统交互。“命令命令”
14、窗口有两种不同窗口有两种不同的模式:命令模式和立即模式。命令模式主要用来执行命令,的模式:命令模式和立即模式。命令模式主要用来执行命令,立即模式主要用于调试程序。在调试应用程序执行函数或语句立即模式主要用于调试程序。在调试应用程序执行函数或语句等操作时,可使用立即模式查看,并更改变量的值。通过执行等操作时,可使用立即模式查看,并更改变量的值。通过执行【调试调试】【窗口窗口】【即时即时】命令,可以以立即模式打开命令,可以以立即模式打开“命令命令”窗口。当命令窗口处于立即模式时,标题栏显示窗口。当命令窗口处于立即模式时,标题栏显示“命令窗口一命令窗口一立立 即即”,如图,如图5-4所示所示。图图5
15、-4 “命令命令”窗口窗口 5.1.3 5.1.3 常用的调试窗口常用的调试窗口2“监视”窗口 利用利用“监视监视”窗口,可以动态观察变窗口,可以动态观察变量、数组、数组元素和表达式的值,量、数组、数组元素和表达式的值,从而可以观察程序的运行情况,找到从而可以观察程序的运行情况,找到错误的所在。在错误的所在。在“监视监视”观察的变量观察的变量或表达式称为监视表达式。或表达式称为监视表达式。“监视监视”窗口只能在运行模式或中断模式下打窗口只能在运行模式或中断模式下打开,打开方法是执行开,打开方法是执行【调试调试】【窗窗口口】【监视监视】命令,打开的命令,打开的“监视监视”窗口如图窗口如图5-5所
16、示。若要在所示。若要在“监视监视”窗口中添加监视表达式,只需单击窗口中添加监视表达式,只需单击【监视监视】窗口窗口“名称名称”列最下面单元格列最下面单元格上单击,在其中输入监视表达式即可。上单击,在其中输入监视表达式即可。“监视监视”窗口是最重要的调试用窗口窗口是最重要的调试用窗口之一,在逐语句运行的情况下,通过之一,在逐语句运行的情况下,通过该窗口可以看到每执行一条语句后,该窗口可以看到每执行一条语句后,监视表达式值的变化情况,从而可以监视表达式值的变化情况,从而可以找到错误所在找到错误所在 图5-5 “监视”窗口 5.1.3 5.1.3 常用的调试窗口常用的调试窗口 3“局部变量局部变量”
17、窗口窗口 在在“局部变量局部变量”窗口可以显示窗口可以显示当前过程中所有局部变量的值。当前过程中所有局部变量的值。当程序从一个过程执行到另一个当程序从一个过程执行到另一个过程时,过程时,“局部变量局部变量”中显示的中显示的变量及其值也会随之改变,因为变量及其值也会随之改变,因为该窗口只显示当前正在执行的过该窗口只显示当前正在执行的过程中所有局部变量的值。打开程中所有局部变量的值。打开“局部变量局部变量”窗口的方法是执行窗口的方法是执行【调试调试】【窗口窗口】【局部变量局部变量】命令,打开的命令,打开的“局部变量局部变量”窗窗口如图口如图5-6所示。所示。“局部变量局部变量”窗窗口只显示当前过程
18、的口只显示当前过程的“局部变量局部变量”的值,模块级变量和全局变量的值,模块级变量和全局变量的值不会显示在该窗口中。的值不会显示在该窗口中。除了上述窗口外,还有除了上述窗口外,还有“任任务列表务列表”窗口、窗口、“输出输出”窗口、窗口、“Me”窗口等调试窗口窗口等调试窗口。图5-6 “局部变量”窗口 5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理 任任务务5-1描描述述:制制作作一一个个简简单单计计算算器器程程序序,程程序序的的设设计计界界面面如如图图5-7所所示示。程程序序运运行行时时通通过过按按钮钮
19、输输入入运运算算公公式式,如如图图5-8所所示示。单单击击“计计算算”按按钮钮将将得得到到计计算算结结果果,如如图图5-9所所示示。单单击击清清除除按按钮钮将将清清除除文文本本框框中中显显示示的的表表达达式式或或运运算算结结果果。程程序序能能够够捕捕获获并并处处理理算算术术运运算算溢溢出出的的异异常常(被被0除除和和运运算算数数或或运运算算结结果果超超出出类类型型允允许许的的范范围围)和和运运算算数数少少的的错错误误,分分别别如如图图5-10和和图图5-11所所示示。图5-7 程序设计界面 图5-8 输入的公式图5-9 单击“运算”得到的结果图5-10 “算术运算溢出”异常处理 图5-11 “
20、运算数缺少异常”处理 5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理任务分析:任务分析:通过单击数字按钮输入公式时,只需在各数字按钮的通过单击数字按钮输入公式时,只需在各数字按钮的Click事件事件中把按钮的中把按钮的Text属性值连接到文本框的属性值连接到文本框的Text属性中,这样每单属性中,这样每单击一次数字按钮,对应的数字将出现在文本框中。单击运算符击一次数字按钮,对应的数字将出现在文本框中。单击运算符按钮时,在文本框的按钮时,在文本框的Text属性中连接一个空格,然后连接运算属性中连接一个空格
21、,然后连接运算符按钮的符按钮的Text属性,再连接一个按钮。这样在属性,再连接一个按钮。这样在“计算计算”按钮的按钮的Click事件中,就可以通过查找空格的位置,通过字符串的取子事件中,就可以通过查找空格的位置,通过字符串的取子串方法就可以获得两个运算数和运算符,然后通过串方法就可以获得两个运算数和运算符,然后通过Select CaseEnd Select语句可以判断运算符是什么运算符并对两语句可以判断运算符是什么运算符并对两个运算数进行相应运算就可以得到结果,把结果显示出来即可。个运算数进行相应运算就可以得到结果,把结果显示出来即可。为了捕获并处理异常,可使用为了捕获并处理异常,可使用On
22、Error语句指定错误处理程序。语句指定错误处理程序。在错误处理程序块中通过在错误处理程序块中通过Err对象的对象的Number属性中的错误号属性中的错误号来判断错误的类型(算术运算溢出,错误号为来判断错误的类型(算术运算溢出,错误号为6。过程参数错误,。过程参数错误,错误号为错误号为5),然后决定相应的处理。),然后决定相应的处理。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理任务实现:任务实现:1启动启动VB.NET,新建一个项目,项目类型为,新建一个项目,项目类型为“Windows应用程序应用程序
23、”,项目的存放位置为,项目的存放位置为“D:VBTASKCH05”,项目名为,项目名为“Task5_1”。2把把Form1窗体的窗体的Text属性值设置为属性值设置为“简单计算器简单计算器”,把它的,把它的Name属性值设置为属性值设置为“SimpleCalculator”。单击。单击“解决方案资源管理器解决方案资源管理器”中的中的“Form1.VB”窗体,然后在属性窗口中把它文窗体,然后在属性窗口中把它文件名属性设置为件名属性设置为“SimpleCalculator.vb”。然后执。然后执行行【项目项目】【Task5_1属性属性】命令,在出现的命令,在出现的“Task5_1属性页属性页”对话
24、框中把对话框中把“启动对象启动对象”设置为设置为“SimpleCalculator”。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理3对照程序设计界面,对照程序设计界面,为窗体添加控件并设为窗体添加控件并设置控件的属性。控件置控件的属性。控件的属性设置如表的属性设置如表5-1所示。所示。控件名控件名属性名属性名属性值属性值说明说明Label1Label1TextText 结果:结果:提示提示TextBox1TextBox1TextText 显示算式或结果显示算式或结果Button1Button1Text
25、Text 清空清空单击它清空文本框中显示的内容单击它清空文本框中显示的内容Button2Button2TextText11单击它在文本框中显示的数字后连一个单击它在文本框中显示的数字后连一个“1”Button3Button3TextText22单击它在文本框中显示的数字后连一个单击它在文本框中显示的数字后连一个“2”Button4Button4TextText33单击它在文本框中显示的数字后连一个单击它在文本框中显示的数字后连一个“3”Button5Button5TextText44单击它在文本框中显示的数字后连一个单击它在文本框中显示的数字后连一个“4”Button6Button6TextT
26、ext55单击它在文本框中显示的数字后连一个单击它在文本框中显示的数字后连一个“5”Button7Button7TextText66单击它在文本框中显示的数字后连一个单击它在文本框中显示的数字后连一个“6”Button8Button8TextText77单击它在文本框中显示的数字后连一个单击它在文本框中显示的数字后连一个“7”Button9Button9TextText88单击它在文本框中显示的数字后连一个单击它在文本框中显示的数字后连一个“8”Button10Button10TextText99单击它在文本框中显示的数字后连一个单击它在文本框中显示的数字后连一个“9”Button11Butt
27、on11TextText00单击它在文本框中显示的数字后连一个单击它在文本框中显示的数字后连一个“0”Button12Button12TextText+把空格、把空格、+号和空格连接到文本框的号和空格连接到文本框的Text属性中属性中Button13Button13TextText-把空格、把空格、-号和空格连接到文本框的号和空格连接到文本框的Text属性中属性中Button14Button14TextText*把空格、把空格、*号和空格连接到文本框的号和空格连接到文本框的Text属性中属性中Button15Button15TextText/把空格、把空格、/号和空格连接到文本框的号和空格连接
28、到文本框的Text属性中属性中Button16Button16TextText 运算运算单击它计算出算式的结果并显示出来单击它计算出算式的结果并显示出来5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理4编写编写Button1的的Click事件过程代码,如下。事件过程代码,如下。Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click TextBox1.T
29、ext=清空文本框清空文本框 End Sub5编写编写Button2的的Click事件过程代码,如下。事件过程代码,如下。Private Sub Button2_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button2.Click Dim btn As Button 按钮类型的变量按钮类型的变量 btn=sender 把产生该事件的按钮对象赋值给把产生该事件的按钮对象赋值给btn TextBox1.Text=TextBox1.Text+btn.Text 把把该按钮的该按钮的Text属性值连接到
30、属性值连接到TextBox1中中 End Sub5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理6运行程序,单击运行程序,单击“1”按钮,发现每单击一次该按钮按钮,发现每单击一次该按钮文本框中都将连接一个文本框中都将连接一个“1”,单击,单击“清空清空”按钮,按钮,文本框中的内容将被清空。文本框中的内容将被清空。7依次编写依次编写Button3Button11各按钮的各按钮的Click事事件过程代码,并对各按钮的功能进行测试。各按钮的件过程代码,并对各按钮的功能进行测试。各按钮的Click事件过程代码和事
31、件过程代码和Button2按钮的按钮的Click事件过事件过程代码完成一样。程代码完成一样。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理8编写编写Button12按钮的按钮的Click事件过程代码,如下。事件过程代码,如下。Private Sub Button12_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button12.Click Dim btn As Button btn=sender 在文本框
32、的在文本框的Text属性后连接一个空格、本按钮的属性后连接一个空格、本按钮的Text属性属性值和一个空格值和一个空格 TextBox1.Text=TextBox1.Text+btn.Text+End Sub说明:说明:连接两个空格的作用是把运算符和前后的两个运算数分隔开来,这连接两个空格的作用是把运算符和前后的两个运算数分隔开来,这样就可以通过字符串的样就可以通过字符串的Index方法找出空格的位置,然后再通方法找出空格的位置,然后再通过字符的过字符的Substring方法分离出两个运算数和运算符。方法分离出两个运算数和运算符。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计
33、算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理9运行程序,通过单击数字按钮输入第一个运算数,运行程序,通过单击数字按钮输入第一个运算数,单击单击“+”按钮输入按钮输入“+”运算符号,再通过单击数字运算符号,再通过单击数字按钮输入第二个运算数,发现在两个运算数和按钮输入第二个运算数,发现在两个运算数和“+”号之间均有一个空格号之间均有一个空格。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理10依次编写依次编写Button13、Button14和和Button15的的Click事件
34、过程代码,并对它们的功能进行验证。事件过程代码,并对它们的功能进行验证。Button13、Button14和和Button15的的Click事件事件过程代码与过程代码与Button12的的Click事件过程代码完全一事件过程代码完全一致。致。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理11编写编写“运算运算”按钮的按钮的Click事件过程代码如下。事件过程代码如下。Private Sub Button16_Click(ByVal sender As System.Object,ByVal e As S
35、ystem.EventArgs)Handles Button16.Click 发生错误转移到标号发生错误转移到标号“ErrorPro”指定的行去执行错误处理程序指定的行去执行错误处理程序 On Error GoTo ErrorPro Dim r As Decimal 保存计算结果的变量保存计算结果的变量 Dim t As String=TextBox1.Text 用于保存文本框中的算术表达式用于保存文本框中的算术表达式 Dim space As Integer=t.IndexOf()搜索空格位置搜索空格位置,如果没有空格,返回值如果没有空格,返回值为为0 字符串的取子符方法,第二个参数小于字符
36、串的取子符方法,第二个参数小于0,则将产生错误号为,则将产生错误号为5的异常,即过程参数不正的异常,即过程参数不正确确 Dim s1 As String=t.Substring(0,space)通过取子串方法获得第一个运算数通过取子串方法获得第一个运算数 Dim op As String=t.Substring(space+1,1)通过取子串方法获得运算符通过取子串方法获得运算符 Dim s2 As String=t.Substring(space+3)通过取子串方法获得第二个运算通过取子串方法获得第二个运算数数 Dim arg1,arg2 As Integer arg1=Val(s1):ar
37、g2=Val(s2)Select Case op Case+:r=arg1+arg2 Case-:r=arg1-arg2 Case*:r=arg1*arg2 Case/:r=arg1/arg2 Case Else 5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理MsgBox(输入的运算符有误!输入的运算符有误!)Exit Sub End Select TextBox1.Text=CStr(r)显示结果显示结果 Exit Sub 退出过程退出过程ErrorPro:错误处理程序块错误处理程序块 Select
38、Case Err.Number Case 6 除数为零时,或运算溢出时的错误号除数为零时,或运算溢出时的错误号 MsgBox(算术运算溢出!算术运算溢出!,溢出提示溢出提示)TextBox1.Focus()Exit Sub Case 5 Substring过程的参数不符合要求的错误号过程的参数不符合要求的错误号 MsgBox(必须输入运算符和第二个运算数!必须输入运算符和第二个运算数!,运算数少运算数少)Exit Sub Case Else 其它情况显示错误号和错误原因其它情况显示错误号和错误原因 MsgBox(错误号为错误号为&Err.Number&Chr(10)&Chr(13)&错误原因:
39、错误原因:&Err.Description)Exit Sub End Select End Sub5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理说明:说明:(1)程序中的“t.IndexOf()”的作用是在字符串变量t的值中查找空格第一次出现的位置,若找到则以整数形式返回空格所在位置(第一个字符的位置为0),若找不到则返回-1。IndexOf是字符串的一个方法,其作用是在字符串中查找子符的位置,查找到则返回位置值,查找不到返回-1。(2)程序中“t.Substring(0,space)”的作用是从变量t
40、存放的字符串的第一个字符开始取space个字符作为字串返回。Substring也是字符串的一个方法,其作用是取子串,基本格式有两种,分别如下。格式1:str.Substring(start,length)作用:从“str”指定的字符串的第“start”个字符开始,取“length”个字符作为子串返回。参数start代表要取的子串的开始位置,length代表要取的子串的长度,值均应大于等于0。格式2:str.Substring(start)作用:从“str”指定的字符串的第“start”个字符开始,一直取到字符串的结尾作为子串返回。(3)程序中的语句“On Error GoTo ErrorPro
41、”是一条非结构化的错误捕获语句,用来捕获程序中的错误。在非结构化异常处理中,将On Error语句放在代码块的开始处,它将处理在该块内发生的任何错误。如果在执行On Error语句后过程中引发了异常,程序流程将跳转到On Error语句中指定的行参数。行参数(行号或行标签)指示异常处理程序的位置。有时,在某过程中调用了另一个过程,并且在被调用过程中发生异常。这种情况下,如果被调用过程不处理异常,则异常传播回调用过程,并且程序流程将跳转到On Error语句中指定的行参数。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非
42、结构化异常处理On Error语句有以下四种形式:uOn Error GoTo LineuOn Error Resume NextuOn Error GoTo 0uOn Erro GoTo-15.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理 On Error GoTo Line该语句假定错误处理代码在Line参数指定的行处开始。该语句的作用是如果发生运行时错误,则将流程跳转到该Line参数中指定的行号和行标签,并激活错误处理程序。指定行必须与 On Error GoTo Line 语句位于同一过程中,否则
43、 Visual Basic 将生成编译器错误。请看下面的示例:Sub ErrTest On Error GoTo ErrorHandler 可能包含错误的代码 Exit SubErrorHandler:用于处理错误的代码 ResumeEnd Sub5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理 On Error GoTo Line该语句假定错误处理代码在Line参数指定的行处开始。该语句的作用是如果发生运行时错误,则将流程跳转到该Line参数中指定的行号和行标签,并激活错误处理程序。指定行必须与 On
44、Error GoTo Line 语句位于同一过程中,否则 Visual Basic 将生成编译器错误。请看下面的示例:Sub ErrTest On Error GoTo ErrorHandler 可能包含错误的代码 Exit SubErrorHandler:用于处理错误的代码 ResumeEnd Sub本例包含一个名为 ErrorHandler 的错误处理程序。如果ErrTest过程中的任何代码生成错误,VB.NET将立即执行 ErrorHandler 标签后面的代码。在错误处理程序块的结尾处,Resume 语句将把程序流程转移到最先发生错误的代码行,重新执行发生错误的代码行及以后的代码。需注
45、意的是,必须将 Exit Sub 语句放在错误处理块的前面,否则,VB.NET在到达子例程的结尾时将运行错误处理代码,从而导致不可意料的结果。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理 On Error Resume Next该语句的作用是如果在过程中出现运行错误,将把流程跳到发生错误的语句的下一条语句,再继续进行。使用该语句可以将错误处理过程放置于错误可能发生的地方,从而不需要在发生错误时将程序流程跳转到其他位置。如果在过程中调用了其他过程,则On Error Resume Next语句将在执行被
46、调用的过程时被禁止。因此,应该将On Error Resume Next语句放置于每个被调用的过程中。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理 On Error GoTo 0该语句用于禁止当前过程中任何可用的错误处理代码块。如果不包含On Error Go To 0语句,则当退出过程时,其中的所有异常处理代码块都将被自动禁止。On Error GoTo 0语句并不表示第0行是错误处理代码的起始,即使过程中包含第0行。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化
47、异常处理的简单计算 器器非结构化异常处理非结构化异常处理 On Error GoTo-1语句该语句用来禁止当前过程中任何可用的异常。如果不包含On Error GoTo-1语句,则当退出它的过程时,异常将被自动禁止。与On Error GoTo 0语句类似,该语句也并不表示第-1行是错误处理代码的起始,即使过程中包含第-1行。下面通过一个实际的例子来说明On Error语句的使用。例子的作用是把异常处理程序命名为DivideByZero并处理除数为0的错误。如果发生不同的错误,VB.NET引发运行时错误并停止应用程序。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非
48、结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理示例代码如下示例代码如下:Sub ErrorTestExam()Dim m As Integer,m As Integer,k As Integer On Error GoTo DivideByZero 捕获错误,异常处理程序被命名为DivideByZero.下面是代码的主体部分,可能产生错误 m=6 :n=0 k=m n On Error GoTo 0禁止异常处理 Console.WriteLine(m&/&n&=&k)在执行错误代码之前应退出过程,如果该操作失败将产生意想不到的结果 Exit Sub 异常处理程序DivideBy
49、Zero:Console.WriteLine(You have attempted to divide by zero!)输出错误提示信息 n=1 处理错误的代码 Resume 该语句将返回到首次发生错误的语句重新执行,应用程序可以继续执行下去End Sub注意:使用 On Error 的非结构化错误处理会降低应用程序性能并导致代码难以调试和维护。建议使用结构化错误处理方法。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理(4)在“ErrorPro”行号指定的错误处理程序块中,通过Select CaseE
50、nd Select语句测试错误号,然后决定相应的操作。错误号通过Err对象的Number属性值取得。Err对象包含与运行时错误相关的信息,在错误处理代码中通用对Err对象属性值的检测可以知道发生的错误。Err对象的属性值由刚发生的错误决定,Err对象的主要属性有:Number属性:该属性包含了错误代码,即导致错误的原因。Description属性:该属性包含了发生的错误的描述信息,是一个字符串属性。5.2 5.2 任务任务5-15-1:具有非结构化异常处理的简单计算:具有非结构化异常处理的简单计算 器器非结构化异常处理非结构化异常处理Err对象的常用方法有Raise和Clear,其格式与功能如