tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルフォーム間の変数の受け渡し
記事No2392
投稿日: 2005/10/11(Tue) 19:31
投稿者raly pop
[OSのVer]:Windows2000    [VBのVer]:VB.NET  

他サイト、過去ログ等読んでいろいろ試しているのですが、停滞中なので、質問です。
form1のボタンを押すと、form2が開き、
同時にform1で宣言した変数に値が入るようになっています。
この変数をform2で使いたいのですが、うまくいきません。
ご教授願います。以下プログラム
---------------------------------------------------------------------------------------
form1

Public Class Form1
    Inherits System.Windows.Forms.Form
Windows フォーム デザイナで生成されたコード

Public aaa As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
        aaa = 1
        Dim callform2 As New Form2
        Me.Hide()
        Try
            callform2.ShowDialog()

        Finally
            If Not callform2 Is Nothing Then
                callform2.Dispose()
                Me.Close()
            End If
        End Try

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
        aaa = 2
        Dim callform2 As New Form2
        Me.Hide()
        Try
            callform2.ShowDialog()

        Finally
            If Not callform2 Is Nothing Then
                callform2.Dispose()
                Me.Close()
            End If
        End Try

    End Sub
End Class
------------------------------------------------------------------------------------------
form2
Public Class Form2
    Inherits System.Windows.Forms.Form
Windows フォーム デザイナで生成されたコード

  Public callform1 As Form1

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button3.Click
        
        callform1=New Form1
        Dim bbb As Integer
        
        bbb = callform1aaa

        Dim callform5 As New Form5
        Dim callform31 As New Form31

        If bbb = 1 Then
            callform5.ShowDialog()

        ElseIf bbb = 2 Then
            callform31.ShowDialog()

        End If

[ツリー表示へ]
タイトルRe: フォーム間の変数の受け渡し
記事No2394
投稿日: 2005/10/11(Tue) 21:17
投稿者なおこ(・∀・)
お世話になります。

ソースをみると、
Form2に引数つきのコンストラクタを1つ追加してやれば
解決しそうな感じですね。

こんな感じでしょうか。
■Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles Button1.Click
  Dim callform2 As New Form2(2)
  Me.Hide()


■Form2
Private m_bbb As Integer
Public Sub New(ByVal bbb As Integer)
  Me.New()
  m_bbb = bbb
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles Button3.Click
  
  If Me.m_bbb = 1 Then
    Dim callform5 As Form5 = New Form5
    callform5.ShowDialog(Me)
  ElseIf


それと、Form2のPrivate Sub Button3_Clickの中で
callform1=New Form1
としてますが、
これは、自分自身(Form2自身)を表示したForm1インスタンスとは
別物だ、という事はお分かりですよね。

[ツリー表示へ]
タイトルRe^2: フォーム間の変数の受け渡し
記事No2402
投稿日: 2005/10/12(Wed) 16:57
投稿者raly pop
[OSのVer]:Windows    [VBのVer]:VB.NET  
ありがとうございます。m(_  _)m うまくいきました。

> それと、Form2のPrivate Sub Button3_Clickの中で
> callform1=New Form1
> としてますが、
> これは、自分自身(Form2自身)を表示したForm1インスタンスとは
> 別物だ、という事はお分かりですよね。

Form1インスタンスから表示されたForm2がまた新しくインスタンスを作成している、
ってな感じで解釈していますが、違うのかな?

[ツリー表示へ]
タイトルRe^3: フォーム間の変数の受け渡し
記事No2403
投稿日: 2005/10/12(Wed) 19:11
投稿者なおこ(・∀・)
お世話になります。

> Form1インスタンスから表示されたForm2がまた新しくインスタンスを作成している、
> ってな感じで解釈していますが、違うのかな?

そのとおりです。
最初のソースに以下の記述があったので、
心配してしまっただけです。失礼いたしました。

■Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
  aaa = 2          ←@ここで2とセットしても
  Dim callform2 As New Form2
  callform2.ShowDialog()

■Form2
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button3.Click
  callform1=New Form1
  Dim bbb As Integer
  bbb = callform1.aaa     ←Aこれは別インスタンスなので取れないですよね。という確認

[ツリー表示へ]
タイトルRe^4: フォーム間の変数の受け渡し
記事No2404
投稿日: 2005/10/12(Wed) 20:05
投稿者raly pop
[OSのVer]:Windows    [VBのVer]:VB.NET 
いろいろとありがとうございます。
実際のところ、文字の上ではわかってるんですが、
じゃあ、もとのセットした値を取るには、どうしたらいいんだか、
もうひとつ、よくわかってない、といった状態なので、その結果がご指摘の部分のコードにいたった原
因です。
ついでといっては、おかしいかもしれませんが、どうやれば、セットした値をbbbに入れられたんでしょ
うか?
お時間ございましたら、ご教授願います。

[ツリー表示へ]
タイトルRe^5: フォーム間の変数の受け渡し
記事No2407
投稿日: 2005/10/13(Thu) 11:07
投稿者なおこ(・∀・)
お世話になります。

> ついでといっては、おかしいかもしれませんが、どうやれば、セットした値をbbbに入れられたんでし

> うか?

■Form1
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button2.Click
aaa = 2
Dim callform2 As New Form2
Me.Hide()
Try
callform2.ShowDialog()


Form1でShowDialogを使っていらっしゃるようなので、

■Form2
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button3.Click
  callform1=CType(Me.Owner, Form1)
  Me.bbb = callform1.aaa

で取れると思います。

[ツリー表示へ]
タイトルRe^6: フォーム間の変数の受け渡し
記事No2408
投稿日: 2005/10/13(Thu) 18:50
投稿者raly pop
[OSのVer]:Windows    [VBのVer]:VB.NET  
お世話してもらってます(笑)
いろいろ、教えていただきありがとうございます。
おかげさまで、フォーム間の変数の受け渡しがかなりできるようになりました。

[ツリー表示へ]