您不能简单地创建主窗体的新实例(正如所建议的并期望它能够正常工作,您需要对已创建的主窗体进行实际引用。为了帮助您了解所涉及的逻辑;
创建一个新的 Winforms 项目。在默认的 Form1 中添加一个文本框和一个按钮。
现在向此应用程序添加一个新表单(您可以将其保留为默认名称 Form2。向此表单添加一个 TextBox(称为 myTextBox)和一个按钮。
现在回到您的第一个表单并双击按钮以访问代码中的点击处理程序。添加以下内容:
Dim frm as New Form2
frm.Show
按 f5 并单击按钮,您将看到一个新表单 2。到目前为止一切顺利。
现在打开 Form2 的代码并添加以下代码,使其最终看起来像这样:
Public Class Form2
Private frm As Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
frm.TextBox1.Text = myTextBox.text
End Sub
End Class
构建,按f5并单击form1上的按钮,在新的form2中在文本框中输入一些文本并单击按钮,您会得到空引用异常。你得到这个的原因是因为此时私有字段 frm inForm2 指的是 Nothing。
现在打开 Form2 中的代码并添加一个构造函数和以下代码,使其最终看起来像这样:
Public Class Form2
Private frm As Form1
Public Sub New(byval frm1 As Form1)
'first we should make sure that we have a parameter to play with
If Not IsNothing(frm1) Then
frm = DirectCast(frm1,Form1)
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
frm.TextBox1.Text = myTextBox.text
End Sub
End Class
最后回到你的第一个表单按钮点击处理程序并稍微更改代码,使其看起来像这样;
Dim frm as New Form2(Me)
frm.Show
构建并运行您的应用程序,现在当您在 form2 的文本框中输入文本并单击按钮时,它将出现在 Form1 的文本框中。
发生这种情况的原因是因为您传递了对 form1 的实际引用,该引用最初是在应用程序启动时创建的 form2。通过将该引用转换为用于在 form2 中表示 form1 的私有字段,您可以使用它来正确引用 form1 上的内容。这是一个非常简单的概念,但您需要先了解它,然后才能进行编程。