- PR -

別プロジェクトの「Exe」画面、「Dll」画面間のデータ連携

1
投稿者投稿内容
Strider
会議室デビュー日: 2006/08/16
投稿数: 6
投稿日時: 2006-08-16 11:56
Strider です。 よろしくお願いします。

VB2005 にて同一ソリューション内の第一プロジェクトにて
System.Windows.Forms.Form で作成した画面(FormZ : 拡張子「EXE」)があります。 
この画面上に配置されたボタンをクリックすると、第二プロジェクトで作成された
画面(FormY : 拡張子「DLL」)を起動するように現在なっております。

この FormY.dll の画面上にある DataGridView コントロールで選択した一行の
データを呼び出し側 FormZ.exe へ渡したい場合の手法が分かりません。

どなたか良い方法をご存知でしたらご教授願います。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-08-16 12:11
参照設定(プロジェクト参照含む)している限り、プロジェクトが別かどうかは Friend キーワードくらいしか影響しませんが。
普通は FormY がそういう値を返すプロパティまたはメソッドを Public で公開しますね。
// 丁度 OpenFileDialog の実装です。
ただ、FormY をモーダル (ShowDialog) で呼び出すのかモードレス (Show) で呼び出すのかで方法も選ぶ必要がありますが。
Strider
会議室デビュー日: 2006/08/16
投稿数: 6
投稿日時: 2006-08-16 12:29
少し質問の記述不足でした。 FormZ.exe の第一プロジェクトは参照設定に
第二プロジェクトを追加してあり、ボタンをクリックした時には FormY.dll を
「ShowDialog」でモーダル表示しています。

FormY 画面の DataGridView コントロールで一行選択した後に、
FormY の「選択」ボタンを押して FormZ に選択行データを反映したい(※1)のです。
※1の処理の記述は FormY を閉じて、FormZ に戻ってからですか?
それともFormYの「選択」ボタン押下時のイベント内で FormZ へデータを渡す処理を
記述するべきですか?
また、この二画面のデータ連携をするには何か具体的なメソッドとかありますか?
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-08-16 12:40
コード:
※FormZ
Dim formY As New FormY
formY.ShowDialog(Me)

Dim result As Integer
result = formY.Result


Hongliang さんの仰る通り、閉じてからだとこんな感じです。
要は、FormY が結果を返してやるインターフェースがあればよい。

閉じないで反映となると、もう少し工夫が必要ですね。
FormZ のインスタンスを FormY に渡すのが定石ですが、参照が廻るので FormY は「型FormZ」を使えない。
_________________
囚人のジレンマな日々
Strider
会議室デビュー日: 2006/08/16
投稿数: 6
投稿日時: 2006-08-16 13:24
因人さん、Hongliangさん返信ありがとうございました。

FormY.dll に結果を返すインターフェースを記述して
FormY を閉じてから FormZ.exe へのデータ反映できました。

ドサクサに紛れてもう一つ質問なのですが、
FormY.dll の "「選択」ボタンが押された。" という判断は
FormZ.exe で認識する良い方法はありますか?
1

スキルアップ/キャリアアップ(JOB@IT)