首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

问个对象实例化的简单有关问题

2012-01-20 
问个对象实例化的简单问题我想在某个窗体内点击button打开窗体Rackmanager一直用的是Rackmanager.Show()这

问个对象实例化的简单问题
我想在某个窗体内点击button打开窗体Rackmanager
一直用的是Rackmanager.Show()这句,而且我的project里面打开窗体都是这样写的,直到某次修改后运行出错,而且只有这里出错
说对象没有实例化,我改为下面的语句,运行通过
Dim X As New Rackmanager 
X.Show()

我这里想问下出现这个问题的原因,谢谢

[解决办法]
Show()如果是 Rackmanager 类的静态方法(也就是 Show() 前面有 Shared 修饰符),就可以用类名 Rackmanager 调用

VB.NET code
Rackmanager.Show()
[解决办法]
出现楼主所说的情形,我估计是用不同版本的VS编译项目所致。
在2005及以上版本中,VS给项目添加了许多隐含代码。在默认参数编译时,VS给各个窗体建立了一个静态类,其中的代码是这样的:
VB.NET code
<DebuggerHidden> _Private Shared Function Create__Instance__(Of T As { Form, New })(ByVal Instance As T) As T    Dim Create__Instance__ As T    If (IIf(((Instance Is Nothing) OrElse Instance.IsDisposed), 1, 0) = 0) Then        Return Instance    End If    If (Not MyForms.m_FormBeingCreated Is Nothing) Then        If MyForms.m_FormBeingCreated.ContainsKey(GetType(T)) Then            Throw New InvalidOperationException(Utils.GetResourceString("WinForms_RecursiveFormCreate", New String(0  - 1) {}))        End If    Else        MyForms.m_FormBeingCreated = New Hashtable    End If    MyForms.m_FormBeingCreated.Add(GetType(T), Nothing)    Try         Return Activator.CreateInstance(Of T)    Catch obj1 As Object When (?)        Dim ex As TargetInvocationException        Throw New InvalidOperationException(Utils.GetResourceString("WinForms_SeeInnerException", New String() { ex.InnerException.Message }), ex.InnerException)        ProjectData.ClearProjectError    Finally        MyForms.m_FormBeingCreated.Remove(GetType(T))    End Try    Return Create__Instance__End Function 

热点排行