本文翻译于Klaus Loeffelmann的这篇英文文章:Updated Modern Code Generation for WinForm’s InitializeComponent – .NET Blog (microsoft.com) 当你使用Visual Studio中的WinForms Designer来创建一个WinForms表单或用户控件时,它并没有像XML或HTML那样的特殊定义或文件格式来表示用户界面。从一开始,WinForms使用的唯一格式就是程序代码。在WinForms Visual Basic项目中定义的表单或用户控件会被保存到VB代码中。在c#项目中,这就是c#代码。这些代码将被放置在一个专用的Designer文件中,该文件位于实际表单代码文件后面,也包含控制UI的代码。 当你的表单或用户控件需要在WinForms Designer中再次打开时,该代码将被解释并根据结果对象图– 在Designer中重新创建表单/用户控件。这就是我们把保存表单的过程称为CodeDOM序列化的原因。这里的CodeDOM指的是一种对象模型(Code Document object model,代码文档对象模型),它允许开发人员通过特定类型的对象来定义程序的各个方面或程序的一部分。 虽然CodeDOM很灵活,可以比较容易地进行扩展,并且支持比Visual Basic或c#更多的语言,但是从现有的代码文件生成CodeDOM图是一件完全不同的事情。虽然CodeDOM可以通过现有的编译器实现为特定的语言编写代码文件,但生成的代码风格仍然是. net框架刚开始时的风格,在许多情况下已经不再符合当前的编码标准。 在WinForms中,当你设计一个表单的时候,所有相关的内容都是在每个表单或用户控件的一个方法中生成的。这个方法(还有一些基础结构和初始化代码)叫做InitializeComponent。 这个方法会被表单的构造函数无条件地调用。在c#中,这是非常明显的,你添加到项目中的新表单总是具有构造函数和所需的调用: public partial class Form1 : Form { public Form2() { InitializeComponent(); } } 在Visual Basic中,如果你不显式地添加构造函数Sub New,
원문출처 : https://devblogs.microsoft.com/dotnet-ch/%E6%9B%B4%E6%96%B0winforms-initializecomponent%E7%9A%84%E7%8E%B0%E4%BB%A3%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90
원문출처 : https://devblogs.microsoft.com/dotnet-ch/%E6%9B%B4%E6%96%B0winforms-initializecomponent%E7%9A%84%E7%8E%B0%E4%BB%A3%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90