2つのフォーム間での値のやり取りをするには?

解決


むらちゃん  2004-07-15 01:13:54  No: 114781

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  'これもだめ


ken  2004-07-15 01:23:30  No: 114782

別フォーム間の値の受け渡しをする変数は
DimでなくPublicで宣言してみてください。


nanashi  2004-07-15 01:59:20  No: 114783

ところでVBのバージョンは?


特攻隊長まるるう  2004-07-15 02:09:54  No: 114784

同様の質問が過去ログにたくさんあります。
(検索キーワードは『別フォーム』など)
合わせてご覧下さい。


マグ  2004-07-15 20:03:04  No: 114785

むらちゃんさんが使っているバージョンって
もしかして、VB.NET系
TextBoxSub1.Textの構文の後の.Textは確かVB6にはなかったような気が


むらちゃん  2004-07-15 21:19:39  No: 114786

VB.NETです。
MicrosoftDevelopmentEnvironment2003 Version7.1.3091
Microsoft  .Net Framework 1.1  Version 1.1.4332
です。

最近VB.netを覚えはじめました。
C++をやっていたのですが
まだまだVB.netがわかりません。

まずは過去ログを調べてみます。


nanashi  2004-07-15 23:18:42  No: 114787

> TextBoxSub1.Textの構文の後の.Textは確かVB6にはなかったような気が

あるよ。
それはあなたが省略してただけでしょ。

>むらちゃんさん

スコープの問題ですね。
まずはフォームの宣言自体を標準モジュールでPublicでするとイイと思います。


マグ  2004-07-16 00:04:14  No: 114788

VB6にも存在したんですか?
たしかCaptionだったような気がしたんですが、
違いますか?(VB6はさわり程度しかやっていないので詳しくはわからないんです。)


Dental  2004-07-16 00:58:21  No: 114789

> VB6にも存在したんですか?
します。

> たしかCaptionだったような気がしたんですが、
それは、FormとかLabelの場合でしょう。
今回は、TextBoxです。

> 違いますか?(VB6はさわり程度しかやっていないので詳しくはわからないんです。)
違います。
# 正しい情報を、間違った情報で訂正されてしまったのでは、混乱の元です。


むらちゃん  2004-07-16 01:27:51  No: 114790

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のところです

このようにしてみたのですが
ソース上でなにか間違いがあるのでしょうか?


ねろ  2004-07-16 02:26:59  No: 114791

かなり混乱してる様ですね。
Form1はクラスであって、インスタンスではないので参照できませんよ。
http://www.geocities.co.jp/SiliconValley-SanJose/8756/vbnet.html
の2番目に書いておいたので見てください。


旅禍  2004-07-16 10:11:32  No: 114792

> 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番目に書いておいたので見てください。
------------------------


むらちゃん  2004-07-16 23:29:41  No: 114793

☆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などでも同じようにできるみたいです。
ありがとうございました


むらちゃん  2004-07-16 23:30:01  No: 114794

完了し忘れました汗


マグ  2004-07-18 05:04:39  No: 114795

上のソースでコントロールを使わずにそのままフォーム間でデータの受け渡しをするにはどうしたらいいでしょうか?

例えば)

Form1の

Private a as String="あいうえお"

のデータを

Form2に送るにはどうすればいいでしょうか?

環境はVB.NETです。


Garura  2004-07-18 05:59:13  No: 114796

> マグ
> 上のソースでコントロールを使わずにそのままフォーム間でデータの受け渡しをするにはどうしたらいいでしょうか?

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


GS  2004-07-19 09:41:43  No: 114797

こういうやり方もあります。

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


マグ  2004-07-21 01:46:33  No: 114798

ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加