VB6を使っています。
実行中にキャンセルボタンを押すと中断するようにし、
「継続ボタン」と「始めからボタン」で処理を選べるようにしたいと
思ってます。
再開の場合はwhileで「継続」ボタンが押されるまで
待ってればいいのですが、始めからの場合
途中で止まっている処理をExit Subで抜けて最初から
実行したいのです。
いつキャンセルボタンが押されるか分からないので
どのルーチンで止まっているのかわかりません。
雰囲気としては、On Errorのように何かフラグが立ったら
強制的にルーチンを抜けるようなのがいいのですが、
何か方法ありませんか?
もしかして、ルーチンをSubじゃなくて、Functionにして
戻り値を設定すればできるかもですね。
全部変更するのは大変ですが、やってみます。
よくある処理なのですが、私はこんな風にやってます。
ボタン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
ねろさん、ありがとうございます。
自分の今回のコードの場合、Subの下で更にSubを呼び、
更に下でも呼んでいるので、なかなか完全に抜け切れずに
いました。
ねろさんのコードも参考にさせていただきます。
Functionで戻り値持たせるのとフラグを立てることで
回避できました。
ぽちっとな
ツイート | ![]() |