如何将隐藏用户窗体中的Integer变量n传递至另一个用户窗体
保留用户窗体变量n的解决方案
你现在的代码里,n是过程级局部变量,ListBox1_Click执行完毕后这个变量就会被销毁,哪怕只是隐藏当前窗体,也没法保留这个值。但只要调整变量的作用域或者传递方式,就能实现需求,下面是具体方法:
方法一:声明为窗体模块级变量(推荐)
把n的声明移到当前窗体模块的最顶部(所有过程外面),这样只要窗体没被卸载(只是隐藏),n的值就会一直保留:
' 放在窗体模块的最顶部,所有过程之外 Private n As Integer Private Sub ListBox1_Click() ' 这里去掉原来的Dim n As Integer For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then n = i + 2 End If Next i End Sub
之后切换到其他窗体时,只要当前窗体没被卸载,你可以通过当前窗体名.n来读取这个值(比如当前窗体叫FormMain,另一个窗体里就写FormMain.n)。
方法二:切换窗体时直接传递参数
如果只需要在切换时把n的值传给目标窗体使用,可以直接在调用目标窗体时传递:
步骤1:修改当前窗体的点击事件
Private Sub ListBox1_Click() Dim n As Integer For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then n = i + 2 End If Next i ' 传递n到目标窗体(假设目标窗体叫FormEdit) FormEdit.TargetRow = n Me.Hide ' 隐藏当前窗体 FormEdit.Show ' 显示目标窗体 End Sub
步骤2:在目标窗体里声明公共变量
在FormEdit的模块顶部添加:
Public TargetRow As Integer
之后在FormEdit里就能直接用TargetRow作为索引修改特定行了。
注意事项
- 别用
Unload Me卸载当前窗体,否则哪怕是模块级变量也会被销毁,只用Me.Hide隐藏就行。 - 尽量避免用全局变量(比如在标准模块里声明
Public n As Integer),容易引发命名冲突和调试问题。
内容的提问来源于stack exchange,提问作者MrAlex01
相关产品推荐
相关产品推荐

