フォームを閉じると例外エラーが発生する


あっきー  2005-07-28 06:14:49  No: 91110

下記の環境でソフトを作っています。

VB6.0  SP6
WinXP SP2

質問は以下の現象がでて悩んでいます。

フォームにピクチャーボックスを貼り付け、その中にテキストボックスを貼り付けます。
そしてピクチャーボックス及びテキストボックスをコントロール配列にするため
Indexプロパティにそれぞれ0をセットします。
そして、テキストボックスのMultiLineプロパティをTrueにしておきます。

次にフォームのForm_Loadイベントプロシージャに以下のコードを記述します。
  Load Picture1(1)
  Load Text1(1)
  
  Set Text1(1).Container = Picture1(1)

そして、フォームのクローズボタンを押してフォームを閉じようとすると
例外エラーが発生しIDE環境もろとも落ちてしまいます。

この原因は何なんでしょうか?

ちなみにテキストボックスのMultiLineプロパティをFalseにすると、この現象
は発生しません。

よろしくお願いします。


魔界の仮面弁士  2005-07-28 06:42:50  No: 91111

当方でも再現しました。(泣)

とりあえず、Unload イベントにて、Text1(1) を Unload してやると
エラーは発生しなくなりました。試してみてください。


あっきー  2005-07-28 21:53:37  No: 91112

返信ありがとうございます。

当方でもいろいろ試した結果、フォームのUnloadにてロードしてやった
テキストボックスをUnloadすると正常に終了することを確認しました。

フォームが閉じるとき、フォーム上のコントロールは自動的にアンロード
されるような気がするのですが、手動で行うのと何かちがうんでしょうね。

現象は回避できましたが、何か情報があれば宜しくお願いします。

※さんざん検索しましたが、なかなか同様の事象がヒットしません。


ねろ  2005-07-28 22:12:52  No: 91113

>※さんざん検索しましたが、なかなか同様の事象がヒットしません。
いや全く同じ事象がヒットするのですが、解決方法は書かれていません。
http://forums.belution.com/ja/vb/000/010/88.shtml


K.J.K.  2005-07-28 23:11:36  No: 91114

子Windowの破棄とコントロールオブジェクトの破棄の処理が、
そもそも想定されていたタイミングと異なるので、コントロール
オブジェクトの破棄中の処理で問題がでるからでしょう。

VB6では、そういうことをせず、UserControlを使ってまとめた
ものを、動的に追加していく程度にすべきでしょう。


ねろ  2005-07-29 00:39:44  No: 91115

OSがプロテクトしている領域に、アクセスしようとして出るこのような
エラーは、明らかにVB6の不具合によるもので、使用者の間違った
使い方によるものでは無いと私は考えます。
対策方法として最新のSPを当て直らなければ、ほぼ諦めとしたものでしょう。
しかしながら、このエラーの様に現象が限定的で、魔界の仮面弁士さんの
おっしゃるような、回避方法がある場合は、それ程目くじらを立てる必要は無く
粛々と処理をすればいいだけのような気がします。
それとも何かその様に出来ない理由があるのでしょうか。


あっきー  2005-07-29 04:36:40  No: 91116

ねろさん
>http://forums.belution.com/ja/vb/000/010/88.shtml
恐れ入りました。
ここにはたどり着けなかったです。
大分前から同様の事象がWin2Kでも起こっているようですね。

リンク先の掲示板にもかかれているようにIDEの不具合かなと思いますし
分かっていればIDEで動作させている時にも回避できるので問題にはならないです。

ただ、根本的な解決とはなっていないので、未解決のまま〆させていただきます。

ありがとうございました。


魔界の仮面弁士  2005-07-29 06:49:22  No: 91117

デバッグ時は、開発環境を巻き込んで落ちましたが、
exe 実行時にも、やはり落ちますね。

また、VB6だけでなく、VB4-32/Upd2 + Win2k/SP4 でも、
同じ現象が発生しました。(^_^;)

きちんとコントロールをUnloadしておけば、問題無いですけどね。


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

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






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