使用中的WinForms设计器创建WinForms窗体或用户控件时Visual Studio,它没有像XML或HTML来表示用户界面。从一开始,唯一的格式WinForms使用的是程序代码。WinForms中定义的窗体或用户控件Visual Basic项目保存到VB代码中。在C#项目中,这就是C#代码。该代码将放置在专用的Designer文件中,该文件位于实际窗体代码文件,并包含用于控制UI的代码。
当需要在WinForms中再次打开窗体或用户控件时设计器,该代码将被解释,并基于生成的对象图在设计器中重新创建窗体/用户控件。这就是我们打电话的原因保存表单的过程CodeDOM序列化.代码DOM这里指的是对象模型(代码D类文件O(运行)对象M(M)模型)它允许开发人员定义程序的各个方面或程序的一部分通过特定类型的对象。
虽然CodeDOM非常灵活,但可以相对轻松地进行扩展支持比Visual Basic或C#更多的语言,从中生成CodeDOM图现有的代码文件完全不同。尽管CodeDOM有为特定语言实际编写代码文件的选项其现有编译器实施,结果代码的样式与.NET Framework,在许多情况下不再符合当前的编码标准。
在WinForms中,当您设计窗体时,会生成所有相关的内容每个窗体或用户控件使用一种方法。这种方法(在一些基础结构和初始化代码)初始化组件
.
此方法由Form的构造函数无条件调用。在C#情况下这很明显,您添加到项目中的新表单总是具有该构造函数和所需的调用:
公共部分类Form1:Form{公共窗体2(){InitializeComponent();}}
在Visual Basic中,如果不添加构造函数Sub新建
明确地说基本编译器插入对初始化组件
在中自动背景。但是,如果向代码文件中添加构造函数,编辑器也会将呼叫插入初始化组件
在VB代码中:
公开课表格1新建子项()'此调用是设计器所必需的。初始化组件()'在InitializeComponent()调用后添加任何初始化。结束Sub结束类
请注意,在Visual Basic中继承
语句,它允许您的新窗体类继承自系统。窗户。形式。形式
基类,与C相反#只是设计器代码隐藏文件的一部分。在VB中,对于分部类只声明部分
关键字在一个分部类的代码文件中。这就是为什么要使用Visual BasicWinForms窗体代码文件只包含窗体的类默认情况下定义。
直到最近,WinForms Designer使用代码模型接口解释不同编程语言的源代码以构建设计器保存窗体或用户所需的内部CodeDOM图控件的定义。但我们改变了这一点。
进入Roslyn
WinForms与Visual Studio 2022版本17.5一起引入了一种现代化的方法读取并生成的代码初始化组件
对于桌面应用程序进程外设计师.它通过使用.NET编译器站台–更好地了解作为Roslyn SDK–用于所有相关任务。Roslyn编译器是一组的开源编译器和代码分析API。NET语言。它允许开发人员使用C#和Visual Basic编写、分析和操作代码。净值使用现代语言特征。它还提供了丰富的诊断和代码重构,以提高代码质量和开发人员生产力。它是黄金标准和当前在C#和VB中生成代码的最佳实践。而且,因为它是用于编译和构建目的的相同工具在Visual Studio中为任何C#或Visual Basic项目生成代码结果完全符合当前的编码标准。
此外,由于Roslyn编译器提供了某些API,因此它不仅知道对的特定语句、命令或方法的语法,但也关于这个代码块的语义在WinForms设计时,WinForms设计器可以指出内部代码的潜在问题初始化组件
比以前更早、更准确。所以,它不仅知道你什么时候拼写“Buttne”是错误的–它还知道定义了输入错误的变量的内部初始化组件
将是未知符号,并且能够指向那就完了。
但还有一系列其他好处:
- 以前,基于CodeModel的CodeDOM构建只能在UI线程。这不仅是一个阻塞操作,它无法利用现代多核处理器的全部潜力。使用Roslyn编译器,我们将能够通过使用并行化。
- 最近引入的旧系统没有一个简单的解释方法语言特征。使用Roslyn,我们可以选择引入语言功能,如
姓名
生成更健壮的代码,尤其是对于数据约束目的。此外,它还为更复杂的代码开辟了道路的内部生成初始化组件
这将有助于针对上生成的HighDPI场景优化和均衡代码生成具有不同HighDPI设置的机器。
- Roslyn编译器支持以下方面.editorconfig(编辑器配置)配置,所以在中生成的代码
初始化组件
与你和你的团队正在通过custom.editorconfig强制执行您的编码标准定义。
总之,有几个基本的编码元素与以前不同。省略这
在C#或我
在Visual Basic中是这样的例子之一。以下屏幕截图显示了使用Roslyn为中的按钮生成代码初始化组件
:
如果您对移动代码的技术背景感兴趣在WinForms设计器中生成到Roslyn或如何配置初始化组件
使用.editorconfig生成代码,看看这个WinForms中的技术文章回购他更详细地指出了所有这些事情。
关于主题的反馈对我们来说非常重要,所以请让我们了解您对WinForms代码生成的想法评论。如果您对WinForms Designer有建议或认为您发现错误,请随时在WinForms Github软件回购.
快乐的设计和编码!