继承表单,没有.Designer.cs

时间:2013-02-08 09:24:20

标签: c# .net winforms visual-studio-2010

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

我发现我的所有表格都没有发生,但不确定是什么导致了什么......?

编辑:

  1. 通过右键单击解决方案创建新项目>添加>新项目> Windows窗体应用程序
  2. 右键单击项目>添加>课程> “FormA.cs”
  3. 编辑课程:“公共类FormA:Form”=>仍被视为一个阶级
  4. 添加方法:public FormA(){} =>解决方案资源管理器显示表单图标,但没有子文件
  5. 右键单击> View Designer =>显示表格
  6. 双击表单=>在FormA.cs中生成FormA_Load方法和InitializeComponent方法,并生成FormA.resx文件。但没有Designer.cs。

2 个答案:

答案 0 :(得分:3)

  

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

这就是问题所在。设计人员不会添加.Designer.cs个文件。设计人员使用已经可用的文件。

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

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

答案 1 :(得分:0)

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

模板只是一个参数化的项目(例如类的名称和名称空间)。在Form的情况下,模板由两个不同的文件组成,而第一个类只包含一个文件。存在Designer文件的事实不会改变您的类的功能,它只是一种保持生成的东西不受影响的方式,因此您不太容易修改它。

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

试着快速查看结果:

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