VB.net一劳永逸解决窗体互访问题教程,适用于从VB6升级者

Ninputer Ninputer 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
由于VB6纵容式的语法,很多VB6升级到VB.net的程序员会对窗体之间的互访搞不清楚。比如工程中有Form1和Form2,很多人显示Form2的语法都是

Form2.Show()

着在VB.net中不行了,所以大量的问题涌上了CSDN……除了这个问题以外,窗体互访还体现在以下几个问题
1、如有有Form1,Form2,Form3,……
问题:Form1怎么修改Form2的控件的值,Form2如何修改Form3的控件的值,Form3如何修改Form2控件的值……等等,反正是如何互相访问控件的问题。

2、窗体之间如何共享数据

3、开始运行后显示的是Form1,如何按下某按钮后Form1消失,然后显示Form2。

这几类问题都源于对类和对象理解的错误。Form都是类,而只有实例化才能产生可访问的对象。一般人都懂得这个道理,但是还是难以进行窗体互访。这其中的道理很多,一时理解不了很正常。下面我要给出的方法能够帮助从VB6升级来的人马上可以方便地进行窗体间互访,而且语法与原来的VB6几乎一样!

首先,将下列代码复制到每个窗体代码中:

Private Shared _Itself As [FormName]
Public Shared ReadOnly Property Itself() As [FormName]
Get
If _Itself Is Nothing OrElse _Itself.IsDisposed Then
_Itself = New [FormName]
End If

Return _Itself
End Get
End Property

其中“[FormName]”的位置换成当前窗体的真正名字。比如把这段代码放到Form2中,就改成

Private Shared _Itself As Form2
Public Shared ReadOnly Property Itself() As Form2
Get
If _Itself Is Nothing OrElse _Itself.IsDisposed Then
_Itself = New Form2
End If

Return _Itself
End Get
End Property

以此类推。接下来,将工程属性中“启动对象”一栏改成Sub Main,而不是任何窗体。
最后,选择菜单项目-〉添加模块,在模块中加入以下代码
Public Sub Main()
Application.Run(Form1.Itself)
End Sub
'其中Form1是你要作为主窗体的那个窗体。

接下来,你就可以在任何窗体里,用像这样的语法:
Form2.Itself.Show()
Form1.Itself.Text = "Hello, I'm Form1"
Form3.Itself.Button1.Text = "Hi"
任何窗体都可以互相访问到其他窗体,更改其他窗体的控件属性,就像VB6代码:
Form2.Show()
Form1.Text = "Hello, I'm Form1"
Form3.Button1.Text = "Hi"
的作用一样,只不过增加了一个Itself而已。

现在考虑第三个问题,如果我要让第一个窗体关闭,然后显示第二个窗体怎么办
如果你确定要这么做,将刚才那个Sub Main改写成:
Public Sub Main()
Form1.Itself.Show()
Application.Run()
End Sub
这里Form1是你运行程序时要显示的第一个窗体
然后就可以在Form1中用这样的代码:
Form2.Itself.Show()
Me.Close
来关闭自己,显示Form2了。希望此贴对所有从VB6升级,并苦恼多窗体问题的人有所帮助。
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
Ninputer
VB 16,718 成员 110,520 内容