- ベストアンサー
[VB2005]処理を完全に中止する方法を教えて頂けませんか?
VB2005で開発しています。 あるイベントからメソッドを呼び、そのメソッドも次のメソッドを呼ぶような 処理があるとします。 この場合に、最上位のイベント以外から、 このイベントの処理をすべて終了する方法はございませんか? 最上位のイベントであれば、 Exit Subと書けば、そのイベント内の処理はすべて終了されると思いますが、 それを、下位のメソッドで行いたいのです。 このようなことはできないのでしょうか? もし方法がございましたら、教えて頂きたいです。 ぜひ、よろしくお願いいたします。
- みんなの回答 (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
その他の回答 (1)
- K-Sogacchi
- ベストアンサー率53% (50/93)
私の知る限りでは、簡単には実現できない気がします。 ですが、多少面倒には なりますが、動作自体は実現可能かと 思います。 例えば、下位メソッドで、処理を中断することを示す戻り値を 返すようにし、1つ上位のメソッドでは、その戻り値によって 更に上のメソッドに処理中断を示す戻り値を返す… 最上位のメソッドでは、その戻り値によってはExit Sub (またはExit Function)するという手も考えられます。 または、戻り値を他の用途で使用していて、戻り値による 中断が出来ない場合は、モジュールレベルとかアプリケーション レベルの、スコープが広い変数を準備して、その変数で 処理を抜けるかどうかを判断する事も可能かと思います。 その場合も、下位のメソッドを抜けた直後に、上位メソッドで 更に抜けるかどうかを判定する必要がありますが。 なんか他にもあるかも しれませんが… 他の方のフォローに期待することとしましょう。
お礼
ありがとうございます。 このような手法が一般的ですよね。
お礼
ご回答ありがとうございます。 例外で実現すれば良いのですね。 このように使用することを考えておりませんでした。 大変参考になりました。