VB.net一劳永逸解决窗体互访问题教程,适用于从VB6升级者
由于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升级,并苦恼多窗体问题的人有所帮助。
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升级,并苦恼多窗体问题的人有所帮助。
...全文
相关推荐
转换VB6窗体到VB.NET源代码
在实际操作中,理解这些知识点对于成功完成VB6到VB.NET的迁移至关重要。同时,开发者还需要具备解决转换过程中可能出现的问题的能力,如不兼容性、性能优化以及用户界面的适应性调整等。
vb.net启动隐藏窗体
首先,我们需要了解窗体的状态。在VB.NET中,窗体可以通过修改`Visible`属性来控制其是否可见。
vb.net最简单的方法实现无边框窗体拖动
然而,去除窗口的标准边框后,如何实现窗口的移动便成了一个需要解决的问题。
vb.net多窗体事例
本教程将深入探讨如何在VB.NET环境中实现多窗体应用,并通过实际的“多窗体示例”进行讲解。1. **创建新窗体** 在VB.NET中,你可以通过项目资源管理器右键点击添加新的项来创建一个新的窗体。
C++连接mysql数据库的两种方法
现在正做一个接口,通过不同的连接字符串操作不同的数据库。要用到mysql数据库,以前没用过这个数据库,用access和sql server比较多。通过网上的一些资料和自己的摸索,大致清楚了C++连接mysql的方法。可以通过2种方法实现。 第一种方法是利用ADO连接, 第二种方法是利用mysql自己的api函数进行连接。 第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不...


