VB.NET中如何将类函数返回值传递给Form3文本框并正确显示窗口
解决VB中Form3加载时获取数据及窗口重复显示问题
一、先搞定双窗口的问题
你碰到的一个窗口有值、一个窗口为空的情况,大概率是不小心实例化了两次Form3——比如你在代码里手动New Form3()创建了实例,同时VB默认会在项目里自动生成一个Form3的默认实例(就是直接用Form3.Show()调用的那个)。这俩是完全独立的实例,自然一个能拿到值,另一个是空的。
解决起来很简单:全程手动管理Form3的实例,别混用默认实例。举个例子:
' 比如在主窗体的按钮点击事件里写 Private Sub btnOpenEditWindow_Click(sender As Object, e As EventArgs) Handles btnOpenEditWindow.Click ' 手动创建Form3的实例 Dim editForm As New Form3() ' 从Connecting类的函数拿到要传递的值 Dim targetValue = Connecting.bring_it() ' 把值赋值给Form3的文本框 editForm.TextBox1.Text = targetValue ' 显示编辑窗口 editForm.Show() End Sub
这样就只会生成一个Form3实例,不会再出现双窗口的问题了。
二、给Form3传递数据的两种规范方式
上面直接访问TextBox1是可行的,但如果TextBox1设为私有(默认是Friend,项目内可访问),更规范的做法是用构造函数或者属性来传值:
方式1:通过构造函数传值
在Form3的代码里重载构造函数:
Public Class Form3 ' 带参数的构造函数,用来接收要显示的值 Public Sub New(showValue As String) ' 必须先调用InitializeComponent()初始化控件 InitializeComponent() ' 把传入的值赋值给文本框 Me.TextBox1.Text = showValue End Sub ' 保留默认构造函数(如果有其他场景需要无参实例化的话) Public Sub New() InitializeComponent() End Sub End Class
然后按钮点击事件里这么调用:
Private Sub btnOpenEditWindow_Click(sender As Object, e As EventArgs) Handles btnOpenEditWindow.Click Dim targetValue = Connecting.bring_it() ' 用带参构造函数创建实例,直接把值传进去 Dim editForm As New Form3(targetValue) editForm.Show() End Sub
方式2:通过属性传值
在Form3里定义一个专门的属性:
Public Class Form3 Public Property EditContent As String Get Return TextBox1.Text End Get Set(value As String) TextBox1.Text = value End Set End Property End Class
调用时:
Private Sub btnOpenEditWindow_Click(sender As Object, e As EventArgs) Handles btnOpenEditWindow.Click Dim targetValue = Connecting.bring_it() Dim editForm As New Form3() ' 通过属性赋值 editForm.EditContent = targetValue editForm.Show() End Sub
三、把bring_it函数改成返回数组的实现
如果你的bring_it需要返回多个值,直接修改函数的返回类型为数组就行:
Public Class Connecting ' 修改返回类型为String数组,你也可以根据需求改成Integer()等其他类型 Public Shared Function bring_it() As String() ' 这里写你的业务逻辑,比如从数据库、文件或者其他地方获取多组数据 Dim resultArray As String() = {"第一组数据", "第二组数据", "第三组数据"} Return resultArray End Function End Class
然后传递给Form3的时候,比如你要把数组里的元素分别显示在不同文本框:
Private Sub btnOpenEditWindow_Click(sender As Object, e As EventArgs) Handles btnOpenEditWindow.Click Dim valueArray = Connecting.bring_it() Dim editForm As New Form3() ' 判空避免数组越界 If valueArray IsNot Nothing AndAlso valueArray.Length > 0 Then editForm.TextBox1.Text = valueArray(0) End If If valueArray IsNot Nothing AndAlso valueArray.Length > 1 Then editForm.TextBox2.Text = valueArray(1) End If editForm.Show() End Sub
当然也可以用带数组参数的构造函数来传值,原理和之前的单值构造函数一致。
总结一下关键步骤
- 永远手动创建Form3实例,别用VB默认的
Form3.Show()这种方式调用默认实例 - 用构造函数或属性传递数据,比直接访问控件更规范、更易维护
- 修改bring_it的返回类型为数组,在函数内部构建并返回目标数组即可
内容的提问来源于stack exchange,提问作者Christy_mall95
相关产品推荐
相关产品推荐

