Do〜Loopを抜けるには。


剛の髪型…。  2003-02-20 15:58:40  No: 106081  IP: [192.*.*.*]

開始釦を押下すると、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

編集 削除
とろ  2003-02-20 16:26:44  No: 106082  IP: [192.*.*.*]

フラグを用意して、
Form_Unload イベントなどでフラグをセットし、
Do Loop の中でもそのフラグをチェックするようにすれば良いのでは?

編集 削除
剛の髪型…。  2003-02-20 17:53:14  No: 106083  IP: [192.*.*.*]

早速の回答ありがとうございます。

ループを抜ける方法と書いたのですが、
VB上での「停止(E)」のような、一発でこのプログラムを
停止させることは出来ないのでしょうか?

編集 削除
nanashi  2003-02-20 18:15:16  No: 106084  IP: [192.*.*.*]

End

でもこれって強制終了なんであんまりオススメしません。

編集 削除
剛の髪型…。  2003-02-20 22:24:24  No: 106085  IP: [192.*.*.*]

強制終了だと、何故あんまりオススメで無いのでしょうか?

編集 削除
たかみちえ  URL  2003-02-20 23:24:45  No: 106086  IP: [192.*.*.*]

ちゃんとした終了処理ができないということです。強制ですから。
  それでは何が起こるか、保障できませんね。

編集 削除
oku  URL  2003-02-20 23:26:37  No: 106087  IP: [192.*.*.*]

プロシージャを抜けるならExit Subでも良いですよ。
LOOpを抜けるならExit Doでも。

編集 削除
とおりすがり  2003-02-21 09:06:35  No: 106088  IP: [192.*.*.*]

強制終了についてですが、理由はさまざまですが、結論はメモリが開放されない可能性が高いからです。
例えば、データベースの接続コネクト等が挙げられますね。
みなさんも経験があると思いますが、デバッグ途中で強制終了を何回もした場合、
急にPCの動作が遅くなった事はありませんか?
詳しく説明しませんが、データベースとのセッションが切れていない為に起こる現象だと言われています。
そういった感じもありますので、強制終了はお勧めできない訳です。

編集 削除
nanashi  2003-02-21 10:08:26  No: 106089  IP: [192.*.*.*]

オススメしない理由は他の人が答えてくれてますんで(^^;
でもちゃんと理解して、闇雲に使わなければ使ってもイイんじゃないかとも思います。
明示的に自プロセスを殺すってことで……(間違ってるかなー?)

今回の場合などは とろさんやokuさんの意見通り
Form_QueryUnloadでフラグを立てて
Do〜Loop内でフラグチェックをしてExit Doするのが良いと思います。

編集 削除
通りすがり  2003-02-21 14:50:32  No: 106090  IP: [192.*.*.*]

Option1 = True とせずに判定用フラグ(Hantei=True、Hantei=False)を用い、
Option1がクリック(True)された時に
判定用フラグ(Hantei=True)が変化するようにするのはどうでしょう?

開始釦、終了釦以外に別のプロシージャを用いて処理させる方法です。
処理部分は開始釦には存在させずに、別のプロシージャが実行します。
その為、終了釦でEnd文を使用する必要も無くなります。

編集 削除
Y2  2003-02-21 20:05:28  No: 106091  IP: [192.*.*.*]

Endは実行したときすぐに終了するので、使う場合は、リソースの解放をしてからのほうが良いです。

もし、メモリの確保とか、デバイスコンテキストの作成など、VBが解放してくれないようなコードを書いた覚えがなければ、気にしないでEndを実行して良いと思います。

編集 削除