演练:结构化异常处理

更新:2007 年 11 月

当您仍旧可以使用 On Error 语句来处理代码中的异常以提供非结构化异常处理时,Visual Basic 2005 还支持结构化异常处理,该处理方法可用于通过全面的错误处理来创建和维护程序。在结构化异常处理中,代码块会测试特定的环境并相应地做出响应。

本演练演示如何向程序中添加结构化异常处理。尤其是,它说明如何使用 Try...Catch...Finally 语句处理异常,以及如何在 Catch 块中执行错误筛选。

说明:

不能将结构化与非结构化异常处理组合在一个过程中。

说明:

显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置

创建应用程序

下面的应用程序是一家销售玩具熊的公司的客户订单窗体。该用户界面包括以下控件:

  • 一个用于表示客户名称的 TextBox

  • 两个用于选择玩具熊的颜色和大小的 ComboBox 控件。

  • 一个订单 Button

  • 三个将每个控件的用途传达给用户的标签。

  • 当用户输入请求的信息并单击“Order”按钮时,该应用程序显示订单的摘要。

创建应用程序

  1. 从“文件”菜单中选择“新建项目”。“新建项目”对话框随即出现。

  2. 在“项目类型”窗口中,选择“Visual Basic->“Windows”(如果尚未选中),从“模板”窗口中选择“Windows 应用程序”。

  3. 在“属性”窗口中的“名称”下,输入 TeddyBearProject,然后单击“确定”。该项目即被添加到“解决方案资源管理器”中,并且“Windows 窗体设计器”会打开。

  4. 将控件添加到窗体上,并根据下面的指定设置它们的属性。

    控件

    属性

    属性值

    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 子句

  1. 将一个新项“Purple”添加到 bearColor ComboBox 控件。

  2. 在代码行 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 子句。

测试

现在可以测试该应用程序以确保其正确运行。

生成并运行应用程序

  1. 从“生成”菜单中选择“生成 TeddyBearProject”。

  2. 按 F5 运行应用程序。将显示主窗体。

测试应用程序

  1. 在“Customer name”文本框中输入一个名称,然后从“Available Colors”和“Available Sizes”组合框中选择玩具熊的颜色和大小。

  2. 单击“Order”按钮。如果在上一步中选择了“Black”、“Brown”或“Spotted”作为颜色,将会出现一条消息,表明您订购的玩具熊的颜色和大小。

    如果不指定一种颜色,将有消息提示你指定一种颜色。

  3. 单击“确定”取消该消息。

  4. 在“Available Colors”文本框中,选择“Purple”,然后单击“Order”按钮。将出现一条消息,指出没有紫色的玩具熊。

请参见

概念

Visual Basic 的结构化异常处理概述

参考

On Error 语句 (Visual Basic)

Try...Catch...Finally 语句 (Visual Basic)

Throw 语句 (Visual Basic)

其他资源

异常处理任务