フォーム間での変数の引渡し方法を教えて下さい

タグの編集
投稿者 ジョニー  (社会人) 投稿日時 2011/3/11 16:46:38
少し解らないので質問させて下さい。フォーム間での変数の引渡し方法なのですが、form1の中から、form2.showと行った時にform2のloadイベントで、form1で使っていた変数の値を引き継いで実行したいのですが、色々調べてみましたが、ちょっと解らなかったので、ご指導下さい、引渡したい変数の値は、
一つか二つなので、出来ればpublicを使わないやり方か、ダミーのコントロールをフォームに貼り付けて、値を読むと言うやり方以外があれば、是非ご指導下さい。
投稿者 るきお  (社会人) 投稿日時 2011/3/11 17:07:47
こんにちは。
Showメソッドを自分でオーバーロードすることで、Show時に好きな引数を渡すことができます。
(Showじゃなくてもいいですが)

初級講座第29回 「2つ目のフォーム」のリスト12で紹介していますので参考にしてください。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard29.htm

リスト12引用
    
Public Overloads Sub Show(ByVal UserName As String)

    MsgBox("パラメータとして" & UserName & "を受け取りました。")
    Me.Show()

End Sub
投稿者 ジョニー  (社会人) 投稿日時 2011/3/11 17:12:55
しすおぺ氏、素早い、ご回答ありがとうございました。大変勉強になりました。
投稿者 shu  (社会人) 投稿日時 2011/3/11 17:15:30
Publicを使わないでの意味がわかりませんが、

Friend Class Form1
    Private m_strParam1 As String
    Friend Property Param1 As String
        Get
            Return m_strParam1
        End Get
        Set(value As String)
            m_strParam1 = value
        End Set
    End Property

    Private m_strParam2 As String
    Friend Property Param2 As String
        Get
            Return m_strParam2
        End Get
        Set(value As String)
            m_strParam2 = value
        End Set
    End Property

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Form2.Show()
    End Sub
End Class


Friend Class Form2

    Private Sub Form2_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Dim Param1 = Form1.Param1
        Dim Param2 = Form1.Param2
    End Sub
End Class


こんなんはOKですか?
投稿者 とくま  (社会人) 投稿日時 2011/3/15 16:10:57
> Publicを使わないでの意味がわかりませんが、
外部からアクセスする以上、Public な何かは必要でしょうね。
Friend なら良いという話でも無いと思います。
となると、「Public な変数を使わない」。。。といった所
でしょうか?

> こんなんはOKですか?
外部のオブジェクトに依存するクラスは少ない方がいいです。
Form1 は Form2.Show() する時点で Form2 を参照するしか
ありません。しかし、同じプロパティを経由する方法でも、
Form2 にプロパティをつくり、Form1 から設定する形にすると、
Form2 は Form1 を参照しなくて良くなります。

オブジェクトの管理は親クラスに任せ、子クラスは自分の
クラスで閉じる形に設計する事が可能です。
投稿者 shu  (社会人) 投稿日時 2011/3/15 17:21:59
問い合わせに忠実に書いただけですよ。

Form2_Loadでの参照タイミングが重要なこともあり
事前に設定しておくと動作が変わる可能性もありますからね。
(Form2.Showの直前からForm2_Loadの間に値が変化する場合とか)

るきおさんの書込みを見た後投稿したわけではありません。

もちろん可能な限りForm1からForm2へ値を設定した方が良いとは思います。
投稿者 アホ  (社会人) 投稿日時 2011/3/15 20:07:09
Public使わない意味を言えよ。

Form1でPublic宣言

Form2で「Form1.変数名」