我现在正在使用VB,而VB有一个令人讨厌的功能,称为“默认窗体实例”,当您引用窗体类而不是表单实例时,该窗体对象将创建一个默认实例。替换默认窗体实例
例如:
public class frmMain
Inherits System.Windows.Forms.Form
end class
private Sub Sub1
frmMain.Show()
end Sub
上面编译代码,并没有错误,因为当您通过类名调用它运行时给你frmMain的新实例中运行。
的问题是:
有没有一种方法,以取代实例的默认实例,我创造出来的? 另一种说法是:有没有办法将我创建的实例设置为默认实例?
对于那些想请问谁“为什么地球上,你会需要这样的东西吗?”:
我有这样的应用程序,让我们称之为MyApplication.exe
,这是一个Windows窗体应用程序和frmMain
是主要形式。 应用程序中主表单的许多引用都是通过默认实例来实现的,直到现在,该实例才能正常工作。 我正在对应用程序进行一些更改。不必直接运行MyApplication.exe
,我必须动态加载程序集并通过反射运行。下面是我该怎么做:
Dim assembly As Reflection.Assembly = LoadAssembly("MyApplication.exe")
Dim frm As Object = assembly.CreateInstance("MyApplication.frmMain")
frm.Show()
我创建并通过反射显示frmMain
的实例。稍后,当应用程序尝试通过默认实例访问frmMain
时,运行时会创建一个新的frmMain
实例,因为它认为默认实例尚未存在。但是现在默认实例和屏幕上的实例是不同的对象。
底线是:通过反思,我试图模仿直接运行MyApplication.exe的确切行为。