DOBON.NET DOBON.NETプログラミング掲示板過去ログ

親フォームデータの取得方法

環境/言語:[OS : Windows XP Home Edition / 言語 : Visual Basic .NET]
分類:[.NET]

【解決したい問題】

よろしくお願いします。
フォーム間のデータの取得方法について質問です。


フォーム1を親としてフォーム2を子として
フォーム1のデータをフォーム2で使いたい場合に


--フォーム1--

Public riyou As String="フォーム1のデータ!"

'ボタンクリックでウィンドウ作成
Dim Zikan As New Form2
Zikan.ShowDialog()


--フォーム2--

TextBox1.text=DirectCast(MdiParent, フォーム1).riyou

宣言で「Dim」ではなく「Public」にするという事は突き止めたのですが他の理由が分からず
上記のままだとインスタンスが設定されていないとエラーが出てしまいます。
初歩的は質問かとは思いますが、自分では解決できなかったためご指導お願いします。

【解決するために何をしたか】

掲示板等で同じような問題はいくつか発見したのですが、解決できる投稿させて頂きました。
じゃんぬねっと です。

■No8918に返信(みらいさんの記事)
> フォーム1を親としてフォーム2を子として
> フォーム1のデータをフォーム2で使いたい場合に

と、仰ってるわりに、

> 'ボタンクリックでウィンドウ作成
> Dim Zikan As New Form2
> Zikan.ShowDialog()

こちらで、MDI Form との結びつきはなされてませんが、これは問題ないのでしょうか?

以下、私が試したコード。

Source:---------------------------------------------------------
【MDI 親フォーム】

    Friend fStr As String = "HogeFooBar"

    Private Sub FormMain_Load(...) Handles MyBase.Load
        Dim hForm1 As New Form1()

        hForm1.MdiParent = Me

        hForm1.Show()
    End Sub

----------------------------------------------------------------
【MDI 小フォーム】

    Private Sub Button1_Click(...) Handles Button1.Click
        TextBox1.Text = DirectCast(Me.MdiParent, FormMain).fStr
    End Sub
返信が大分おそくなりまして、すいません。
じゃねっとさまのコードをためさせて頂きました。

親フォームhForm1で
"このフォームの MDIParent として指定されたフォームは MDIContainer ではありません。"
とエラーが出てしまいます。

返事が遅れて大変申し訳ありません。どこを直せばよいかご指導お願いいたいます。
じゃんぬねっと です。

■No8956に返信(みらいさんの記事)
> "このフォームの MDIParent として指定されたフォームは MDIContainer ではありません。"
> とエラーが出てしまいます。

言葉足らずで申し訳ありませんでした。m(_ _)m
IsMdiContainer プロパティを True としてください。
じゃんぬねっとさま
早速のご指導ありがとうございます。
前レスお名前を間違えていた、すいません<m(__)m>
無事出来ることが出来ました。

そこで私の勉強不足、説明不足で大変恐縮なのですが、
フォーム1の中にフォーム2が出てくるのではなく
フォーム2を外に出して表示する
とった事をするにはどうしたらよいでしょうか?
親、子という単語の使い方が間違っていたようで、申し訳ありません。

>hForm1.MdiParent = Me

上記の部分をMeではなく外といった意味にすればいいのかと思い調べたのですが、見つからず、先週購入した本にもMDIの使用方法しか乗っていないため苦戦しています。
重ね重ねで申し訳ありませんが、ご指導お願い致します。
じゃんぬねっと です。

■No8960に返信(みらいさんの記事)
> 前レスお名前を間違えていた、すいません<m(__)m>
いえいえ、お気になさらないでください。
よくあることです。

> 親、子という単語の使い方が間違っていたようで、申し訳ありません。

どうやら、

> -----------------------------------------------------------
■No8918に返信(みらいさんの記事)
TextBox1.text=DirectCast(MdiParent, フォーム1).riyou
> -----------------------------------------------------------

と「MdiParent」なる表現があったものですから、私が勝手に勘違いしていたようです。
MDI 云々は関係なかったようで、申し訳ありませんでした。

> 上記の部分をMeではなく外といった意味にすればいいのかと思い調べたのですが、
> 見つからず、先週購入した本にもMDIの使用方法しか乗っていないため苦戦しています。
> 重ね重ねで申し訳ありませんが、ご指導お願い致します。

親子ということは、通常 Modal 表示になるのでしょうか?
単純に書けば、(本来はプロパティを通すべきですが)

Source:----------------------------------------------------
'[オーナ側]

    Friend fStr As String = "Hoge"

    Private Sub Button1_Click(...) Handles Button1.Click
        Dim hForm1 As New Form1()
        hForm1.ShowDialog(Me)
    End Sub

-----------------------------------------------------------
'[被オーナ側]

    Private Sub Button1_Click(...) Handles Button1.Click
        TextBox1.Text = DirectCast(Me.Owner, FormMain).fStr
    End Sub

------------------------------------------------------------

とか。

敢えて、言いませんでしたが、仕様上、親子関係であるのならば、
本来、渡したいデータを初めに渡しておくべきです。
要するに、双方向では親子とは言えませんから。

今回とは逆の事例。
http://www7.big.or.jp/~pinball/discus/vb/57179.html
じゃんぬねっと様

出来ました!!
知識不十分な私に丁寧にご指導頂き、大変ありがとうございました。
親・子という関係も私なりに理解することが出来ました。日々勉強の毎日です。

これからもこの掲示板にはお世話になると思いますが、
今度は分かりやすく、知識を備えてこれるようにしたいと思います。

本当にありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板