在移动一些代码以进行调查时,我遇到了.NET的一个我不知道的小特性,即窗体类必须是窗体模块中的第一个类,窗体设计器才能工作。以下情况会使设计器停止工作:
public class myClass
{
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
...
}它仍然可以编译(带有警告)并运行,但它不会设计。如果我将myClass移到文件的底部,那么它工作得很好。有人知道为什么会这样吗?
此外,这意味着在表单中有一组我不知道的代码布局规则。有没有任何人知道的清单--或者我找到了唯一的清单?
发布于 2010-05-26 17:49:08
我认为这是.NET 1.1设计器的产物。当时还没有partial关键字,设计者有一项艰巨的任务要找回InitializeComponent()方法,即使在正在编辑的代码中也是如此。没有来自编译器的帮助。
为了避免完全错误地解释代码的风险,它有一些关于代码应该是什么样子的基本规则。并且要求form类是文件中的第一个类很有意义。如果该规则不存在,它就必须能够解析可能存在非常基本语法错误的类,比如不平衡的大括号。在这种情况下,简单地声明“无法加载表单”不会让任何人满意。
一旦partial关键字可用,这个要求就不能取消,它仍然必须支持在早期版本中设计的表单。
这是我所知道的唯一的代码布局规则。还有很多其他可能的问题,手动修改InitializeComponent()总是获得WSOD的好方法。
发布于 2010-05-26 15:03:21
很明显,这只是设计师的问题。没什么好担心的。
这与C#本身无关,但更多的是使用Visual Studio designer在屏幕上查找和绘制窗体。
https://stackoverflow.com/questions/2910700
复制相似问题