我想在某个窗体内点击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