投稿日 | : 2007/07/10(Tue) 09:20 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re^3: VBのプログラムのプロセスが残る |
よくある可能性としては、
アンロードされているフォーム上のプロパティ(あるいはコントロール)を
操作しようとしたため、自動的にフォームが(非表示状態で)ロードされてしまい、
アプリが終了しなくなっているかのように見えてしまう。
という状況が考えられます。
意図せぬロードを防ぐため、フォームのロード状況をログに記録してみてください。
デバッグ実行時には「Debug.Print」メソッド、EXE にコンパイルしての実行時には、
「App.LogEvent」メソッド(および、StartLogging メソッド)を使って記録すると良いでしょう。
Option Explicit
Private Sub Form_Initialize()
Debug.Print Hex(ObjPtr(Me)) & ":Form1/Initialize"
'
'ここに、通常の Form_Initialize 処理を記述
'
End Sub
Private Sub Form_Load()
Debug.Print Hex(ObjPtr(Me)) & ":Form1/Load"
'
'ここに、通常の Form_Load 処理を記述
'
End Sub
Private Sub Form_Unload(Cancel As Integer)
Debug.Print Hex(ObjPtr(Me)) & ":Form1/Unload"
'
'ここに、通常の Form_Unload 処理を記述
'
End Sub
Private Sub Form_Terminate()
Debug.Print Hex(ObjPtr(Me)) & ":Form1/Terminate"
'
'ここに、通常の Form_Terminate 処理を記述
'
End Sub
上記のように、それぞれのフォームの Initialize/Load/Unload/Terminate イベントにて、
トレースコードを埋め込んでおき、動作チェックを行います。
その結果、もし、途中で予期せぬ Load が発生しているようであれば、さらに、
どの処理を行ったときに、どのフォームがロードされたのかを追跡してみてください。
暗黙の自動ロードを排除できれば、アプリが残ってしまう件も解決すると思われます。
また、そうしたコーディングミス以外の可能性としては、アプリケーション内で
使用しているコンポーネントの都合による場合もあります。
たとえば、一部の通信系コンポーネントでは、コネクションの切断までに
数分程度の時間を要するという都合上、フォームを閉じても、しばらくの間は
アプリケーションが生き残り続けてしまうようなものもあります。
>> (3)自フォーム内のコントロールやプロパティにアクセスする際に、
>> Form1.Text1.Text のような構文を使ってはいませんか?
> (3)ご指摘のとおりの構文を使っています。
自フォーム上のモノにアクセスするのであれば、
Me.Text1.Text
の構文を使ってみてください。