继承表单,无 .Designer.cs 文件。

3
当我从Form或自定义表单进行继承时,我并不总是会得到a.Designer.cs文件。如果我查看该表单并双击它,则InitializeComponent()方法最终会出现在我的派生类中。如何强制创建一个Designer.cs文件?什么原因可能导致它没有被创建?
我发现并不是所有的表单都会出现这种情况,但是不确定是什么原因导致的...?
编辑:
  1. 通过右键单击解决方案 > 添加 > 新建项目 > Windows窗体应用程序来创建新项目
  2. 右键单击项目 > 添加 > 类 > "FormA.cs"
  3. 编辑类:"public class FormA : Form" => 仍然只被视为一个类
  4. 添加方法:public FormA(){} => 解决方案资源管理器显示表单图标,但没有子文件
  5. 右键单击 > 查看设计器 => 显示表单
  6. 双击表单 => 在FormA.cs中生成一个FormA_Load方法和InitializeComponent方法,并生成一个FormA.resx文件。但没有Designer.cs。

2
请给出点评,让我有机会改进问题,谢谢。 - bretddog
我没有点踩,至少还没有 :) 只是好奇,如果你没有设计文件,你如何“查看”表单?您能否添加一些代码,以便我们可以重现此行为? - Alex Filipovici
我还没有投票,但如果您能说明您是如何添加新表单的,那会很有帮助。@AlexFilipovici,“查看设计器”菜单项即使没有“.Designer.cs”文件也可以正常工作,这是正常的。 - user743382
@hvd,你说得对...但是,并不是即时发生的。它是在几秒钟后发生的(也许是在我关闭并重新打开代码之后)。 - Alex Filipovici
@AlexFilipovici 这种情况通常发生在VS意识到基类是可以进行设计的情况下,这通常会在你执行构建操作后立即发生。 - user743382
3
我编辑了并附上了重现步骤。 - bretddog
2个回答

4

右键点击项目 > 添加 > 类 > "FormA.cs"

问题出在这里。设计师并没有添加.Designer.cs文件,而是使用已经存在的文件。

如果您创建一个新窗体,它将默认拥有一个.Designer.cs文件。您可以更改基类,并保留.Designer.cs文件。

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


1
这里实际发生的事情是,当你向VS项目添加类或表单时,它是从模板开始创建的。事实上,如果你选择“添加新项”而不是“添加类”或“添加表单”,你可以在所有已安装模板的列表中看到类和表单(包括标准模板和自定义模板)。
模板只是一个其中一些名称被参数化的项目(例如类名和类的命名空间)。对于表单,模板由两个不同的文件组成,而类则只包含一个文件。设计者文件的存在并不改变类的功能,它只是一种将生成的内容保持在一边,以便你不容易修改它的方式。
你查看表单设计师视图的事实并不取决于设计者文件的存在,而是取决于Visual Studio在你双击该项时查找你的类(它是从表单继承的),并决定如何打开它。
试着快速查看这个结果:
typeof(Form).GetCustomAttributes(typeof(DesignerAttribute), false);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接