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