FormからFormへの値の引渡しについて


初心者  2007-12-08 11:05:32  No: 138332  IP: 192.*.*.*

Form1からform2に値を引き渡すことは出来るのでしょうか?
思い当たることはやってみたのですが、どうしてもいきません。
わかる方がいましたら、ぜひ教えてください。
よろしくお願いします。

編集 削除
lol  2007-12-09 04:30:33  No: 138333  IP: 192.*.*.*

>出来るのでしょうか?
できるね。

>思い当たることはやってみたのですが
やった事は書こうね。

>わかる方がいましたら
分からない人のほうが少ないね。


△△△.XXXX = □□□
こんな感じだね。 
△△△はFo○○○のイン○タ○○ね。
XXXXは○○rm2の要素(?)ね。
□□□は渡したい○ね。

編集 削除
まさ  2007-12-09 22:00:56  No: 138334  IP: 192.*.*.*

過去にも同じような事を書いた記憶が…。

>Form1からForm2に値を引き渡すことは出来るのでしょうか?
可能ですが、渡し方は??
Form2の関数へ渡すのであれば、Public関数にすれば良いですし、
Form1の変数をForm2で参照するのであれば、変数をPublicで宣言するだけです。
そして、Form2でForm1.strValueのようにしてやれば良いのですが…。

編集 削除
初心者  2007-12-10 10:42:10  No: 138335  IP: 192.*.*.*

Form1ではButtonにドライブ名を格納し、そのButtonを押したらそれぞれのドライブ名をForm2に私、そのドライブ名の中のファイルを表示させたいのですが・・・
今私がやっているのは、

 Dim fname As String
        'Dim fname2 As String
        Dim folder() As String

        ListBox1.DataSource = My.Computer.FileSystem.GetDirectories("C:\",FileIO.SearchOption.SearchTopLevelOnly, "*")

        ListBox2.DataSource = My.Computer.FileSystem.GetFiles
("C:\",FileIO.SearchOption.SearchTopLevelOnly, "*")

        i = 0

        myfolder2 = ListBox1.DataSource(0)

        For Each fname In My.Computer.FileSystem.GetFiles(myfolder2)

            myfolder2 = ListBox1.DataSource(i)
            fname2 = myfolder2

            folder = myfolder2.Split("\")
            bt(i) = New Button
            bt(i).Top = y
            If y > 450 And y < 900 Then

                bt(i).Width = 200
                bt(i).Left = 200
                If y < 450 Then
                    z = 0
                End If

                bt(i).Top = z
                z += 25

            ElseIf y > 900 Then
                bt(i).Width = 200
                bt(i).Left = 400
                If y = 900 Then
                    z = 0
                End If
                bt(i).Top = z
                z += 25

            ElseIf y <= 450 Then

                bt(i).Width = 200
                bt(i).Left = 0
                bt(i).Top = y
                y += 25

            End If

            bt(i).TextAlign = ContentAlignment.MiddleLeft
            bt(i).Tag = i
            bt(i).Text = folder(1)
            Controls.Add(bt(i))
            AddHandler bt(i).Click, AddressOf buttons_click
            x += 1
            i += 1

        Next

Buttons_Click
Dim a As New Form2
a.Show()

  Dim fname As String
        Dim fname2 As String
        Dim folder() As String
        Dim y As Integer = 0
        Dim x As Integer

        ListBox1.DataSource = My.Computer.FileSystem.GetDirectories( _
                                            "C:\", FileIO.SearchOption.SearchTopLevelOnly, _
                                            "*")

        ListBox2.DataSource = My.Computer.FileSystem.GetFiles( _
                                  "C:\", _
                                  FileIO.SearchOption.SearchTopLevelOnly, _
                                  "*")

        myfolder2 = ListBox2.DataSource(0)

                        FileIO.SearchOption.SearchTopLevelOnly, _
       
        For Each fname2 In My.Computer.FileSystem.GetFiles(myfolder2)
            'myfolder2 = fname2
            myfolder3 = IO.Path.GetDirectoryName(fname2)
            ListBox3.Items.Add(myfolder3)
            folder = fname2.Split("\")
            bt(i) = New Button
            bt(i).Left = 0
            bt(i).Width = 200
            bt(i).Top = y
            bt(i).TextAlign = ContentAlignment.MiddleLeft
            bt(i).Tag = i
            bt(i).Text = folder(1)
            'bt(i).Text = folder(2)
            Controls.Add(bt(i))
            AddHandler bt(i).Click, AddressOf buttons_click
            y += 25
            x += 1
        Next

名のですが・・・

編集 削除
まずは  2007-12-10 11:37:39  No: 138336  IP: 192.*.*.*

問題点だけを確認するようなモデルプロジェクトを作ってみたら?

編集 削除
初心者  2007-12-10 14:25:28  No: 138337  IP: 192.*.*.*

そうですよね↓
すみません…

テストプログラム作ってみます。
また、分からないことや上手くいかないところがありましたら、手助けよろしくお願いいたします。

編集 削除
初心者  2007-12-11 08:59:13  No: 138338  IP: 192.*.*.*

一応テストプログラムを作成してみました。

Public Class Form1

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

        Dim a As String = "あいうえお"
     
        form.Show()

    End Sub
End Class


Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim result As String = a

        Label1.Text = result

    End Sub
End Class

という感じで作成したのですが、やはり上手くできません。
よろしければ、アドバイスよろしくお願いいたします。

編集 削除
通ってみた  2007-12-12 08:37:34  No: 138339  IP: 192.*.*.*

VB.NetではForm1のButton1_Click内のDim宣言変数aは、Public変数になるんですか?

VB6では

Option Explicitにて
Public a As String

Form1にて
a = "あいうえお"

Form2にて
Label1.Caption = a

のようにすると思いますが

編集 削除
特攻隊長まるるう  2007-12-12 10:47:41  No: 138340  IP: 192.*.*.*

>VB.NetではForm1のButton1_Click内のDim宣言変数aは、Public変数になるんですか?
いや、『変数のスコープ(有効範囲)』については似たようなものです。
入門本の20ページあたりにほぼ100%書いてあることなので、それが
理解できてない状態でプログラムができるとは思えませんが。。。

>        form.Show()
これってコンパイルエラーになりませんか?

>VB6では
>Public a As String
標準モジュールとかに宣言されてたりしますね。
[VB.NET]以降はオブジェクト指向的な考え方を多く採用しますので、
グローバルな変数に依存する手法はあまり使いません。
# Form2 を他のプロジェクトに移動して再利用するときに
# a も用意しないとコンパイルエラーになるため。

Form2 に Label1.Text を設定する自作のメソッドやプロパティを
作ってそれを利用します。
# すでに、まささんが回答済み。
過去ログ検索『別フォーム』もどうぞ。

編集 削除
初心者  2007-12-12 11:21:56  No: 138341  IP: 192.*.*.*

私のVBは2005なんですが・・・

form.show()

と実行したからってエラーにななりませんよ?
普通にformが表示されます。

編集 削除
通ってみた  2007-12-13 16:29:38  No: 138342  IP: 192.*.*.*

普通に考えると

Form2.Show()

かな・・・
.NetはいろいろVB6と違うようですね

編集 削除
まさ  2007-12-16 11:10:07  No: 138343  IP: 192.*.*.*

あまり使いたくない方法なんですが…(^^;)

>Dim a As String = "あいうえお"
をPublic宣言にして下さい。
つまり、Form1は
Public Class Form1
    Public a As String = "あいうえお"

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

        Form2.Show()

    End Sub
End Class

あと、テストプログラムのコーディングミスを直しましょう…
>form.Show()
→Form2.Show()
他の方の指摘されていますが…。

>Dim result As String = a
→Dim result As String = Form1.a

編集 削除
初心者  2007-12-17 17:35:49  No: 138344  IP: 192.*.*.*

Public Class Form1
    Public a As String = "あいうえお"

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

        Form2.Show()

    End Sub
End Class

で実行してみたのですが、

Public a As String = "あいうえお"

にすると、
'Public' は、ローカル変数宣言では有効ではありません。

というエラーが発生するのですが・・・

編集 削除
特攻隊長まるるう  2007-12-17 18:45:58  No: 138345  IP: 192.*.*.*

>'Public' は、ローカル変数宣言では有効ではありません。
サンプルコードの通りに書けばエラーは出ません。
関数の中に書けば、そのエラーが出ます。

編集 削除