- - PR -
別フォームに値を渡す方法
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-01-21 10:51
じゃんぬねっと様
返信が遅くなり、申し訳ありません。 引用: -------------------------------------------------------------------------------- bankcode? TextCD.Text のことを指しているのでしょうか? -------------------------------------------------------------------------------- 申し訳ないです。間違いです。 正しくはB画面用DLL内のメソッドでの Public Sub setcd(ByVal code As System.String) TextCD.Text = code End Sub の上記2行目の「code」に値が入っていないということです。 私の予想ではここに値が入ってくるのかなと思っていたので。。。 Mainフォーム内をステップ実行で見ていくと、下記のB画面の「code」にデータを入れたいと思っているところ Dim frm As New B画面.B画面_Form frm.GetType.InvokeMember("setcd", Reflection.BindingFlags.InvokeMethod, Nothing, frm, New Object() {"A"}) ここはエラーもなく通っているのですが、値が入っていっていません。 ここが悪いのはわかるのですが、どうしたらいいのかさっぱりわかりません。。。 こんなに難しいことをしなくても、もっと簡単にできる方法があればそれを取り入れたいのですが、調べ方が悪いのかもしれませんがわかりませんでした。 何かいい方法はありませんでしょうか?? じゃんぬねっと様にはもう一つの方でも大変お世話になっていて、お手数をおかけしています。。。すいません。 | ||||||||||||
|
投稿日時: 2008-01-21 10:58
くまっち様
返信が遅くなり、申し訳ありません。 私の説明の仕方が悪いのかもしれません。 引用: -------------------------------------------------------------------------------- 私がすごく勘違いしている気がするので、一度確認いたします。 [DLL側] A画面を呼び出すコンポーネント B画面を呼び出すコンポーネント A画面 B画面 [Mainフォーム側] Mainフォーム で、、、MainフォームのA,B各ボタンは DLLのコンポーネントクラスを設定。 以上の構成で合ってますかね? そしてDLL側は汎用的に使える構成である必要があるのですよね? -------------------------------------------------------------------------------- だいたいあっているのですが、ちょっと補足です。 もしかしたらこの部分だけは勘違いがあるかもしれません。 DLLは2つで ・A画面を含んだA画面用処理コンポーネントがひとつ(Aコンポーネント) ・B画面を含んだB画面用処理コンポーネントがひとつ(Bコンポーネント) です。 それをMainフォームのAボタンにAコンポーネントを設定し、BボタンにBコンポーネントを設定しています。 初心者でうまく伝えられませんが、伝わりましたでしょうか? それでくまっち様に教えていただいた、リフレクションというやり方を自分なりに考えて使ってみましたがうまくいきませんでした。 この構成だとうまくいかないのですかね?? | ||||||||||||
|
投稿日時: 2008-01-21 13:32
> 返信が遅くなり、申し訳ありません。
いえいえ、週末でしたし気にすることないですよ。 > DLLは2つで はい、構成は把握できました。ありがとうございます。 で、私がリフレクションを使う方法を提示した理由は 「DLL側の修正が不可能な場合」ですので DLL側の修正が可能でしたら、私が最初に提示した方法で十分対応可能です。 同一ソリューションで有る必要が有るとかは関係ないです。 下記に1例として私的修正コードを記載いたします。 B画面ソース
B画面用コンポーネント
Mainフォーム
以上です。 上記修正を簡単に説明しますと ・Mainフォームの初期時にBtnBに対して、参照するTextBoxを教えておきます。 ・BtnBが押下され、OnClickが発生すると、B画面を生成しB画面に参照するTextBox値を設定します。 ・B画面を表示します(ShowDialog) B画面からの値取得が出来ているのですから、 その逆を行えば良いだけですよ。 [追記] DLLの依存部分は、Bコンポーネントには参照するTextBoxが必要なだけとなります。 もしこれでも依存度が高いのであれば、 BコンポーネントはStringを持つようにして MainフォームのTextBoxの値が変化する度に、Bコンポーネントに値設定するようにすれば良いと思います。 あと、必要最低限のコードですので、上記サンプルを使用するのであれば Nullチェックなど、適切に追加してください。 [ メッセージ編集済み 編集者: くまっち 編集日時 2008-01-21 13:36 ] | ||||||||||||
|
投稿日時: 2008-01-21 21:51
B フォームにイベントを定義する。 Main フォームでは、B コンポーネントのイベントをハンドリングする。 なんなら、「通知を行うフォーム」を定義して、A, B フォームはこの「通知を行うフォーム」を継承して作る(あるいはインターフェイスを定義して、実装する)。 |