• ベストアンサー

[VB2005]処理を完全に中止する方法を教えて頂けませんか?

VB2005で開発しています。 あるイベントからメソッドを呼び、そのメソッドも次のメソッドを呼ぶような 処理があるとします。 この場合に、最上位のイベント以外から、 このイベントの処理をすべて終了する方法はございませんか? 最上位のイベントであれば、 Exit Subと書けば、そのイベント内の処理はすべて終了されると思いますが、 それを、下位のメソッドで行いたいのです。 このようなことはできないのでしょうか? もし方法がございましたら、教えて頂きたいです。 ぜひ、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#259269
noname#259269
回答No.2

Exception を Throw してください。 System.Exception を継承した自前クラスを作り、最上位イベントでは、Try ~ Catch で それ「だけ」をキャッチするようにします。 Sub イベントプロシージャ Try SubA Catch mex As MyException MsgBox("下位メソッドで処理が中止されました。") End Try End Sub Sub SubA() SubB End Sub Sub SubB() If 条件 Then Throw New MyException("処理中止") End If End Sub --- Public Class MyException Inherits System.Exception ・ ・ ・ End Class

rock123
質問者

お礼

ご回答ありがとうございます。 例外で実現すれば良いのですね。 このように使用することを考えておりませんでした。 大変参考になりました。

その他の回答 (1)

回答No.1

私の知る限りでは、簡単には実現できない気がします。 ですが、多少面倒には なりますが、動作自体は実現可能かと 思います。 例えば、下位メソッドで、処理を中断することを示す戻り値を 返すようにし、1つ上位のメソッドでは、その戻り値によって 更に上のメソッドに処理中断を示す戻り値を返す… 最上位のメソッドでは、その戻り値によってはExit Sub (またはExit Function)するという手も考えられます。 または、戻り値を他の用途で使用していて、戻り値による 中断が出来ない場合は、モジュールレベルとかアプリケーション レベルの、スコープが広い変数を準備して、その変数で 処理を抜けるかどうかを判断する事も可能かと思います。 その場合も、下位のメソッドを抜けた直後に、上位メソッドで 更に抜けるかどうかを判定する必要がありますが。 なんか他にもあるかも しれませんが… 他の方のフォローに期待することとしましょう。

rock123
質問者

お礼

ありがとうございます。 このような手法が一般的ですよね。