当您仍旧可以使用 On Error 语句来处理代码中的异常以提供非结构化异常处理时,Visual Basic 2005 还支持结构化异常处理,该处理方法可用于通过全面的错误处理来创建和维护程序。 在结构化异常处理中,代码块会测试特定的环境并相应地做出响应。
本演练演示如何向程序中添加结构化异常处理。 尤其是,它说明如何使用 Try...Catch...Finally 语句处理异常,以及如何在 Catch 块中执行错误筛选。
提示
不能将结构化与非结构化异常处理组合在一个过程中。
提示
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置。
创建应用程序
下面的应用程序是一家销售玩具熊的公司的客户订单窗体。 该用户界面包括以下控件:
一个用于表示客户名称的 TextBox。
两个用于选择玩具熊的颜色和大小的 ComboBox 控件。
一个订单 Button。
三个将每个控件的用途传达给用户的标签。
当用户输入请求的信息并单击“Order”按钮时,该应用程序显示订单的摘要。
创建应用程序
从**“文件”菜单中选择“新建项目”。 此时将出现“新建项目”**对话框。
在**“项目类型”窗口中,选择“Visual Basic 和 Windows”(如果尚未选中),从“模板”窗口中选择“Windows 应用程序”**。
在**“属性”窗口中的“名称”下,输入 TeddyBearProject,然后单击“确定”**。 该项目即被添加到“解决方案资源管理器”中,并且“Windows 窗体设计器”会打开。
将控件添加到窗体上,并根据下面的指定设置它们的属性。
控件
属性
属性值
标签
Name
文本
customerLabel
Bear Order Form
TextBox
Name
文本
customerName
客户名称
标签
Name
文本
bearColorLabel
Available Colors
ComboBox
Name
项
文本
bearColor
Black、Brown、Spotted
Bear Color
标签
Name
文本
bearSizeLabel
Available Sizes
ComboBox
Name
项
文本
bearSize
Small、Normal、Large
大小
Button
Name
文本
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 OrElse 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)