Vb.net 在Visual Basic中将一个窗体的值转换为另一个窗体

Vb.net 在Visual Basic中将一个窗体的值转换为另一个窗体,vb.net,Vb.net,我试图在另一个表单(表单2)中获取一个表单(表单1)的整数值。我试图通过下面的代码访问它,但没有得到它。有人能告诉我我做错了什么吗 Public Class Form1 Public Points As Integer = 100 Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Label1.Text = Points End Sub Pub

我试图在另一个表单(表单2)中获取一个表单(表单1)的整数值。我试图通过下面的代码访问它,但没有得到它。有人能告诉我我做错了什么吗

Public Class Form1
    Public Points As Integer = 100

    Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Label1.Text = Points
    End Sub

    Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Form2.Show()
        Me.Hide()
    End Sub
End Class

Public Class Form2
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim FinalPoints As New Form1
        Label1.Text = FinalPoints.Label1.Text
    End Sub
End Class

问题:当您显示Form2(Form2_加载被执行)时,会创建一个新的Form1。这个新创建的Form1尚未执行Form1\u加载函数

您需要使用FinalPoints.show()显示新创建的FinalPoints(Form1),如下所示:

Dim FinalPoints As New Form1
FinalPoints.Show()
Label1.Text = FinalPoints.Label1.Text
让Form1_Load函数执行,然后设置FinalPoints.Label1.Text。但这只会打开一个新的表格1

此外,您也可以像这样在Form2_加载中获取public Points变量(您也不必创建新的Form1):

或者:在显示表单之前,只需在Form2中使用一个公共变量并为其赋值即可

Public Class Form1
    Public Points As Integer = 100

    Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Label1.Text = Points.ToString
    End Sub

    Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim FinalPoints As New Form2
        FinalPoints.StringFromForm1 = Label1.Text
        FinalPoints.Show()
        Me.Hide()
    End Sub
End Class


Public Class Form2
    Public Property StringFromForm1 As String

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Label1.Text = StringFromForm1
    End Sub
End Class

这一行:
Dim FinalPoints As New Form1
创建Form1的新实例,但您需要的是引用Form1的现有实例。你可以尝试不同的技巧。例如,重载表单2的显示方法

大概是这样的:

Form1:将值传递给Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim f As New Form2

    Me.Hide()

    f.Show(Points)
End Sub
Form2:从调用方获取值(Form1)


这回答了你的问题吗?这回答了你的问题吗?
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim f As New Form2

    Me.Hide()

    f.Show(Points)
End Sub
Public Class Form2

    Public Overloads Sub Show(ByVal Points As Integer)
        Me.Label1.Text = Points.ToString
        MyBase.Show()
    End Sub

End Class