简短版本:正在使用一个类,而没有变量的类型被实例化。怎么样?
我有一个巨大的遗留程序,从VB6转换为VB.net。 它正在编译并且许多方面都有效,但是存在与MDI(多文档界面)显示相关的问题。我已将其他测试表单放在父MDI表单下,并且它们正确显示。有问题的表格不会显示。 (而且,当然,它是最重要的,也是最复杂的形式。我希望我可以重写它,但是没有可能性。)
有一个类MDI1,在许多其他类的代码中使用了7000多次。 MDI1类以不显示的形式广泛使用。无论在何处使用MDI1,它总是简称为MDI1或Namespace.MDI1。据我所知,它永远不会被实例化为一个对象。就好像它是一个单身人士,不知何故,但我看不出任何东西使它成为一个。
该类的标题如下:
Option Strict Off
Option Explicit On
Imports VB = Microsoft.VisualBasic
Friend Class MDI1
Inherits System.Windows.Forms.Form
Dim MDI_Activated As Boolean
Public Sub New()
MyBase.New()
InitializeComponent_Renamed()
End Sub
...
有人能告诉我这里会发生什么吗?
使用它的每个地方,我都试图通过右键单击并选择&#34来检查Visual Studio;转到定义"带我回到类定义(上面代码的第4行),而不是类型的变量 MDI1。我搜索了整个源代码(使用Visual Studio和Visual Studio外部的grepwin),并且找不到使用MDI1类型实例化的变量。
我不理解这个类的调用是如何工作的,没有这种类型的变量。
非常感谢帮助。
我正在使用Visual Studio 2010 Professional,这是我可以访问的最新版本。
答案 0 :(得分:5)
我假设您不了解VB.NET中的Default Form Instance
,因此出人意料。这是一个常见问题,因为在C#中缺少这个问题。
对于VB.NET中的winforms应用程序,每个表单都有一个默认实例,可以简单地通过其表单名称(类名称)来引用。您可以像任何其他类一样创建自己的实例,并选择不使用默认实例。
此功能对于已从VB6迁移到VB.NET的旧应用程序特别有用,因为默认表单实例是VB6中的标准。
您可以在此处详细了解Default Form Instances
:
https://msdn.microsoft.com/en-us/library/ms233839.aspx
和
https://msdn.microsoft.com/en-us/library/aa289529(v=vs.71).aspx