|
■No91275 (まどか さん) に返信 > フォーム1とフォーム2を用意し、 > フォーム2で変数をパブリック宣言して、 > フォーム1でその変数に値を代入してフォーム2でその値を使いたいのですが、上手くいきませんでした。
他のフォームの Public メンバーにアクセスするためには、 「フォーム変数.Atai = 」のようにして、 どのフォームインスタンスの Atai なのかを指定せねばなりません。
Public Class Form2 Public Atai As String Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load '自分自身のメンバーにアクセスする場合は、 '「Atai = 」でも「Me.Atai = 」でも構わない Me.Atai = Now.ToString("HH:mm:ss.fff") Me.Text = Atai End Sub End Class
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'Form2 から Atai を読み取る Button1.Text = "既定の Form2 インスタンスから読み取り" Button2.Text = "全ての Form2 インスタンスから読み取り"
'Form2 を起動する Button3.Text = "既定の Form2 インスタンスから表示(一つのみ)" Button4.Text = "Form2 インスタンスを明示的に作成して表示(幾つでも)"
'Button3 を 2 回押したことにする Button3.PerformClick() Button3.PerformClick() End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MsgBox("既定の Form2 インスタンスの Atai =" & My.Forms.Form2.Atai) End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim title As String = "Form2 の数:" & Application.OpenForms().OfType(Of Form2)().Count For Each f2 In Application.OpenForms().OfType(Of Form2)() MsgBox(f2.Text & "の Atai =" & f2.Atai, MsgBoxStyle.Information, title) Next End Sub
'このボタンを何度押しても、Form2 は一つだけしか表示されない Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click '既定のフォームインスタンスを使う場合(何度ボタンを押してもフォームは1つ) If Not Form2.Visible Then Form2.Show(Me) End If 'MsgBox("既定の Form2 インスタンスの Atai =" & Form2.Atai) End Sub
'このボタンを押すたびに、表示される Form2 が増えていく Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click 'フォームのインスタンスを明示的に作成する場合 Dim f As New Form2() f.Show(Me) 'MsgBox("今起動したフォームの Atai =" & f.Atai) End Sub End Class
|