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
我需要的是当从 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