edreamy(梦缘居士) :
请你再看清楚一点我的例子!!!!!!
另外,请你:
解决方案资源管理器->WindowsApplication1(右击)->属性->启动对象(S)->Sub Main
然后在运行一下我的例子!
'Module1.vb
Module Module1
Public Frm1 As New Form1() '这里是Form1类的第一个实例
Public Frm2 As New Form2() '这里是Form2类的第一个实例
'-----------------------------------------------------
'我要问你,难道你在我的例子里面还看到任何一个新的实例吗?
'或者说你还能看到一句 New Form1()?
'如果你用Sub Main() 作为启动对象,那么任何一个窗口都需要你自己手动去实例化第一个对象!!
'也就是说VB并不会为你自动生成哪一个类的实例!
'_____________________________________________________
Sub Main()
Frm1.Show()
Application.Run(Frm1)
End Sub
End Module
'Form1.vb
Public Class Form1
...
Friend Button1 As New Button() ' 界面设计器自动生成的部分。
Sub Using_Frm2_Button2()
Debug.Writeline(Frm2.Button2.Name)
End Sub
End Class
'Form2.vb
Public Class Form2
...
Friend Button2 As New Button()
Sub Using_Frm1_Var1()
Debug.Writeline(Frm1.Button1.Name)
End Sub
End Class
if 你想从打开form2的过程里(比如是 form1.P1()过程)访问form2的话 then
直接在P1()里写 form2.button.text
elseif 你想从别的过程(比如form1.P2())里访问的话 then
你就必须把form2定义成该form1的全局变量,就是说在form1的最前面
定义:
dim frm as form2
然后这个 frm 变量就可以在 form1 的所有过程里使用了。
即使是在form1.p1()里打开的,比如 :
frm = new form1()
frm.show()
在form1.p2()里也可以这样访问:
msgbox (frm.button.text)
elseif 你想在第三个窗体(比如:form3)里访问form2 then
就得另外生成一个全局模块,用来装这个系统的全局变量,在里面的变量可以在所有的地方访问:
public frm as form2
然后即使是你在 form1 里打开的 ,在 form3 里也可以这样访问:
'Module1.vb
Module Module1
Public Frm1 As New Form1()
Public Frm2 As New Form2()
Sub Main()
Frm1.Show()
Application.Run(Frm1)
End Sub
End Module
'Form1.vb
Public Class Form1
...
Friend Button1 As New Button() ' 界面设计器自动生成的部分。
Sub Using_Frm2_Button2()
Debug.Writeline(Frm2.Button2.Name)
End Sub
End Class
'Form2.vb
Public Class Form2
...
Friend Button2 As New Button()
Sub Using_Frm1_Var1()
Debug.Writeline(Frm1.Button1.Name)
End Sub
End Class
edreamy(梦缘居士) :
请先弄清楚你所说的窗体到底是指窗体的类呢,还是那个类的实例?否则你会有很多概念性的问题,会很混乱的。
VB.NET 里面的 Public Class Form1 中的 Form1 已经不是VB6里面的那个 Form1 了!! VB6里面的Form1既是类,又是实例。 VB.NET 里面的 Form1 仅仅是一个类,你不能直接访问类里面的成员,而只能产生一个类的实例,然后访问该实例的成员。比如:
怎么不可以呢?
请看如下代码:(form1中)
Dim frm2 As New Form2()
Debug.WriteLine(frm2.Button1.Text)
frm2.Show()
Debug.WriteLine(frm2.Button1.Name)
Form2中有一个Button 名为Button1
在这里没有用ShowDialog是因为可以立刻看到输出窗口的代码