3

当我继承Form或自定义表单时,我并不总是得到a.Designer.cs文件。如果我然后查看表单并双击它,则该InitializeComponent()方法最终会出现在我的派生类中。我将如何强制Designer.cs创建文件,什么可能导致它不创建?

我看到它不会发生在我的所有表格上,但不确定是什么原因造成的......?

编辑:

  1. 通过右键单击解决方案 > 添加 > 新项目 > Windows 窗体应用程序创建新项目
  2. 右键单击项目>添加>类>“FormA.cs”
  3. 编辑类:“public class FormA:Form”=>仍然只是被视为一个类
  4. add 方法:public FormA(){} => 解决方案资源管理器显示一个表单图标,但没有子文件
  5. 右键单击>查看设计器=>显示表单
  6. 双击form => 生成FormA_Load方法,FormA.cs中的InitializeComponent方法,生成FormA.resx文件。但没有 Designer.cs。
4

2 回答 2

4

右键单击项目>添加>类>“FormA.cs”

那就是问题所在。设计器不添加.Designer.cs文件。设计器使用已经可用的文件。

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

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

于 2013-02-08T10:03:27.810 回答
1

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

模板只是一个项目,其中一些名称被参数化(例如类名和类的命名空间)。在 Form 的情况下,模板由两个不同的文件组成,而类 1 只包含一个文件。有 Designer 文件这一事实不会改变您的类的功能,它只是一种将生成的东西挡在您面前的方式,这样您就不太容易修改它。

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

试着快速查看一下结果:

typeof(Form).GetCustomAttributes(typeof(DesignerAttribute), false);
于 2013-02-08T11:34:27.880 回答