vb.net – 何时创建默认表单实例?
在VB.NET中,表单实例的启动顺序和处理非常奇怪.当您引用表单时,例如Form2.Textbox1.Text =“Foo”,然后CLR自动使用在后台创建的表单实例,并可以通过My.Forms.Form2直接访问.
我正在使用通过自定义Sub Main()启动的WinForms应用程序.这里通过调用Application.Run(frmMain)来运行应用程序. 由于我有多个需要初始化的表单,我想确切地知道真正的表单实例创建的位置.它们都是在Application.Run中创建的,还是仅在我调用Form2.Show()时创建的?我的启动顺序如下: > Sub Main() 我现在可以找到像My.Forms.frmNotMain = New frmNotMain这样的行,所以在创建实例的地方并不明显. 先感谢您. 解决方法
According to MSDN:
所以基本上它是在创建之前创建的并且Sub New在它被显示之前调用(不是在某处创建并保持直到需要).该链接包含此代码,显示它如何创建这些默认实例: 'Code ... generated by the compiler Public m_Form1 As Form1 Public Property Form1() As Form1 Get m_Form1 = Create__Instance__ (Of Form1)(m_Form1) Return m_Form1 End Get Set(ByVal Value As Form1) If Value Is m_Form1 Return End If If Not Value Is Nothing Then Throw New ArgumentException("Property can only be set to Nothing.") End If Dispose__Instance__ (Of Form1)(m_Form1) End Set End Property 但是,您正在谈论默认(“奇怪”)实例方法,这种方法一开始是不明智的.这很大程度上是为了提供与VB6类型代码的兼容性,你只需要对实例执行myForm.Show()并显示一个表单(可能对于那些并不真正理解实例化或OOP的修补程序). 表单是类,应该通过显式创建实例来处理;所以,一般来说: Dim frm As New frmMain ' NEW creates the instance frm.Show 您可以在表单的Sub New中的InitializeComponent上设置断点,以查看何时调用它.要创建对它的全局引用,就像使用任何其他类一样: Friend frmMain As MainForm ' no instance yet Friend myMain As MainClass Public Sub Main ' do this before any forms are created Application.EnableVisualStyles() myMain = New MainClass() myMain.DoStuff() frmMain = New MainForm() ' instanced (NEW) Application.Run(frmMain) End Sub 同样: Dim frm2 = New frmNotMain ' declare and instance ' short for: Dim frm2 As frmNotMain ' declare frm2 frm2 = New frmNotMain ' create instance frm2.Show 在所有情况下,当您使用New运算符创建新表单时,将调用表单的Sub New. VB尝试通过重复使用New来清除这一点,但是使用默认实例,所有这些实际上都隐藏在表单工厂中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |