お世話になります
【フォームあり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
| ツイート |
|