SuperAPI AI 工具集

winforms-expert

编程与开发

查看项目

更新于 10-15 18:31

技能介绍

用途

WinForms Expert 用于在请求包含具体 Windows Forms 标记时,创建、修改、调试或审查 Windows Forms 应用。其目标是实现能够编译、在运行时行为正确、并且仍可在 Visual Studio Designer 中编辑的 WinForms 变更。

该技能把 InitializeComponent 和 .Designer. 视为一种序列化格式,而不是普通应用代码;行为应保留在主 partial 类中,并在环境允许时验证设计器可用性。

主要能力

  • 创建或更改 WinForms 项目、Form、UserControl 或自定义控件。
  • 编辑设计器生成的布局、事件接线、资源或组件字段。
  • 诊断 Form Designer 的加载、序列化、缩放、绑定或工具箱问题。
  • 实现 WinForms 特有的异步、MVVM、无障碍、DPI 或深色模式行为。

使用方式

技能定义了执行契约:编辑前,列出工作区根目录并定位任何任务专用验证器、测试脚本或文档化的验证命令;在选择实现前阅读其场景选择器和必需参数。编辑后:

  1. 先运行该窄范围验证器,并修复其归因于本次变更的每个失败。
  2. 验证器通过后,运行聚焦的项目构建。
  3. 如果构建或任何后续编辑改变了源文件,重新运行窄范围验证器。
  4. 将这些命令与运行时 UI 和 Designer 往返检查分开报告。

构建成功永远不能替代可用的布局、绑定、序列化或设计器安全性验证器。不要仅阅读验证器或构建成功后即结束。应使用仓库实际的命令和参数,顺序类似:

pwsh -NoProfile -File <task-validator.ps1> <scenario-arguments>
dotnet build <project> --nologo

设计器契约

技能区分两种代码上下文:

  • 设计器序列化:.Designer.cs、.Designer.vb、InitializeComponent。应使用简单、确定性的语句,使设计器能够解析和重新生成。
  • 应用行为:主 partial 类、服务、视图模型。应使用项目 TFM 和语言版本支持的语言特性。

在 InitializeComponent 和设计器文件中,应保留控件/组件构造、属性赋值、集合添加、布局挂起/恢复、资源应用和命名事件处理程序接线;使用类级控件/组件字段;使用主 partial 文件中定义的命名事件处理程序;不得添加控制流、局部函数、表达式体逻辑、集合表达式、null 条件或 null 合并表达式等运行时决策逻辑;不得添加业务逻辑、数据加载、验证、服务调用或除既有生成成员之外的方法;保留生成器的命名空间风格、限定风格、排序、资源和可空处理;保留设计器依赖的现有构造函数;保持 BeginInit/EndInit、SuspendLayout/ResumeLayout 和容器所有权平衡。

适用场景

适用于 WinForms 项目、Form、UserControl、自定义控件的创建与修改;设计器生成布局、事件接线、资源与组件字段的编辑;Form Designer 加载、序列化、缩放、绑定、工具箱问题的诊断;以及 WinForms 特有的异步、MVVM、无障碍、DPI、深色模式行为实现。

限制

不用于将应用转换为其他 UI 框架,除非用户明确请求迁移;不用于仅为风格重写可用的生成代码;不用于更改目标框架、语言版本、SDK、包策略、启动模型、DPI 模式或应用级主题,除非请求要求;不得在未实际打开并操作 Visual Studio Designer 的情况下声称其可用。

输入要求

必需输入包括:请求的 UI 行为或缺陷、项目语言和目标框架、现有 Form/UserControl partial 文件、仓库约定。设计器可用性为可选输入。项目语言和目标框架应通过检查项目文件获得,不应假设为现代 .NET 或 C#。

工作流要点

  1. 建立项目约束:检查解决方案/项目、目标框架、语言、可空设置、包管理、应用启动和现有构建命令;识别应用面向现代 .NET 还是 .NET Framework;在编辑前阅读每个受影响 Form/UserControl 的完整 partial 文件集和 .resx。
  2. 规划序列化边界:将每个变更分类为序列化 UI 状态或运行时行为;仅在 InitializeComponent 中放置设计器可表示的状态;将条件设置、动态内容、数据加载、转换、验证和服务交互放在主 partial 类或其他运行时类型中。
  3. 实现 UI 结构:对于新布局或大幅修改的布局,优先使用 TableLayoutPanel、FlowLayoutPanel、SplitContainer 和嵌套 UserControl,而非脆弱的绝对定位;保持现有窗体的 AutoScaleMode;为可调整大小或本地化对话框设置有意义的最小尺寸。
  4. 在生成代码之外添加行为:遵循项目语言和风格约定;保持 UI 线程亲和性明确;对于 WinForms 事件处理程序,async void 可接受,但应围绕等待的工作捕获异常、有意处理取消,并通过应用既定的错误路径呈现意外失败。
  5. 有意识地实现绑定和序列化:对于经典绑定,使用 INotifyPropertyChanged 和 BindingList<T> 或既定适配器;对于现代 WinForms MVVM API,先确认 TFM 包含所需 API;对于自定义 Component/Control 属性,选择一种有意的 CodeDOM 序列化策略。

暂未提供

关于该技能的具体收费、价格、平台支持范围、效果数据或详细使用步骤,资料中暂未提供。