- - PR -
VB.NETでDLLとEXEで値の受け渡し
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-15 09:53
いつも参考にさせて頂いております。
A.EXE(MDI親フォーム)とB.DLL(MDI子フォーム)があります。 A.EXEからB.DLLを操作するのは出来たのですが(参照設定にて) B.DLLからA.EXEを操作する方法が分からず投稿いたしました。 A.EXEにはPublic Sharedで公開された変数があり B.DLLからその値を参照/変更したいのです。 相手がDLLであれば参照設定することによって出来るのですが EXEの場合はどうすればよいのでしょうか? ご教授お願いいたします。 | ||||||||
|
投稿日時: 2004-04-15 10:34
なんか、この件に関しては設計思想上いくつか問題がありそうですが…。
たとえば、今はA.EXE[親]がB.DLL[子]のフォームを開く設計でも、次にC.EXE[別の親]からB.DLL[子]のフォームを開いたら、どうなりますか? それはともかく、私だったら、B.DLLのフォームに、親フォームへ渡したい情報をPublicプロパティで保持し、それを親フォームから参照するように考えます。 | ||||||||
|
投稿日時: 2004-04-15 10:40
もうひとつ大きな疑問につき、発言を分けます。
なぜShared?? もしA.EXEの親フォームが2枚以上開いていたり、B.DLLの子フォームを2枚以上開いていたら、どんな挙動を示すでしょうか。 親フォームも子フォームも絶対に1枚しか開かない保障でもありますか? [ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-04-15 10:42 ] | ||||||||
|
投稿日時: 2004-04-15 11:26
ぢゃん♪さん、レスありがとう御座います。
「Shared」の意味をよく理解できていませんでした。 勉強不足で申し訳ありません。 質問を若干変更させていただきます。 やりたいこと A.EXE(MDI親)からB.DLL(MDI子)を開きます。 このB.DLLはメニュー画面です。 さらにB.DLLからC.DLL(MDI子)を開き、B.DLLは閉じます。 C.DLLは入力画面です。 C.DLLを閉じたら、B.DLLを開きます。 現状 B.DLLからC.DLLを開くとB.DLLを閉じたときにC.DLLも閉じてしまう為 B.DLLからA.EXEにたいし、「C.DLLを開きなさい」と命令したいと考えてます。 ぢゃん♪さんがおっしゃるように >>B.DLLのフォームに、親フォームへ渡したい情報をPublicプロパティで保持し、 >>それを親フォームから参照するように考えます をやりたいのです。 B.DLLに次に開くDLLの情報をPublicプロパティで保持するのは出来るのですが どのタイミング(イベント)でA.EXEからB.DLLのPublicプロパティを取得して 良いかが分かりません。 A.EXEから「B.DLLが閉じた」イベントを感知することは出来ますでしょうか? よろしくお願いいたします。 | ||||||||
|
投稿日時: 2004-04-15 11:28
ついでに言うと、
DLLでもできません。 循環参照になってしまうからです。 | ||||||||
|
投稿日時: 2004-04-15 12:46
Form.Closed イベントでしょう。 VB.NETのようですから、「イベントとイベント・ハンドラ」を参考にしましょう。 子フォームを開く枚数が決まっている場合と、開く枚数が不定な場合とでは、方法が変わるように思います。 たとえば、子フォームを開く枚数が決まっていない前提なら、親フォームのメソッド(をAddressOfで)子フォームに渡し、子フォームでClosedイベントを拾ったら、そのイベント処理中で親フォームのメソッドを呼び出す、と。 (C#なら、もうちょっとスマートな方法が使えるんですけどね……。) [ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-04-15 12:53 ] | ||||||||
|
投稿日時: 2004-04-15 13:13
ついでですから、(MDIではありませんが)ちょちょいと作ってみたサンプルコードを。
[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-04-15 13:14 ] | ||||||||
|
投稿日時: 2004-04-15 15:01
ぢゃん♪さま
わざわざ、サンプルまでご提示いただきましてありがとう御座います。 早速試してみます。 |