お世話になります
【フォームありdllの作成と呼び出し】の続きです
フォームありdllを作成しようとしています
標準exeのプロジェクトと
ActiveX DLLのプロジェクトを
グループ化させています
フォームありdll呼び出しのため
クラスモジュール内にsub(仮にsub窓口とします)を設け
sub窓口内でパラメータをチェックした後
DLLのForm.Show vbModal(これもsub窓口内で実行)
としています
呼び出し元の画面で
Unload Me
Set 呼び出し元画面 = Nothing
Call いま作りたいDLL.sub窓口(パラメタ類)
としています
元画面を消して
呼び出したDLLのFormだけを表示させたいのですが
ワンステップ実行してみると
Unload Me で確かに呼び出し元画面が消えるのですが
Call のところで呼び出し元画面のForm_Load()へ飛んでしまいます
ネットで調べてはみましたが
サンプルは同一プロジェクト内でFormをいくつか作る
というものばかりでした
なぜCallのところで
呼び出し元画面のForm_Load()へ飛んでしまうのでしょう?
回避する方法があればご教示願いたいです
また
もっとスマートなFormの呼び出し方があれば
併せてご教示いただきたく
お願いいたします
フォームがアンロードされている時に、フォームのプロパティや
コントロールなどにアクセスすると、自動的にロードされる仕様です。
具体的なコードを見ないと修正案は出せませんが、基本的には
プログラムの書き方自体に問題があるということでしょう。
暗黙のフォーム名インスタンスを使わないようにするなど、
コードの見直しが必要かと思います。
ヘルプの「Visual Basic フォームの有効期間」のトピックも参照してみてください。
>仮面弁士さん
お名前いろんなところで聞いております
ご回答ありがとうございます
返信が遅くなりすみませんでした
Call いま作りたいDLL.sub窓口(パラメタ類)
のパラメタの中にMe.Nameを含めておりました
いろいろなexeからDLLを呼びたいと思っておりましたので
DLLの処理終了後の戻り先を渡しておこうという主旨でしたが
DLL内のFormをvbModalで.Showすればいいな
ということで
Me.Nameをパラメタから除き
思うように動作するようになりました
ご紹介いただきました
【Visual Basic フォームの有効期間】
読んでみております
Formのイベントについては意識しておりましたが
Formの状態までは意識していなかったように思います
そもそもUnloadしたのにMe.Nameを参照しようとしていたあたりが…
併せて【Unload ステートメント】も読んでおります
そこにも
フォーム上のいずれかのコントロールにアクセスすると、
フォームは自動的に再びロードされます。
との記述がありました
いろいろ勉強になりました
ありがとうございました
解決チェックを忘れてましたw
ツイート | ![]() |