更新:2007 年 11 月
当您仍旧可以使用 On Error 语句来处理代码中的异常以提供非结构化异常处理时,Visual Basic 2005 还支持结构化异常处理,该处理方法可用于通过全面的错误处理来创建和维护程序。在结构化异常处理中,代码块会测试特定的环境并相应地做出响应。
本演练演示如何向程序中添加结构化异常处理。尤其是,它说明如何使用 Try...Catch...Finally 语句处理异常,以及如何在 Catch 块中执行错误筛选。
| .gif) 说明: | 
|---|
| 不能将结构化与非结构化异常处理组合在一个过程中。 | 
| .gif) 说明: | 
|---|
| 显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。 | 
创建应用程序
下面的应用程序是一家销售玩具熊的公司的客户订单窗体。该用户界面包括以下控件:
- 一个用于表示客户名称的 TextBox。 
- 两个用于选择玩具熊的颜色和大小的 ComboBox 控件。 
- 一个订单 Button。 
- 三个将每个控件的用途传达给用户的标签。 
- 当用户输入请求的信息并单击“Order”按钮时,该应用程序显示订单的摘要。 
创建应用程序
- 从“文件”菜单中选择“新建项目”。“新建项目”对话框随即出现。 
- 在“项目类型”窗口中,选择“Visual Basic->“Windows”(如果尚未选中),从“模板”窗口中选择“Windows 应用程序”。 
- 在“属性”窗口中的“名称”下,输入 TeddyBearProject,然后单击“确定”。该项目即被添加到“解决方案资源管理器”中,并且“Windows 窗体设计器”会打开。 
- 将控件添加到窗体上,并根据下面的指定设置它们的属性。 - 控件 - 属性 - 属性值 - Label - Name - Text - customerLabel - Bear Order Form - TextBox - Name - Text - customerName - Customer Name - Label - Name - Text - bearColorLabel - Available Colors - ComboBox - Name - Items - Text - bearColor - Black、Brown、Spotted - Bear Color - Label - Name - Text - bearSizeLabel - Available Sizes - ComboBox - Name - Items - Text - bearSize - Small、Normal、Large - Size - Button - Name - Text - order - Order 
添加功能
既然已经添加并设置了控件及其属性,必须将代码放在它们后面才能使它们起作用。以下代码处理 Order 按钮的 Click 事件并向客户显示一条消息。
向窗体及其控件添加功能
- 将以下代码添加到 Order 按钮的 Click 事件。 - Dim bearOrder As String bearOrder = _ String.Format("You have ordered a {0} {1} bear.", _ bearSize.SelectedItem, bearColor.SelectedItem) MsgBox(bearOrder)
现在应用程序已经就绪,可以添加结构化异常处理代码了。
添加 Try...Catch 块
若要确保客户已经指定了玩具熊的颜色,请添加一个 Try...Catch 语句。请记住以下几点:
- 不带任何标识符的 Catch 子句将捕获所有异常。 
- 带有 When 子句的 Catch 子句只在表达式计算为 True 时捕获异常;表达式类型必须可以隐式转换为 Boolean。 
添加简单的 Try...Catch 块
- 将以下代码添加到 Order 按钮的 Click 事件,放置在测试大小和颜色值的部分后面,即 String.Format ("You have ordered a {0} {1} bear.", BearSize.SelectedItem, BearColor.SelectedItem) 后面。若遇到无效的颜色值,该代码将引发一个异常。在添加 Try 语句时,请注意,编辑器会自动在语句的结尾提供 End Try。 - Try If ((bearColor.SelectedIndex < 0) Or _ (bearColor.SelectedIndex > 2)) Then Throw New System.Exception() End If ' The Catch statement handles errors caused by a lack of bear color. Catch ex As Exception When bearColor.SelectedIndex < 0 bearOrder = String.Format("You must select a bear color!") Finally Beep() ' Beep at the end. End Try
添加附加的 Catch 子句
- 将一个新项“Purple”添加到 bearColor ComboBox 控件。 
- 在代码行 bearOrder = String.Format("You must select a bear color!") 之后添加以下代码。 - Catch ex As Exception When bearColor.SelectedIndex = 3 bearOrder = String.Format("There are no bears of that color.")
可以向代码中添加所需的任意多个 Catch 子句。
测试
现在可以测试该应用程序以确保其正确运行。
生成并运行应用程序
- 从“生成”菜单中选择“生成 TeddyBearProject”。 
- 按 F5 运行应用程序。将显示主窗体。 
测试应用程序
- 在“Customer name”文本框中输入一个名称,然后从“Available Colors”和“Available Sizes”组合框中选择玩具熊的颜色和大小。 
- 单击“Order”按钮。如果在上一步中选择了“Black”、“Brown”或“Spotted”作为颜色,将会出现一条消息,表明您订购的玩具熊的颜色和大小。 - 如果不指定一种颜色,将有消息提示你指定一种颜色。 
- 单击“确定”取消该消息。 
- 在“Available Colors”文本框中,选择“Purple”,然后单击“Order”按钮。将出现一条消息,指出没有紫色的玩具熊。 
请参见
概念
参考
Try...Catch...Finally 语句 (Visual Basic)