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


あっきー  2005-07-27 21:14:49  No: 91110  IP: [192.*.*.*]

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

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-27 21:42:50  No: 91111  IP: [192.*.*.*]

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

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

編集 削除
あっきー  2005-07-28 12:53:37  No: 91112  IP: [192.*.*.*]

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

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

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

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

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

編集 削除
ねろ  2005-07-28 13:12:52  No: 91113  IP: [192.*.*.*]

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

編集 削除
K.J.K.  2005-07-28 14:11:36  No: 91114  IP: [192.*.*.*]

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

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

編集 削除
ねろ  2005-07-28 15:39:44  No: 91115  IP: [192.*.*.*]

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

編集 削除
あっきー  2005-07-28 19:36:40  No: 91116  IP: [192.*.*.*]

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

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

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

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

編集 削除
魔界の仮面弁士  2005-07-28 21:49:22  No: 91117  IP: [192.*.*.*]

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

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

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

編集 削除