如何解决VB.NET设置另一种形式的文本框的文本值
从form1打开form2并单击form2时,我需要的是单击anothe butto,然后设置form1的文本框的值。
如果我将应用程序的类型设置为Windows窗体应用程序就可以了,但是如果我将其设置为类库,则我对非共享成员的错误引用需要对象引用。
如果我引用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
解决方法
在构建vb.net winforms项目时,该项目中会生成一些额外的代码。例如,Form类的静态实例,因此您可以通过类名称Form1.ShowDialog()
访问实例方法。
这样做是为了让VB6程序员更轻松地从VB转换到VB.NET。
当您将项目更改为库项目时,此代码不再生成,并且Form1
只是一个类,您无法直接访问实例方法,而需要“手动”实例化实例。
不要使用此“隐藏”共享实例,而是手动创建表单实例。您可以将form1的实例传递给form2的构造函数,然后从那里更新form1。
因为您使用的是ShowDialog
,所以我建议使Form2不依赖于Form1,而不是直接更新Form1文本框(您希望避免将Form控件公开),返回值作为对话框的结果
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
Public static sub changeTitle(myTextBox as Object,title as string)
myTextBox.Text=title
End sub
在form2中调用上述函数
Form1.changeTitle(Form1.TextBox1,"new title")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。