ルーチンを強制的に抜けるには?

解決


のり  2005-05-18 23:24:09  No: 89912  IP: [192.*.*.*]

VB6を使っています。
実行中にキャンセルボタンを押すと中断するようにし、
「継続ボタン」と「始めからボタン」で処理を選べるようにしたいと
思ってます。
再開の場合はwhileで「継続」ボタンが押されるまで
待ってればいいのですが、始めからの場合
途中で止まっている処理をExit Subで抜けて最初から
実行したいのです。
いつキャンセルボタンが押されるか分からないので
どのルーチンで止まっているのかわかりません。

雰囲気としては、On Errorのように何かフラグが立ったら
強制的にルーチンを抜けるようなのがいいのですが、
何か方法ありませんか?

編集 削除
のり  2005-05-18 23:50:06  No: 89913  IP: [192.*.*.*]

もしかして、ルーチンをSubじゃなくて、Functionにして
戻り値を設定すればできるかもですね。
全部変更するのは大変ですが、やってみます。

編集 削除
ねろ  2005-05-19 09:37:10  No: 89914  IP: [192.*.*.*]

よくある処理なのですが、私はこんな風にやってます。
ボタン2つとテキストボックス一つをフォームに貼り付けて。
ボタンのEnableも適当に切り替える必要が有るので、
コードが読みにくくなっていますが。。。。

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
    If Command1.Caption = "開始" Then
        Text1.Text = "0"
        Command1.Caption = "終了"
        Command2.Enabled = True
        Command2.Caption = "中断"
        Do
           '//メインの処理
            Text1 = CStr(Val(Text1) + 1) '何かの処理
           '//メインの処理終了
            Do
                Sleep (1)
                DoEvents
            Loop While Command2.Caption = "続行"
            DoEvents
            Sleep (1)
        Loop While Command1.Caption = "終了"
    Else
        Command1.Caption = "開始"
        Command2.Caption = "中断"
        Command2.Enabled = False
    End If
End Sub
Private Sub Command2_Click()
    '中断の処理
    If Command2.Caption = "中断" Then
        Command2.Caption = "続行"
    Else
        Command2.Caption = "中断"
    End If
End Sub
Private Sub Form_Load()
    Command1.Caption = "開始"
    Command2.Caption = "中断"
    Command2.Enabled = False
End Sub

編集 削除
のり  2005-05-19 13:10:51  No: 89915  IP: [192.*.*.*]

ねろさん、ありがとうございます。
自分の今回のコードの場合、Subの下で更にSubを呼び、
更に下でも呼んでいるので、なかなか完全に抜け切れずに
いました。
ねろさんのコードも参考にさせていただきます。

編集 削除
のり  2005-05-20 14:00:55  No: 89916  IP: [192.*.*.*]

Functionで戻り値持たせるのとフラグを立てることで
回避できました。

ぽちっとな

編集 削除