演练:结构化异常处理 (Visual Basic)
当您仍旧可以使用 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)