VB.NET 设置另一种形式的文本框的文本值

VB.NET Set text value of a textbos of another form

我需要的是当从 form1 打开 form2 时点击一个按钮,然后在 form2 上我点击另一个按钮并设置 form1 文本框的值。

如果我将应用程序类型设置为 windows 表单应用程序,则一切正常,但如果我将其设置为 class 库,我会出现错误引用非共享成员需要对象引用.

如果我引用 Dim frm = New form2,它会打开第二个 form2 而我不想要它。

如何解决这个问题?

谢谢。

代码如下:

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form2.ShowDialog()
End Sub
End Class


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

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Form1.TextBox1.Text = "aaaa"
    Me.Close()

End Sub
End Class

将以下内容添加到 form1

Public static sub changeTitle(myTextBox as Object,title as string)
myTextBox.Text=title
End sub

在form2中调用上面的函数

Form1.changeTitle(Form1.TextBox1, "new title")

当您构建vb.net winforms 项目时,项目中会生成一些额外的代码。例如 Form class 的静态实例,因此您可以通过 class 名称 Form1.ShowDialog().

访问实例方法

这是为 VB6 名程序员完成的,使从 VB 到 VB.NET 的转变更容易。

当您将项目更改为库项目时,不再生成此代码并且Form1只是一个class并且您不能直接访问实例方法,但需要实例化一个实例“手动”。

不要使用这个“隐藏的”共享实例,而是手动创建表单实例。您可以将 form1 的实例传递给 form2 的构造函数并从那里更新 form1。

因为您正在使用 ShowDialog,我建议让 Form2 不依赖于 Form1 而不是直接更新 Form1 文本框(您希望避免制作 Form 控件 public),return 值作为对话框的结果。

Public Class Form2
  Public Property ResultValue As String

  Private Sub Button1_Click(s As Object, e As EventArgs) Handles Button1.Click
    ResultValue = "Value from Form 2";
    DialogResult = DialogResult.OK; ' This suppose to close the form
  End Sub
End Class

Public Class Form1
  Private Sub Button1_Click(s As Object, e As EventArgs) Handles Button1.Click
    Using form As New Form2()
      Dim result As DialogResult = form.ShowDialog()
      If result = DialogResult.OK Then
        TextBox1.Text = form.ResultValue
      End If
    End Using
  End Sub
End Class