Windows 窗体
Windows Forms (WinForms) 是一个用于构建 Windows 桌面应用程序的 UI 框架。它是 Windows 用户界面库(如 User32 和 GDI+)的 .NET 封装。它还提供了 Windows Forms 特有的控件和其他功能。
Windows Forms 还提供了基于 Visual Studio 中提供的可视化设计器创建桌面应用程序的最具生产力的方式之一。它支持可视化控件的拖放以及其他类似功能,使构建桌面应用程序变得轻松。
Windows Forms 进程外设计器
有关支持 .NET 运行时 的 WinForms 设计器,以及 .NET Framework 设计器(支持 .NET Framework 最高版本 4.8.1)与 .NET 设计器(支持 .NET 6、7、8、9+)之间的更改,请参阅 Windows Forms 设计器文档。
重要: 作为第三方控件供应商,当您将控件从 .NET Framework 迁移到 .NET 时,您的控件库在 运行时 预期在相应的新 TFM 上下文中像以前一样工作(TFM 中特殊的现代化或安全更改除外,但这些是罕见的破坏性更改)。根据您的控件设计时支持的丰富程度,从 .NET Framework 到 .NET 的控件设计器迁移可能需要考虑一系列存在破坏性更改的领域。提供的链接指出了有助于该迁移过程的额外资源。
与 .NET Framework 的关系
此代码库是 .NET Framework 4.8 中 Windows Forms 代码的分支。 我们最初以 .NET Core 3.0 为目标启动了迁移过程,并努力使两个运行时达到对等状态。自那以后,我们进行了一系列更改,包括 破坏性更改,这导致两者出现差异。有关破坏性更改的更多信息,请参阅 移植指南。
创新和新功能的门槛
WinForms 是一项最初于 2002 年 2 月 13 日作为 .NET Framework 1.0 一部分引入的技术。其主要目标过去是并且现在是作为基于 Windows 的应用程序的快速应用程序工具,这一核心理念多年来未曾改变。当时的 WinForms 解决了开发者的需求
- 一种用于构建稳定、单体式业务线(Line of Business)应用程序的框架,即使面对极其复杂且繁复的领域特定工作流也是如此
- 轻松提供丰富用户界面的能力
- 一种安全且——在 .NET Framework 的前三个版本中——性能日益提升的方式,用于通过各种 Windows Communication Services 跨进程边界进行通信,或通过 ADO.NET 提供程序访问本地数据库。
- 一个非常易于使用的可视化所见即所得(what-you-see-is-what-you-get)设计器,所需的上手时间很少,并且主要专注于支持基于 96 DPI 分辨率、像素坐标的拖放设计策略。
- 一种灵活的、基于 .NET 反射的设计器扩展模型,利用了 .NET 组件模型。
- 可视化控件和组件,它们通过控件设计器(Control Designers)提供自己的设计时功能
随着时间的推移,以及应对多显示器、高分辨率显示器、性能显著更强大的硬件等更多工作场景的需求日益增长,WinForms 一直在持续进行现代化改造。
然后是 Windows 的演进:当 Windows 的新版本引入新的 API 或更改现有 API 或技术时——WinForms 需要跟上步伐并相应地调整其 API。
而 那 仍然是推动我们进行现代化和创新的主要动力,也是我们在需要或希望考虑的潜在创新领域必须达到的标准:
- 例如出于安全考虑,Windows 团队需要将某些依赖项移出进程(out-of-proc),导致在新 Service Pack 或新 Windows 版本下运行的 WinForms 应用出现极端的性能下降
- 为满足更新后的行业无障碍标准而引入的新功能。
- HighDPI 和 per Monitor V2 场景。
- 采用已更改或扩展的 Win32 控件功能,以确保 WinForms 中的控件能够按照 Windows 团队期望的方式工作。
- 解决性能和安全性问题
- 引入支持交互式异步调用的方式,使应用能够通过 Windows API 投影/Windows Desktop Bridge 选择迁移路径,支持异步 WebAPI、SignalR、Azure Function 等调用场景,从而让 WinForms 后端得以现代化,甚至迁移到云端。
不符合标准的内容:
- 现代桌面 UI(如 WPF 或 WinUI)已经明确具备的新功能
- 会将 Windows 桌面应用“拉伸”为移动、多媒体或 IoT 应用的功能。
- 领域特定的自定义控件,这些控件已由众多第三方控件供应商提供
关于 Visual Basic 的说明:Visual Basic .NET 开发者约占 WinForms 开发者的 20%。如果变更针对客户可见场景中的 bug,我们欢迎特定于 VB 的变更。问题和 PR 应描述客户可见的场景,并尽可能包含显示所提议变更前后问题的图像。由于带宽有限,我们无法优先处理仅针对正确性或代码整洁性的 VB 特定变更。然而,VB 对我们仍然很重要,我们旨在修复出现的任何关键问题。
请注意
:warning: 此仓库仅包含 Windows Forms 的 .NET platform.
实现
它不包含:
- .NET Framework 版本的 Windows Forms。有关 .NET Framework(包括 Windows Forms)的问题,应在 Developer Community 或 Product Support 网站上提交。不应在此仓库中提交。
- Windows Forms 设计器实现。有关设计器的问题可以通过 VS 反馈工具(Visual Studio 右上角图标)提交,或使用 Windows Forms 进程外设计器问题模板在此仓库中提交。
我如何贡献?
我们欢迎贡献!世界各地许多人帮助使该项目变得更好。
- Contributing 说明了我们欢迎哪些类型的更改
- Developer Guide 说明了如何构建和测试
- Get Up and Running with Windows Forms .NET 说明了如何开始构建 Windows Forms 应用程序。
How to Engage, Contribute, and Provide Feedback
贡献的最佳方式之一是尝试新功能、提交 bug、参与设计讨论以及修复问题。
- contributing guidelines 和更通用的 .NET contributing guide 定义了贡献规则。
- Developer Guide 定义了在存储库中工作的设置和工作流程。
- 如果您有问题或发现了 bug,请 file an issue。
- 如果您想贡献并保持与团队同步,请使用 daily builds。
Reporting security issues
安全问题和 bug 应通过电子邮件私下报告给 Microsoft Security Response Center (MSRC) secure@microsoft.com。您应在 24 小时内收到回复。如果由于某种原因未收到,请通过电子邮件跟进,以确保我们收到了您的原始消息。更多信息,包括 MSRC PGP 密钥,可在 Security TechCenter 中找到。另请参阅有关 Microsoft .NET Core and ASP.NET Core Bug Bounty Program 的相关信息。
Code of Conduct
本项目使用 .NET 基金会行为准则 来定义我们社区中的预期行为。任何滥用、骚扰或其他不可接受的行为,均可通过联系项目维护者 conduct@dotnetfoundation.org 进行举报。
许可证
.NET(包括 Windows Forms 仓库)采用 MIT 许可证 授权。
.NET 基金会
.NET Windows Forms 是一个 .NET 基金会 项目。
请参阅 .NET 主仓库 以查找其他 .NET 相关项目。