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

解決


のり  2005-05-19 08:24:09  No: 89912

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

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


のり  2005-05-19 08:50:06  No: 89913

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


ねろ  2005-05-19 18:37:10  No: 89914

よくある処理なのですが、私はこんな風にやってます。
ボタン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 22:10:51  No: 89915

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


のり  2005-05-20 23:00:55  No: 89916

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

ぽちっとな


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加