关于窗体show方法的困惑,该如何解决

关于窗体show方法的困惑
我以前是使用VB5编程的,最近才开始接触VB.NET,好象VB.NET2005有很多个版本一样,我现在使用的是Team   Suite版,前几天用2003时好象是什么“企业结构版”。

现在就有个很菜的问题问问各位高人:
我在2003中新建两个窗体命名为frmMain、frmSub,在frmMain上点一个按钮就打开frmSub窗体,可是2003不允许我使用frmSub.show方法,非要
Dim   formSub   as   frmSub
formSub   =new   frmSub
formSub.Show
这样才行。

而在2005Team   Suite版里,我可以象在VB5里一样使用
frmSub.Show
而不必声明一个formSub来使用Show方法,当然也可以象2003里一样先声明再使用Show方法。

是2003和2005的语法有这些区别,还是我本身的语法就有问题呢?

------解决方案--------------------
应该是编译器产生il方式不同的缘故,2003很久前用的,当时确实只能先实例化窗体,2005中楼主可以试一下建立一个新的空项目,再向里面添加窗体(哦,对了,别忘了引入命名空间),hoho,2003的问题又重现了吧,估计是编译器的核心更改了吧,更人性化了??
------解决方案--------------------
是这样的,你定义Dim formSub as frmSub
frmsub是个类,要调用类的方法,你必须先对这个类实例化,即定义一个实例化对象
所一必须先对formSub要New一下

这跟VB5不同,是面向对象的思想
------解决方案--------------------
2005确实把以前2003版本去掉的一些VB6的特性又找回来了。不光是这个,好像还包括编辑并继续功能
------解决方案--------------------
因为之前2003省去了直接调用窗体的写法造成好多的不便,所以在2005中重新引入如VB6直接调用窗体。

下面是MSDN2005介绍
------------------------------------------------
提供属性,用于访问在当前项目中声明的每个 Windows 窗体的实例。

备注
My.Forms 对象提供了当前项目中每个窗体的实例。属性与它所访问的窗体同名。有关向项目添加窗体的信息,请参见如何:向项目添加 Windows 窗体。

您可以通过使用窗体名称(无需限定)访问由 My.Forms 对象提供的窗体。由于属性名称与窗体的类型名称相同,这将允许您如同窗体具有默认实例那样来访问窗体。例如,My.Forms.Form1.Show 等效于 Form1.Show。

My.Forms 对象仅公开与当前项目关联的窗体。它不会提供对在引用 DLL 中声明的窗体的访问。若要访问 DLL 提供的窗体,必须使用窗体的限定名,书写格式为 DllName.FormName。有关更多信息,请参见如何:访问窗体。

可以使用 My.Application.OpenForms 属性获取所有应用程序的打开窗体的集合。

此对象及其属性仅可用于 Windows 应用程序。

属性
My.Forms 对象的每个属性提供了对当前项目中某个窗体实例的访问。属性与此属性所访问的窗体同名,且属性类型与窗体类型相同。

注意
如果存在名称冲突,则用于访问窗体的属性名为 RootNamespace.Namespace.FormName。例如,假设有两个名为 Form1. 的窗体。如果其中一个窗体在根命名空间 WindowsApplication1 和命名空间 Namespace1 中,则您可以通过 My.Forms.WindowsApplication1.Namespace1.Form1 访问该窗体。


My.Forms 对象提供了对在启动时创建的应用程序主窗体实例的访问。对于所有其他窗体,My.Forms 对象创建一个新的窗体实例(在它被访问时),并存储该实例。访问该属性的后续尝试将返回此窗体实例。

您可以通过将 Nothing 赋予该窗体的属性来释放窗体。属性 setter 调用窗体的 Close 方法,然后将 Nothing 赋予存储的值。如果向属性赋予 Nothing 以外的任何值,setter 将引发 ArgumentException 异常。

您可以通过使用 Is 或 IsNot 运算符来测试 My.Forms 对象的属性是否存储了窗体的实例,并可以使用这些运算符来检查此属性的值是否为 Nothing。

注意
通常,Is 或 IsNot 运算符必须读取此属性的值以执行比较。但是,如果属性当前存储的值为 Nothing,该属性将创建窗体的一个新实例,然后返回该实例。不过,Visual Basic 编译器将特殊对待 My.Forms 对象的属性,并且允许 Is 或 IsNot 运算符检查属性的状态而不改变其值。