フォーム間での変数の引渡し方法を教えて下さい
投稿者 るきお  (社会人)
投稿日時
2011/3/11 17:07:47
こんにちは。
Showメソッドを自分でオーバーロードすることで、Show時に好きな引数を渡すことができます。
(Showじゃなくてもいいですが)
初級講座第29回 「2つ目のフォーム」のリスト12で紹介していますので参考にしてください。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard29.htm
リスト12引用
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ですか?
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 を参照しなくて良くなります。
オブジェクトの管理は親クラスに任せ、子クラスは自分の
クラスで閉じる形に設計する事が可能です。
外部からアクセスする以上、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へ値を設定した方が良いとは思います。
Form2_Loadでの参照タイミングが重要なこともあり
事前に設定しておくと動作が変わる可能性もありますからね。
(Form2.Showの直前からForm2_Loadの間に値が変化する場合とか)
るきおさんの書込みを見た後投稿したわけではありません。
もちろん可能な限りForm1からForm2へ値を設定した方が良いとは思います。
投稿者 アホ  (社会人)
投稿日時
2011/3/15 20:07:09
Public使わない意味を言えよ。
Form1でPublic宣言
Form2で「Form1.変数名」
Form1でPublic宣言
Form2で「Form1.変数名」
一つか二つなので、出来ればpublicを使わないやり方か、ダミーのコントロールをフォームに貼り付けて、値を読むと言うやり方以外があれば、是非ご指導下さい。