チュートリアル : 構造化例外処理

更新 : 2007 年 11 月

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

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

8c522k35.alert_note(ja-jp,VS.90).gifメモ :

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

8c522k35.alert_note(ja-jp,VS.90).gifメモ :

使用している設定またはエディションによっては、ヘルプの記載と異なるダイアログ ボックスやメニュー コマンドが表示される場合があります。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

アプリケーションの作成

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

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

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

  • 注文用の Button が 1 つ。

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

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

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

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

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

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

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

    コントロール

    プロパティ

    プロパティ値

    Label

    名前

    テキスト

    customerLabel

    Bear Order Form

    TextBox

    名前

    テキスト

    customerName

    Customer Name

    Label

    名前

    テキスト

    bearColorLabel

    Available Colors

    ComboBox

    名前

    項目

    テキスト

    bearColor

    Black, Brown, Spotted

    Bear Color

    Label

    名前

    テキスト

    bearSizeLabel

    Available Sizes

    ComboBox

    名前

    項目

    テキスト

    bearSize

    Small, Normal, Large

    Size

    Button

    名前

    テキスト

    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 コンボ ボックス コントロールに追加します。

  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] ボタンをクリックします。紫色のテディ ベアは選択できないことを示すメッセージが表示されます。

参照

概念

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

参照

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

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

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

その他の技術情報

例外処理のタスク