Form_Load(VB6)で終了処理


青島  2008-02-21 08:21:21  No: 100334

VB6を使っています。

Form_Loadでフォルダチェックをして無ければメッセージボックスを
表示してEndしています。

現象は、メッセージボックスは表示されるのですが、終了しません。
ソースでは終了するのですが、実行ファイルでは終了せず、ボタンを
クリックしても何の反応もしません。

ControlBox=Falseにしているので、×がない状態です。

こういう現象になったことのある人いらっしゃいませんか?

メッセージボックスの表示後終了させたいと思っています。

何かEndがスルーされているような気がします。

ちなみにエラーハンドリングをForm_Load時にかけてますが、
その飛び先(ラベル)でもEndをやっています。


lol  2008-02-21 08:39:33  No: 100335

そーゆーのはFormのLoadイベントじゃなくてSub Main使ってやれ。


青島  2008-02-21 10:37:16  No: 100336

Sub Mainでやっても同じでした。

なぜスルーするのでしょうか?


さるべーじ  URL  2008-02-21 11:54:03  No: 100337

Endがスルーされる、というより、Endで強制終了かけた時に解放されない
オブジェクト等がメモリに残って終了できない、という状況のように思えます。

基本的に、Endはいろんな不具合を引き起こしますので、
禁止と言いたいほどお勧めしません。
Sub Mainから起動する場合、「Exit Sub」でプログラムを終了できます。
終了できない場合は確保したメモリ領域の解放を失念しているはずですので、
そちらの調査を行ってみる必要があるのではないでしょうか。

# Sub Main は記述したけどスタートアップがForm1のままだった、
# なんてオチの可能性もあります。


魔界の仮面弁士  2008-02-21 18:40:00  No: 100338

そもそも、『End を使わなければならない状況』の方が稀なので、
さるべーじさんが書かれていますように、End は使うべきでは無いかと。

Sub Main から起動させる場合には、Sub Main が終了し、かつ、
すべてのフォームがアンロードされれば、アプリは終了するはずなので。
(ActiveX のプロジェクトの場合は、この限りでは無いですが)

> Sub Mainでやっても同じでした。
この部分が、どのようなコードになっているのか気になります。

その Sub Main プロシージャは、
・条件を満たさない時は、そもそも Form1 にアクセスしない。
・条件を満たした場合のみ、Form1 をロードさせる。
というコードになっていますでしょうか。

もし、Sub Main から起動しつつも、条件判定のコード等が
フォーム側に含まれているのであれば、その部分を見直す必要があります。

> 何かEndがスルーされているような気がします。
そもそも、End の部分に到達していなかった、という可能性は無いでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加