Form1からform2に値を引き渡すことは出来るのでしょうか?
思い当たることはやってみたのですが、どうしてもいきません。
わかる方がいましたら、ぜひ教えてください。
よろしくお願いします。
>出来るのでしょうか?
できるね。
>思い当たることはやってみたのですが
やった事は書こうね。
>わかる方がいましたら
分からない人のほうが少ないね。
△△△.XXXX = □□□
こんな感じだね。
△△△はFo○○○のイン○タ○○ね。
XXXXは○○rm2の要素(?)ね。
□□□は渡したい○ね。
過去にも同じような事を書いた記憶が…。
>Form1からForm2に値を引き渡すことは出来るのでしょうか?
可能ですが、渡し方は??
Form2の関数へ渡すのであれば、Public関数にすれば良いですし、
Form1の変数をForm2で参照するのであれば、変数をPublicで宣言するだけです。
そして、Form2でForm1.strValueのようにしてやれば良いのですが…。
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
名のですが・・・
問題点だけを確認するようなモデルプロジェクトを作ってみたら?
編集 削除そうですよね↓
すみません…
テストプログラム作ってみます。
また、分からないことや上手くいかないところがありましたら、手助けよろしくお願いいたします。
一応テストプログラムを作成してみました。
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
という感じで作成したのですが、やはり上手くできません。
よろしければ、アドバイスよろしくお願いいたします。
VB.NetではForm1のButton1_Click内のDim宣言変数aは、Public変数になるんですか?
VB6では
Option Explicitにて
Public a As String
Form1にて
a = "あいうえお"
Form2にて
Label1.Caption = a
のようにすると思いますが
>VB.NetではForm1のButton1_Click内のDim宣言変数aは、Public変数になるんですか?
いや、『変数のスコープ(有効範囲)』については似たようなものです。
入門本の20ページあたりにほぼ100%書いてあることなので、それが
理解できてない状態でプログラムができるとは思えませんが。。。
> form.Show()
これってコンパイルエラーになりませんか?
>VB6では
>Public a As String
標準モジュールとかに宣言されてたりしますね。
[VB.NET]以降はオブジェクト指向的な考え方を多く採用しますので、
グローバルな変数に依存する手法はあまり使いません。
# Form2 を他のプロジェクトに移動して再利用するときに
# a も用意しないとコンパイルエラーになるため。
Form2 に Label1.Text を設定する自作のメソッドやプロパティを
作ってそれを利用します。
# すでに、まささんが回答済み。
過去ログ検索『別フォーム』もどうぞ。
私のVBは2005なんですが・・・
form.show()
と実行したからってエラーにななりませんよ?
普通にformが表示されます。
普通に考えると
Form2.Show()
かな・・・
.NetはいろいろVB6と違うようですね
あまり使いたくない方法なんですが…(^^;)
>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
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' は、ローカル変数宣言では有効ではありません。
というエラーが発生するのですが・・・
>'Public' は、ローカル変数宣言では有効ではありません。
サンプルコードの通りに書けばエラーは出ません。
関数の中に書けば、そのエラーが出ます。