关于c#:Inherit Form,no .Designer.cs

Inherit Form, no .Designer.cs

当我继承Form或自定义形式时,我并不总是得到a.Designer.cs文件。然后,如果我查看表单并双击它,那么InitializeComponent()方法将在派生类中结束。我将如何强制创建一个Designer.cs文件,以及什么可能导致它不被创建?

我看到它并没有发生在我的所有形式,但不确定是什么原因造成的….

编辑:

百万千克1通过右键单击解决方案>添加>新建项目>Windows窗体应用程序创建新项目百万千克1百万千克1右键单击项目>添加>类>"forma.cs"百万千克1百万千克1编辑类:"public class form a:form"=>仍被视为类百万千克1百万千克1添加方法:public form a()=>解决方案资源管理器显示表单图标,但没有子文件百万千克1百万千克1右键单击>视图设计器=>显示窗体百万千克1百万千克1双击Form=>生成一个form a_加载方法,并在form a.cs中初始化component方法,并生成一个form a.resx文件。但没有设计师。百万千克1


right click project > Add > Class >"FormA.cs"

这就是问题所在。设计者没有添加.Designer.cs文件。设计器使用已经可用的文件。

如果创建一个新表单,默认情况下它将有一个.Designer.cs文件。然后您可以更改基类,它将保留.Designer.cs文件。

如果创建一个新类,它将没有.Designer.cs文件。设计师不会为你创造一个,它实际上并不需要它。


这里真正发生的是,当您将类或表单添加到您的vs项目中时,它是从模板开始创建的。事实上,如果您选择添加新项目而不是添加类或添加表单,则可以在所有已安装模板的列表中同时看到类和表单(标准模板和可以自己构建的模板)。

模板只是一些名称被参数化的项(例如类名称和类的命名空间)。对于表单,模板由两个不同的文件组成,而类1只包含一个文件。存在设计器文件的事实并不会改变类的功能,它只是一种将生成的内容保留在您的方法之外的方法,这样您就不太容易修改它。

在设计器中查看表单的事实并不取决于设计器文件的存在,而是取决于Visual Studio在双击项时查找类(从表单继承)的DesignerAttribute并决定如何打开它。

只需快速查看以下结果:

1
typeof(Form).GetCustomAttributes(typeof(DesignerAttribute), false);