チュートリアル: 構造化例外処理 (Visual Basic)

非構造化例外処理を行う場合は、従来と同様に On Error ステートメントを使用してコードの例外を処理できます。一方、Visual Basic 2005 では構造化例外処理もサポートされています。構造化例外処理を使用すると、包括的な例外処理を備えたプログラムの作成や、管理を行うことができます。 構造化例外処理では、コード ブロックが特定の状況をテストし、適切な処理を行います。

このチュートリアルでは、構造化例外処理をプログラムに追加する方法を示します。 特に、Try...Catch...Finally ステートメントを使用して例外を処理する方法、および Catch ブロック内でエラーをフィルター処理する方法について示します。

注意

構造化例外処理と非構造化例外処理を 1 つのプロシージャの中で組み合わせて使用することはできません。

注意

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio の設定」を参照してください。

アプリケーションの作成

次のアプリケーションは、テディ ベアを販売する会社の顧客注文フォームです。 ユーザー インターフェイスは、次のコントロールから構成されています。

  • 顧客の名前用の TextBox が 1 つ。

  • テディベアの色とサイズを選択するための ComboBox コントロールが 2 つ。

  • 注文用の Button が 1 つ。

  • 各コントロールの目的をユーザーに伝えるラベルが 3 つ。

  • ユーザーが必要な情報を入力して [Order] ボタンをクリックすると、このアプリケーションは注文の概要を表示します。

アプリケーションを作成するには

  1. [ファイル] メニューの [新しいプロジェクト] をクリックします。 [新しいプロジェクト] ダイアログ ボックスが表示されます。

  2. [プロジェクトの種類] ウィンドウの、[Visual Basic]、[Windows] を選択し (まだこれらが選択されていない場合)、[テンプレート] ウィンドウで [Windows アプリケーション] をクリックします。

  3. [プロパティ] ウィンドウで、[プロジェクト名] に「TeddyBearProject」と入力し、[OK] をクリックします。 プロジェクトがソリューション エクスプローラーに追加され、Windows フォーム デザイナーが表示されます。

  4. コントロールをフォームに追加し、指定されたとおりにプロパティを設定します。

    コントロール

    プロパティ

    プロパティ値

    ラベル

    [名前]

    Text

    customerLabel

    Bear Order Form

    TextBox

    [名前]

    Text

    customerName

    Customer Name

    ラベル

    [名前]

    Text

    bearColorLabel

    Available Colors

    ComboBox

    [名前]

    Items

    Text

    bearColor

    Black, Brown, Spotted

    Bear Color

    ラベル

    [名前]

    Text

    bearSizeLabel

    Available Sizes

    ComboBox

    [名前]

    Items

    Text

    bearSize

    Small, Normal, Large

    サイズ

    Button

    [名前]

    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 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 句を追加するには

  1. 新しい項目 "Purple" を bearColor コンボ ボックス コントロールに追加します。

  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. メッセージをキャンセルするには、[OK] をクリックします。

  4. [Available Colors] ボックスで [Purple] を選択し、[Order] ボタンをクリックします。 紫色のテディ ベアは選択できないことを示すメッセージが表示されます。

参照

参照

On Error ステートメント (Visual Basic)

Try...Catch...Finally ステートメント (Visual Basic)

Throw ステートメント (Visual Basic)

概念

Visual Basic の構造化例外処理の概要

その他の技術情報

例外処理のタスク (Visual Basic)