• 主页
  • VBS
  • .NET技术
  • VBA
  • VB网络编程
  • VB多媒体
  • VB数据库
  • VB控件
  • VB COM/DCOM
  • VB基础类
  • VB API

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

Ninputer 2004-03-01 03:57:00
由于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升级,并苦恼多窗体问题的人有所帮助。
...全文
143 点赞 收藏 1
写回复
1 条回复
zhangccai 2004年04月08日
学习...
回复 点赞
发动态
发帖子
VB
创建于2007-09-28

1.1w+

社区成员

11.0w+

社区内容

VB技术相关讨论,主要为经典vb,即VB6.0
社区公告
暂无公告