• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ループ中にフォームを閉じると、様々な例外が出てしまう・・)

ループ中にフォームを閉じると例外が発生する問題の解決方法

このQ&Aのポイント
  • VB2005でフォームが一枚だけのシンプルなプログラムを作成しています。
  • For~Nextのループ内でApplication.DoEvents()を使用して他の操作を受けられるようにしていますが、ループ中にフォームを閉じると異常終了してしまいます。
  • 例外の内容はAccess.Violation.Exceptionです。フラグを使用してループを制御する方法を試しましたが効果はありませんでした。効果的なフォームの閉じ方を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

ん~ あんまり Endステートメントお勧めしません 本来なら Closeメソッドなどを呼び出して正規の手順を踏むようにしましょう Endステートメント使ったのは今回のような単純テストの場合や強制終了が必要な場合に限ったほうが良いように思います MSDNのEndステートメント辺りを参照してみてください

参考URL:
http://msdn2.microsoft.com/ja-jp/library/0wt87xba(VS.80).aspx
new_hope
質問者

お礼

お返事遅れてすみません。 MSDN、説明がまだ難しくて敬遠していたのですが、 大変参考になりました。 やはり参照するのは大切ですね。 どうもありがとうございました。

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

VB.NET2005の WindowsFormアプリケーションなら Closingイベントではなく FormClosingを使ったほうがいいかもしれません Closingイベントでフラグを立てる際に 引数の e.CancelをTrueに設定しないと終了処理が続行されてしまいます FormCloaingイベントで if ランニングフラグ=True then   e.Cancel = True   ランニングフラグ = False end if といった具合にします イベントの方では ランニングフラグ = true for i as integer= 0 to 100000   Application.DoEvents()   if ランニングフラグ = False then     exit for   end if next if ランニングフラグ = False then End end if といった具合でしょう

new_hope
質問者

お礼

ご回答ありがとうございます。 redfox63さんが教えてくださった方法で思うように終了できるようになりました。が、ちょっと疑問が沸きました。 さっきまでは、いろいろ試行錯誤してとりあえずDisposedイベントにEndと書いて無事終了させることができていました。 redfox63さんが教えてくださったように最後にEndで終了させるということは、ループからわざわざ抜け出すまでもなく、Exit ForをEndに書き換えてしまったり、あるいはClosingのところで直接Endではいけないのでしょうか。 また、現在テキトウにやったようにDisposedイベントのところでEndとするほうが、Closing以降の目に見えないイベントを飛ばさなくて済むので安心な気がするのですが、なにぶん初心者のため自信がありません。 実用上は例外も発生せず、無事終了できるようになったのですが、もう少しアドバイス頂けないでしょうか。 恐れ入りますが、よろしくお願いいたしますm(_ _)m

noname#60992
noname#60992
回答No.1

vb6ですが、フラッグを立てての終了処理はできました。  Dim x As Integer Private Sub Form_Load() x = 0 Do DoEvents If x = 1 Then Exit Do Loop x = 2 Unload Me End Sub Private Sub Form_Unload(Cancel As Integer) If x <> 2 Then x = 1 Cancel = True End If End Sub

new_hope
質問者

補足

ご返信ありがとうございます。 書いていただいたものを元にまっさらな新規プログラムでやってみたのですが、やはりダメでした。 VB2005にはUnLoadメソッドもUnLoadイベントも無いため、代わりにClosedイベント、Closingイベント、Disposeイベントでフラグを立ててみましたが、やはり終了しませんでした。「NullReferenceExceptionはハンドルされませんでした。」だそうです。 しかしボタンなどでフラグを立てて、ループを抜け出してから終了するとあっさり終了するのですが・・・。

関連するQ&A