開始釦を押下すると、Option1=Trueになるまで
ループが回るようにしているのですが、
ここで、Option1をTrueにしないで、終了釦を押下して、
Formを閉じても、ループは回ったままなのです。
Option1をTrueにしないで、ループを抜ける方法を教えてください。
下記がプログラムです。
Private Sub Command1_Click() '開始釦
Do
DoEvents
Loop Until Option1 = True
End Sub
Private Sub Command2_Click() '終了釦
Unload Form1
End Sub
フラグを用意して、
Form_Unload イベントなどでフラグをセットし、
Do Loop の中でもそのフラグをチェックするようにすれば良いのでは?
早速の回答ありがとうございます。
ループを抜ける方法と書いたのですが、
VB上での「停止(E)」のような、一発でこのプログラムを
停止させることは出来ないのでしょうか?
End
でもこれって強制終了なんであんまりオススメしません。
強制終了だと、何故あんまりオススメで無いのでしょうか?
ちゃんとした終了処理ができないということです。強制ですから。
それでは何が起こるか、保障できませんね。
プロシージャを抜けるならExit Subでも良いですよ。
LOOpを抜けるならExit Doでも。
強制終了についてですが、理由はさまざまですが、結論はメモリが開放されない可能性が高いからです。
例えば、データベースの接続コネクト等が挙げられますね。
みなさんも経験があると思いますが、デバッグ途中で強制終了を何回もした場合、
急にPCの動作が遅くなった事はありませんか?
詳しく説明しませんが、データベースとのセッションが切れていない為に起こる現象だと言われています。
そういった感じもありますので、強制終了はお勧めできない訳です。
オススメしない理由は他の人が答えてくれてますんで(^^;
でもちゃんと理解して、闇雲に使わなければ使ってもイイんじゃないかとも思います。
明示的に自プロセスを殺すってことで……(間違ってるかなー?)
今回の場合などは とろさんやokuさんの意見通り
Form_QueryUnloadでフラグを立てて
Do〜Loop内でフラグチェックをしてExit Doするのが良いと思います。
Option1 = True とせずに判定用フラグ(Hantei=True、Hantei=False)を用い、
Option1がクリック(True)された時に
判定用フラグ(Hantei=True)が変化するようにするのはどうでしょう?
開始釦、終了釦以外に別のプロシージャを用いて処理させる方法です。
処理部分は開始釦には存在させずに、別のプロシージャが実行します。
その為、終了釦でEnd文を使用する必要も無くなります。
Endは実行したときすぐに終了するので、使う場合は、リソースの解放をしてからのほうが良いです。
もし、メモリの確保とか、デバイスコンテキストの作成など、VBが解放してくれないようなコードを書いた覚えがなければ、気にしないでEndを実行して良いと思います。
ツイート | ![]() |