下記の環境でソフトを作っています。
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にすると、この現象
は発生しません。
よろしくお願いします。
当方でも再現しました。(泣)
とりあえず、Unload イベントにて、Text1(1) を Unload してやると
エラーは発生しなくなりました。試してみてください。
返信ありがとうございます。
当方でもいろいろ試した結果、フォームのUnloadにてロードしてやった
テキストボックスをUnloadすると正常に終了することを確認しました。
フォームが閉じるとき、フォーム上のコントロールは自動的にアンロード
されるような気がするのですが、手動で行うのと何かちがうんでしょうね。
現象は回避できましたが、何か情報があれば宜しくお願いします。
※さんざん検索しましたが、なかなか同様の事象がヒットしません。
>※さんざん検索しましたが、なかなか同様の事象がヒットしません。
いや全く同じ事象がヒットするのですが、解決方法は書かれていません。
http://forums.belution.com/ja/vb/000/010/88.shtml
子Windowの破棄とコントロールオブジェクトの破棄の処理が、
そもそも想定されていたタイミングと異なるので、コントロール
オブジェクトの破棄中の処理で問題がでるからでしょう。
VB6では、そういうことをせず、UserControlを使ってまとめた
ものを、動的に追加していく程度にすべきでしょう。
OSがプロテクトしている領域に、アクセスしようとして出るこのような
エラーは、明らかにVB6の不具合によるもので、使用者の間違った
使い方によるものでは無いと私は考えます。
対策方法として最新のSPを当て直らなければ、ほぼ諦めとしたものでしょう。
しかしながら、このエラーの様に現象が限定的で、魔界の仮面弁士さんの
おっしゃるような、回避方法がある場合は、それ程目くじらを立てる必要は無く
粛々と処理をすればいいだけのような気がします。
それとも何かその様に出来ない理由があるのでしょうか。
ねろさん
>http://forums.belution.com/ja/vb/000/010/88.shtml
恐れ入りました。
ここにはたどり着けなかったです。
大分前から同様の事象がWin2Kでも起こっているようですね。
リンク先の掲示板にもかかれているようにIDEの不具合かなと思いますし
分かっていればIDEで動作させている時にも回避できるので問題にはならないです。
ただ、根本的な解決とはなっていないので、未解決のまま〆させていただきます。
ありがとうございました。
デバッグ時は、開発環境を巻き込んで落ちましたが、
exe 実行時にも、やはり落ちますね。
また、VB6だけでなく、VB4-32/Upd2 + Win2k/SP4 でも、
同じ現象が発生しました。(^_^;)
きちんとコントロールをUnloadしておけば、問題無いですけどね。
ツイート | ![]() |