嗨,我必须学习 VB.net 才能获得一份以前是 C# 人的新工作。我刚刚遇到了 VB.net 的一个有趣的特性。我可以在第二个表单上引用尚未实例化的对象!
所以从 Form1 我可以得到 Form2 上 textbox1 的 text 属性,如下所示
Dim txt As String = Form2.TextBox1.Text
谁能解释这是如何工作的?是否所有表单都在程序开始时设置,然后在整个程序生命周期内切换它们的可见性?
嗨,我必须学习 VB.net 才能获得一份以前是 C# 人的新工作。我刚刚遇到了 VB.net 的一个有趣的特性。我可以在第二个表单上引用尚未实例化的对象!
所以从 Form1 我可以得到 Form2 上 textbox1 的 text 属性,如下所示
Dim txt As String = Form2.TextBox1.Text
谁能解释这是如何工作的?是否所有表单都在程序开始时设置,然后在整个程序生命周期内切换它们的可见性?
VB 中的表单是一种特殊情况。My.Forms
编译器在命名空间的对象中生成一个强类型的表单列表 My
。每个表单都作为一个属性公开My.Forms.TheNameOfTheForm
。这些属性总是返回有效的实例——即如果一个表单之前没有被实例化,它会在你第一次使用该属性时被实例化。
到现在为止还挺好。
但微软也做出了脑死(!)的决定,即My.Forms
默认从对象导入属性,无处不在,你无能为力。从表面上看,这是出于向后兼容 VB6 的原因,但这是无稽之谈,因为 VB7 (.NET 1.0) 没有此功能,它只是后来才出现的。
但只是为了澄清:
是否所有表格都在程序开始时设置...?
不,幸运的是没有。它们在您第一次访问该属性时被实例化。