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

フォームからフォームへのデータ引渡し

分類:[.NET]

先日は、各位様にお世話になりました。

また、新たな関門に阻まれております。。(^_^;)

メインのフォーム(Form1)のTextBox1にて、クリックすると、Form2が開き
そのForm2にあるListBox1で選択したデータを、Form1のTextBox1に表示
させる という処理をしたいのですが。。。。。(ーー;)

以下は、ラベルをクリックして、別Formを表示させるようにしています。

-------- Form1

Private Sub Label1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Label1.Click
Dim f2 As New Form2
f2.StartPosition = FormStartPosition.CenterScreen
f2.Show()

TextBox1.Text = f2.ListBox1.SelectedItem

End Sub

----------- Form2

Public Class Form2

Private Sub Form2_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Me.ListBox1.Items.Add("AA")
Me.ListBox1.Items.Add("BB")
Me.ListBox1.Items.Add("CC")

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

Form1.TextBox1.Text = ListBox1.SelectedItem

Me.Close()

End Sub

End Class
----------------

ListBox1.SelectedItem で データは取得できていることは確認できて
 いるのですが、Form1のTextBox1に表示できません。。。(ToT)/~~~
 何が不足しているのでしょうか?

 有識者の皆様方、ご教授方よろしくお願いします。
'Win7 x64 Ultimate / VB2008 Professional SP1 / VB2005 Professional SP1
'Form1 / Form2 はIDEから生成
'当方では、動いています。
'
'Form1.vb
Option Explicit Off
Option Strict Off
Option Compare Binary

Public Class Form1

    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
        Dim f2 As New Form2
        f2.StartPosition = FormStartPosition.CenterScreen
        f2.Show()
                  'Option Strict On 時は、以下の様に
        'TextBox1.Text = CStr(f2.ListBox1.SelectedItem)

        'Labelをボタン的に使うのは、好みではありませんが、
        ''こういう書き方もできます。
        'Form2.StartPosition = FormStartPosition.CenterScreen
        'Form2.Show()

    End Sub
End Class


'Form2.vb
Option Explicit Off
Option Strict Off
Option Compare Binary


Public Class Form2

    Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Original は、MyBase.Load
'IDE 自動生成では、Me.Load
'どっちでも、動きますが。

        Me.ListBox1.Items.Add("AA")
        Me.ListBox1.Items.Add("BB")
        Me.ListBox1.Items.Add("CC")
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form1.TextBox1.Text = ListBox1.SelectedItem
                  'Option Strict On 時は、以下の様に
        'Form1.TextBox1.Text = CStr(ListBox1.SelectedItem)
        'Form1.TextBox1.Text = ListBox1.SelectedItem.ToString

        Me.Close()
    End Sub
End Class
daiveさん

解決しました。!(^^)!

実は、Formを3つ使っていたのですが、
最初のフォーム1(Form1)でボタンをクリックして
Form2を開き、ラベルをクリックして Form3を開きデータを
ListBox1から選び、Form2のTextBox1に表示させようとしていました。

確かに2つのFormでは問題なく表示できましたが、3つにすると
表示されなかったのです。。。。(ToT)/~~~

ところが、

---Form1
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim f2 As New Form2
f2.StartPosition = FormStartPosition.CenterScreen
f2.Show()
End Sub



Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Form2.StartPosition = FormStartPosition.CenterScreen
Form2.Show()
End Sub

にすることで解決しました。

Dim f2 As New Form2

とすると、 Form1→Form2→Form3→Form2とフォーム移動すると
データが初期化されてしまうのですね。。。

また、一つ勉強になりました。   

VB2008を使い始めて間もない初心者で、まだ基礎が不十分であり
お騒がせしました。<m(__)m>



> 'Win7 x64 Ultimate / VB2008 Professional SP1 / VB2005 Professional SP1
> 'Form1 / Form2 はIDEから生成
> '当方では、動いています。
> '
> 'Form1.vb
> Option Explicit Off
> Option Strict Off
> Option Compare Binary
>
> Public Class Form1
>
> Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
> Dim f2 As New Form2
> f2.StartPosition = FormStartPosition.CenterScreen
> f2.Show()
> 'Option Strict On 時は、以下の様に
> 'TextBox1.Text = CStr(f2.ListBox1.SelectedItem)
>
> 'Labelをボタン的に使うのは、好みではありませんが、
> ''こういう書き方もできます。
> 'Form2.StartPosition = FormStartPosition.CenterScreen
> 'Form2.Show()
>
> End Sub
> End Class
>
>
> 'Form2.vb
> Option Explicit Off
> Option Strict Off
> Option Compare Binary
>
>
> Public Class Form2
>
> Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
> 'Original は、MyBase.Load
> 'IDE 自動生成では、Me.Load
> 'どっちでも、動きますが。
>
> Me.ListBox1.Items.Add("AA")
> Me.ListBox1.Items.Add("BB")
> Me.ListBox1.Items.Add("CC")
> End Sub
>
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
> Form1.TextBox1.Text = ListBox1.SelectedItem
> 'Option Strict On 時は、以下の様に
> 'Form1.TextBox1.Text = CStr(ListBox1.SelectedItem)
> 'Form1.TextBox1.Text = ListBox1.SelectedItem.ToString
>
> Me.Close()
> End Sub
> End Class
解決済み!

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