MainFormとSubFormがあります。
MainFormのテキストボックスのテキストなどの値を
SubFormで参照することはできるのですが
定義した変数を参照することができません。
またMainformでSubFormの変数やプロパティの値を
使うことができません。
なぜだかよくわかりません。
グローバル変数とかの問題でしょうか?
もしそうならば どこでグローバル変数を
定義すればいいのでしょうか?
Main側
Dim wkMain1 As Integerで定義
TextBoxMain1:MainFormにあるテキストボックス
Sub側
TextBoxSub1.Text = FormMain.TextBoxMain1.Text 'これはOK
TextBoxSub2.Text = FormMain.wkMain1 'これがコンパイル通りません
逆に
Sub側
Dim wkSub1 As Integerで定義
TextBoxSub1:SubFormにあるテキストボックス
Main側
TextBoxMain1.Text = FormSub.TextBoxSub1.Text 'これもだめ
TextBoxMain2.Text = FormSub.wkSub1 'これもだめ
別フォーム間の値の受け渡しをする変数は
DimでなくPublicで宣言してみてください。
ところでVBのバージョンは?
同様の質問が過去ログにたくさんあります。
(検索キーワードは『別フォーム』など)
合わせてご覧下さい。
むらちゃんさんが使っているバージョンって
もしかして、VB.NET系
TextBoxSub1.Textの構文の後の.Textは確かVB6にはなかったような気が
VB.NETです。
MicrosoftDevelopmentEnvironment2003 Version7.1.3091
Microsoft .Net Framework 1.1 Version 1.1.4332
です。
最近VB.netを覚えはじめました。
C++をやっていたのですが
まだまだVB.netがわかりません。
まずは過去ログを調べてみます。
> TextBoxSub1.Textの構文の後の.Textは確かVB6にはなかったような気が
あるよ。
それはあなたが省略してただけでしょ。
>むらちゃんさん
スコープの問題ですね。
まずはフォームの宣言自体を標準モジュールでPublicでするとイイと思います。
VB6にも存在したんですか?
たしかCaptionだったような気がしたんですが、
違いますか?(VB6はさわり程度しかやっていないので詳しくはわからないんです。)
> VB6にも存在したんですか?
します。
> たしかCaptionだったような気がしたんですが、
それは、FormとかLabelの場合でしょう。
今回は、TextBoxです。
> 違いますか?(VB6はさわり程度しかやっていないので詳しくはわからないんです。)
違います。
# 正しい情報を、間違った情報で訂正されてしまったのでは、混乱の元です。
C++には Label1.Captionとかあるけど
VBには Label1.Textなんですよね・・・?
他の人のコメントがよくわからなくなったので改めて質問します。
☆MainForm側
Public aaa As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
aaa = 777
Label1.Text = aaa
End Sub
Private Sub btnTest1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest1.Click
Dim frm2 As New Form2
frm2.Show()
End Sub
☆SubForm側
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
LabelSub1.Text = Form1.Label1.Text
End Sub
SubForm上のLabelSub1.Textに表示させたいのですが
コンパイルが通りません
コンパイルエラーになるのは
LabelSub1.Text = Form1.Label1.Text
のForm1.Label1のところです
このようにしてみたのですが
ソース上でなにか間違いがあるのでしょうか?
かなり混乱してる様ですね。
Form1はクラスであって、インスタンスではないので参照できませんよ。
http://www.geocities.co.jp/SiliconValley-SanJose/8756/vbnet.html
の2番目に書いておいたので見てください。
> C++には Label1.Captionとかあるけど
> VBには Label1.Textなんですよね・・・?
VB.NETのLabelの場合は、Textプロパティ、
VB6以下のLabelでは、Captionプロパティです。
TextBoxに関しては、VB.NETもVB6も、Textプロパティです。
> 他の人のコメントがよくわからなくなったので
むらちゃんさんの最初の質問から、話題が脱線して、
「VB6のTextBoxの話」になっている部分がありますね。
VB6の話題になってしまっている部分:
------------------------
マグさん (2004/07/15 11:03:04)
> TextBoxSub1.Textの構文の後の.Textは確かVB6にはなかったような気が
nanashiさん (2004/07/15 14:18:42)
> あるよ。
> それはあなたが省略してただけでしょ。
マグさん (2004/07/15 15:04:14)
> VB6にも存在したんですか?
> たしかCaptionだったような気がしたんですが、
Dentalさん (2004/07/15 15:58:21)
> それは、FormとかLabelの場合でしょう。
> 今回は、TextBoxです。
------------------------
むらちゃんさんの最初の質問に対する回答部分:
------------------------
kenさん (2004/07/14 16:23:30)
> 別フォーム間の値の受け渡しをする変数は
> DimでなくPublicで宣言してみてください。
特攻隊長まるるうさん (2004/07/14 17:09:54)
> 同様の質問が過去ログにたくさんあります。
> (検索キーワードは『別フォーム』など)
> 合わせてご覧下さい。
nanashiさん (2004/07/15 14:18:42)
> スコープの問題ですね。
> まずはフォームの宣言自体を標準モジュールでPublicでするとイイと思います。
ねろさん (2004/07/15 17:26:59)
> Form1はクラスであって、インスタンスではないので参照できませんよ。
> http://www.geocities.co.jp/SiliconValley-SanJose/8756/vbnet.html
> の2番目に書いておいたので見てください。
------------------------
☆MainForm側
Module Module1
Public F1 As Form1
End Module
Public aaa As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
aaa = 777
Label1.Text = aaa
End Sub
Private Sub btnTest1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest1.Click
Dim frm2 As New Form2
frm2.Show()
End Sub
☆SubForm側
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
LabelSub1.Text = Form1.Label1.Text
End Sub
このようにしたら
コンパイルもとおり
やりたかったことができました。
Labelなどでも同じようにできるみたいです。
ありがとうございました
完了し忘れました汗
上のソースでコントロールを使わずにそのままフォーム間でデータの受け渡しをするにはどうしたらいいでしょうか?
例えば)
Form1の
Private a as String="あいうえお"
のデータを
Form2に送るにはどうすればいいでしょうか?
環境はVB.NETです。
> マグ
> 上のソースでコントロールを使わずにそのままフォーム間でデータの受け渡しをするにはどうしたらいいでしょうか?
Private a as String = "あいうえお" の場合、そのフォームないでしか変数が使えません!!
この場合、Private ではなくて、Public で宣言したらどうでしょうか?
'(General) (Declarations)
Public a As String
Private Sub Form1_Load()
a = "あいうえお"
Form2.Show
End Sub
Private Sub Form2_Load()
Dim b as String
b = a
'こうすれば、bは "あいうえお" となると思いますが。
End Sub
こういうやり方もあります。
Public Class Form1
Private _a As String = "あいうえお"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Public Property a() As String
Get
Return _a
End Get
Set(ByVal Value As String)
_a = Value
End Set
End Property
End Class
ありがとうございます。
ツイート | ![]() |