Visual Studio writes code to form1.vb instead of form1.designer.vb
由于某种原因,Windows窗体设计器生成的任何代码都会写入到我的Form.vb类中,而不是写入它所属的Form.designer.vb类中。 希望您能帮助我弄清楚是什么原因造成的。
我删除了尽可能多的代码,并能够通过以下设置重现该问题:
1 2 3 4
| Namespace MyNamespace
public class Form
Inherits System.Windows.Forms.Form
End Namespace |
这实际上是我表单中剩下的所有代码-没有方法/函数/成员。 当我删除命名空间声明时,该代码再次在Form1.designer.vb文件中生成。
为什么命名空间会干扰Visual Studio的功能?
-
我刚刚从头开始创建了一个新项目,以确保我没有任何依赖项或设置干扰。 我可以通过仅向自动生成的Form1类添加"继承System.Windows.Forms.Form"和任意命名空间声明来重现此行为。
-
另一个要点:当我生成一个新类(不是表单)并从System.Windows.Forms.Form手动继承时,会发生相同的问题。 在这种情况下,不会生成designer.vb类,而是将属于该类的所有代码写入我的主类。 在这种情况下,我什至不需要名称空间来获得此行为。 这使我假设尽管在两种情况下Visual Studio都无法找到对designer.vb的正确引用。
-
当您执行此操作时,设计器将退回到传统的VS2002 / 3行为。 当尚不支持局部类时返回。 类声明中缺少的Partial关键字是其提示。
现在,可以手动将命名空间添加到designer.vb文件中。 但是,我不确定在改编designer.vb代码时,Visual Studio是否可以在某些操作中将其删除。
-
不同文件中类的所有部分的名称空间必须相同,以便该类实际上被视为同一类。 如果在一个文件中更改名称空间,则必须在组成该类的所有其他文件中以及在Designer文件中也对其进行更改。 设计器不会自动执行此操作。 否则,设计器文件中的类与另一个文件中的类组成不同的类。 这就是为什么设计者在主文件中生成代码的原因,因为另一个不再与之关联。