投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/8/19 12:08:46
shu さんの回答に補足。

> 以下を実行すると
> On Error Reume Next
> If Check() Then
>       Console.WriteLine("例外が発生しなかったので削除処理をします。")
> Else
>       Console.WriteLine("例外が発生したので削除処理を中止します。")
> End If

# そのメッセージだと、Check は例外を返さない事が期待されているように読めるので、
# 呼び出し側の処置以前に、そもそもの Check メソッドの実装自体が間違っているという
# 印象を受けてしまいますが、それはとりあえず置いといて…。


この例の Button1 の処理を書き直すとすれば、こんな感じで如何でしょうか。
他にも書き方はありますが、一例という事で。

On Error を使った実装例
On Error Resume Next
Dim canDelete As Boolean = Check()
If Err.Number = 5 Then    'エラー番号が事前に分かっている場合は、Select Case の場合もアリ。 
   'エラー5 に相当する例外が発生した場合の処理 
   Console.WriteLine("例外が発生したので削除処理を中止します。")
   '※可能であれば、Err.Number の値に応じた処理を記述しておく。 
   Return
End If
On Error GoTo 0

If canDelete Then
   '戻り値として True が返却された場合の処理 
   Console.WriteLine("データは削除可能です。削除処理を開始します。")
Else
   '戻り値として False が返却された場合の処理例 
   'Console.WriteLine("データがロックされています。削除できません。") 
   'Console.WriteLine("データがありません。削除処理は中止されました。") 
   'Console.WriteLine("削除確認画面でキャンセルが選択されました。") 
   Return
End If

DeleteAll()  '←この部分に例外処理が必要かも考慮が必要 




Try~Catch を使った実装例
Try
   If Check() Then
       '戻り値として True が返却された場合の処理 
       Console.WriteLine("データは削除可能です。削除処理を開始します。")
   Else
       '戻り値として False が返却された場合の処理例 
       'Console.WriteLine("データがロックされています。削除できません。") 
       'Console.WriteLine("データがありません。削除処理は中止されました。") 
       'Console.WriteLine("削除確認画面でキャンセルが選択されました。") 
       Return
   End If
Catch ex As FooException   'Check が返す可能性のある例外 
   '例外が発生した場合の処理 
   Console.WriteLine("Fooの例外が発生したので削除処理を中止します。")
   '※可能であれば、例外内容に応じた処理を記述しておく。 
   Return
End Try

DeleteAll()  '←この部分に例外処理が必要かも考慮が必要