• ベストアンサー

[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
質問者

お礼

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

関連するQ&A

  • VBのイベント処理について

    お世話になります。 VB6.0のイベント処理について教えてください。 VB.NETでは、イベント処理のメソッド(VBだとプロシージャですか) のシグニチャのおしりに Handles Button1.Click という記述がされているので、このメソッドはButton1のクリックという イベントが発生したときに行われる処理だなと見当がつくのですが、 VB6.0ではその記述をしないのが一般的とみました。 してそのときに、このメソッドがButton1のクリック時のイベントだと いうのは、どのように判断されるのですか?メソッド名が Button1_Click みたいに勝手につけられるので、それで判断されるのですか?という ことはメソッド名を変えたらそのメソッドはButton1のクリック時の イベント処理メソッドではなくなってしまうのですか? よろしくご教授ください。

  • VBの実行シーケンスについて

    お世話になります。 以下のような構造の場合 Sub1内の処理1が完了してから Sub2内の処理2が始まることは保証されるのでしょうか? また、Declareで定義したDLL呼出をCALLする場合、 CALLしたDLLの処理が終了するまでVBは待つのでしょうか? 基本的なところと思うのですが、開発したプログラムが不安なので、もしやと思い質問しました。 Sub Main() Sub1 Sub2 End End Sub Sub Sub1() 処理1 End Sub Sub Sub2() 処理2 End Sub

  • VB6でEndステートメントに変わる方法

    VB6を使っております。 Endコマンドを使わずに、Unloadイベントで開いているフォームを閉じていく処理にするのが、定跡とされていますが、OnErrorGotoで飛んだ先でResume Nextではなくて、終了させたい場合は、私はENDステートメントを使っておりますが、 Unload meでイベントを発生させても エラー時には終了できません。 Endステートメントに変わる方法で終了させることは可能でしょうか?

  • タブコントロールの問題 (VB)

    次のようなもんだい問題がVBにて発生しました メソッド 'Private Sub TabControl1_Selected(sender As Object, e As System.Windows.Forms.TabControl)' でイベント 'Public Event Selected(sender As Object, e As System.Windows.Forms.TabControlEventArgs)' を処理できません。シグネチャに互換性がありません。 誰かどうやって修正したらいいか教えてください!!

  • FormClosing イベント から終了を取り消すには VB2005

    VB2005で開発しているのですが。 FormClosingイベントの中で。Formの終了イベントを取り消すにはどうしたらよいでしょうか? たとえば。こんなコードがあったら 終了イベントの取り消しにはなんと書いたらよいでしょうか? Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing  If TextBox1.Text = "01" Then    MsgBox("完了!!", MsgBoxStyle.OkCancel)  Else   ' ここに取消終了のコードを書いたらいいのですか? End If End Sub すいませんが。アドバイスをお願いします。 開発環境: XinXP Pro SQL Server2005 Express VS2005 Pro VB2005

  • VB6とExcel2003VBAの処理の違い

    以前エクセル2003VBAで作ったプログラムをVB6に現在移植中です。 その中で基本的なことかも知れないのですが処理の方法が違う様で のっけからつまづいています。 Private sub TEST() Form1.Show If Form1.Text1.Text = 1 Then Form2.Show Else Form3.Show End If End Sub と、いったプログラムをコディングした場合、 Excel2003VBAではForm1からの入力を待ってから次の処理 (If Form1.Text1.Text = 1 Then・・・・)に進むのですが VB6はForm1を表示してからすぐに次の処理 (If Form1.Text1.Text = 1 Then・・・・)に進んでしまいます。 何か設定なのでしょうか? 尚、当方VB6は超がつくド素人です。 どうか、優しく教えてください。 お願いいたします。

  • VB.NETで作成したDLLについて

    ご回答宜しくお願い致します。 現在、VBでユーザーコントロールのDLLを作成し、 DLLをC#で使用するというプログラムを開発してます。 そこで、以下のような現象が起こり 対応できかねております。 まず、VBで以下のメソッドを書きました。 Public Sub showMessage(ByVal bol As Boolean)     MessageBox.Show(bol) End Sub そして、C#からDLLのコントロール ( Panel1 ) を呼び出し、 private void Panel1_MouseClick(object sender, MouseEventArgs e) {     Panel1.setSelectedFlg(true); } これでメッセージボックスが表示されると思ったんですが表示されません。 VBのMessageBoxを別の処理に変えても全く動作しません。 メソッドを動作させる方法はございますでしょうか 宜しくお願い致します。

  • VB6 / コーディング方法

    1. 下記の>>>箇所で、Exit Subではなくて、プログラム全体を終了させたいのですが関数をおしえてください。 Private Sub EX() If 条件 Then 条件に合致した場合の処理 Else 条件に合致したかった場合の処理 >>>ここで、プログラムを終了させる関数を入れたい。 End If End Sub 2. 標準コントロールで画面を作成しています。 ctlファイルの先頭に画面スクリプトが定義されています。 例えば、上記1の条件判断を画面スクリプトの前行に置き、プログラム起動時に最初に読ませたいのですが良いでしょうか?

  • デリゲートとイベントの関係(VB.NET2005)

    VB2005の本に書いてある内容が理解できません。 誰か助けてください! ---------- イベントとデリゲートの仕組み  .NETイベントが内部ではデリゲートとして処理されることを理解すれば、その威力を存分に引き出すことができます。 もう少し厳密に言うと、イベントを発行するクラスには、そのイベントをサブスクライブするクライアントすべてをポイントする、プライベートデリゲートフィールドが定義されています。 イベントが発行されると、.NETのイベントインフラストラクチャによって該当するデリゲートフィールドのInvokeメソッドが呼び出されます。そして、Invokeメソッドからすべてのクライアントにイベントが通知されます。  このことは、.NET Frameworkで定義されているイベントごとに対応するデリゲートが存在することからもうかがい知ることができます。 [オブジェクトブラウザ]を使用すれば、それを確認できます。 たとえば、第2引数としてEventArgsオブジェクトを受け取るイベントはすべて、内部ではSystem.EventHandlerデリゲートを通じて管理されます。 ほとんどのWindowsフォームコントロールが公開するKeyPressイベントは、KeyPressEventHandlerデリゲートによって処理されますが、このデリゲートは、第1引数としてObject、第2引数としてKeyPressEventArgsオブジェクトを受け取るSubプロシージャをポイントします。 ---------- 全体的にちんぷんかんぷんですが特に「サブスクライブ」などがわかりません よろしくお願いします。

  • EXCEL2010 VBA 複数処理の終了

    EXCEL2010 VBAでコマンドボタンを押すと複数の処理を実行するようにしています。 Sub 実行() 処理A 処理B Ens sub 処理Aでは実行時に確認画面が出てNOを選択すると処理が終了するようにしています。 確認画面は下記の様な形です。 If MsgBox("処理を実行しますか?", vbYesNo + vbQuestion, "確認") = vbNo Then Exit Sub End If この処理Aの確認画面でNOを選択すると処理Aだけでなく処理Bも実行せず 終了するようにしたいのですが何か良い方法はないでしょうか? Exit Subにかわるすべての処理を終了させるコマンドがあれば良いのですが。。。