2017-08-04 26 views
-1

2つのフォームにテキストボックスとボタンがあり、最初のフォームで2番目のフォームを開きます。次に、2番目のフォームのボタンをクリックすると、テキストボックスの値を最初のフォームのテキストボックスに渡して渡すように、2番目のフォームのテキストボックスに値を入力します。別のフォームからフォームを開き、値を取得して最初のフォームに戻します。

Public Class Form1 

    WithEvents fr2 As New Form2 

    Private Sub btngetvalue_Click(sender As Object, e As EventArgs) Handles btngetvalue.Click 
     fr2.Show() 
    End Sub 

    Private Sub fr2_passvalue() Handles fr2.passvalue 
     Me.txtform1.Text = fr2.txtform2.Text 
    End Sub 

End Class 

Public Class Form2 

    Event passvalue() 

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

    End Sub 

    Private Sub btnpassvalue_Click(sender As Object, e As EventArgs) Handles btnpassvalue.Click 
     RaiseEvent passvalue() 
     Me.Close() 
    End Sub 

End Class 

:私は現在、ここでは2015

Visual Studioでvb.netを使用しています

私がこれまで運でこれをやろうとしてきた

は...私のコードです私はコントロールに直接アクセスしようとしましたが、vb.netがすべてのクラスを使用するようになっても機能しません。私はこれを回避する方法を理解していないようです。

+0

これに関連する疑問があります。 **関連**の下にあるもののいくつかから始めて、*運行ではなく*研究*に頼ってください。 – Plutonix

+0

コードが動作します。問題は何ですか? – LarsTech

答えて

0

イベントを再定義して文字列を渡します。 Form2イベントを使用して、ハンドラに値を渡します。

Public Class Form2 

    Public Event passvalue(text As String) 

    Private Sub btnpassvalue_Click(sender As Object, e As EventArgs) Handles btnpassvalue.Click 
     RaiseEvent passvalue(txtform2.Text) 
     Me.Close() 
    End Sub 

End Class 

Form1のTextBoxを更新してください。

Public Class Form1 

    WithEvents fr2 As Form2 

    Private Sub btngetvalue_Click(sender As Object, e As EventArgs) Handles btngetvalue.Click 
     fr2 = New Form2() 
     fr2.Show() 
    End Sub 

    Private Sub fr2_passvalue(text As String) Handles fr2.passvalue 
     Me.txtform1.Text = text 
    End Sub 

End Class 

以前のように、Form1はForm2のコントロールに直接アクセスしていたため、イベントの目的が壊れていました。

0

グローバル変数(Public)を定義するだけで、両方のフォームからアクセスできます。

+0

なぜ 'パブリック'ですか?カプセル化はどうですか?ここに問題がある、この質問はすでに100回答えられている。あなたはこれに答えるのを止める必要があるので、OPは行くことができ、答えを見つけることができます。 –

関連する問題