前言
在快速迭代的软件开发环境中,如何高效地开发一个功能完整、界面美观的 WinForm 管理系统,是许多开发面临的现实问题。
今天推荐一款基于 Ant Design 设计语言的 WinForm UI 框架,它通过深度封装和现代化设计,彻底改变了传统 WinForm 应用的开发模式。大家无需再为繁琐的基础设施代码所困扰,只需聚焦核心业务逻辑,能够用极简的方式快速搭建企业级桌面应用。
项目介绍
WenAntdUI 项目的主要模块及其对应的功能说明,涵盖了从示例测试到核心应用的各个组成部分,便于大家了解项目结构和功能分布。
项目结构具体如表所示:
| | |
---|
| |
|
| | |
| | |
| |
|
| | |
| | winform Aot(SqlSugarCore)测试 |
| WinFormsAppFreeSqlAotTest | |
| | |
| |
|
| | 前后分离服务器项目(内含WebApi和SignalR) |
| | |
| | |
| | |
| | |
内部运行集成 一行代码搞定一个完整的管理系统基础功能
项目功能
AOT发布:支持AOT(Ahead-of-Time)编译发布,提升应用性能。
字典管理:提供增删改查功能,方便管理系统中的各类字典数据。
用户管理:支持用户的增删改查、角色分配和密码重置。
菜单管理:实现菜单的增删改查,支持自定义页面控件和样式。
用户设置:允许用户更改密码和修改图像,图像存储在SQL中。
项目说明
初始化与登录
首次运行WenAntdUI时,它会自动初始化一个Sqlite数据库,并在运行目录下创建data.db
文件。
可以使用默认的登录账户admin
和密码admin
快速进入系统,开始体验各项功能。
集成启动方式
应用WenAntdUI,可以使用顶级语言
App.Run();//只需要此代码即可启动一个项目
//services 主要是注入服务,将项目控件注入到服务中。
App.Run(services =>
{
services.AddControlServices(Assembly.GetExecutingAssembly());
});
//AddControlServices 内部封装了Control注入功能,只需要传递程序集即可
//很多开发项目,需要使用注册机功能,也只需要在 App.Run修改,即可一个完整注册机功能,硬件信息生成唯一注册码
App.Run(services =>
{
services.AddControlServices(Assembly.GetExecutingAssembly());
},true); //此处增加
加密解密
加密解密KEY请自行生成替换 Wen.Core.Helps AesRsaHelp中
public static string RsaFromPem { get; set; } = @"-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxot7LoZAVHZDhlGE8e6/
WqTmgmGZhVepofQhhynB/jTA69lMXoKfcXJMr/8Zyfdug97re7NkJX8Jei4cJlEv
nyzNRrY1tz1+dkrISYi0nBkwaDMTd2Wsw63QjcqZl1yCTVT6jboNR/0a7hyb2gwt
5cXW2ylgVZ6PttOUPXb3ZF8oWLe1BVWfcQXFIlErqVjsY3iFgcNxCucvYhiDzcbm
qHFIbUj9760E666Ws3Io32OQK1EkkdufqNuL1gm9/9qYXE0KChGzetnFfhtOGmvK
cPp3os07zdeeFOdKbwCbZjUxSy2a/6IKvEWilONNPNSMBxcc70oci565CtrIdyah
IQIDAQAB
-----END PUBLIC KEY-----";
public static string AesKey = "u4GP+xHwd3slNDYCVeOvDpbe0eLJz7XpaEj46SA9EtM=";
public static string AesIv = "8Daxh29YSAjUBulFYoMhdw==";
功能集成
内部集成了 枚举,字典等样式识别
全局采用注入方式,Page控件可以使用注入方式,直接调用
[Description("角色管理")] //此处为菜单选择注释
publicpartialclassSysRolePage : UserControl
{
privatereadonly IFreeSql fsql;
privatereadonly MenuService menuService;
public SysRolePage(IFreeSql fsql, MenuService menuService)
{
this.fsql = fsql;
this.menuService = menuService;
InitializeComponent();
this.adminTable1.SetColumns<SysRole>();
this.adminTable1.Query();
InitMenuItem();
this.adminTable1.CellClick += AdminTable1_CellClick;
}
}
AdminTable
封装控件 AdminTable 只需要一行代码即可实现一个表增删改查
this.adminTable1.SetColumns<SysRole>();
[Index($"index_{nameof(SysRole)}_{nameof(RoleName)}", nameof(RoleName), true)]
publicclassSysRole
{
/// <summary>
/// 获得/设置 角色名称
/// </summary>
[DisplayName("角色名称")]
[Col] //自动编辑功能,需要在属性上面 加上 Col 特性
[Key]
publicstring? RoleName { get; set; }
/// <summary>
/// 获得/设置 角色描述
/// </summary>
[DisplayName("角色描述")]
[Col]
publicstring? Description { get; set; }
}
1、自定义构建列
this.adminTable1.SetColumn<SysMenuDto>()
.Add(a => a.Name, 288, c => c.SetTree(nameof(SysMenuDto.Childs)))
.Add(a => a.Code)
.Add(a => a.ParentCode)
.Add(a => a.OrderNo)
.Add(a => a.IconImage)
.Add(a => a.MenuType)
.Add(a => a.Description)
.Add(a => a.ControlType);
2、查询数据
this.adminTable1.QueryData = async e =>
{
e.IsExpand = true;
return fsql.Select<SysMenuDto>()
.WhereIf(!string.IsNullOrWhiteSpace(e.QueryText), a => a.Name.Contains(e.QueryText))
.ToTreeList();
};
this.adminTable1.Query(); //手动执行查询
字典管理
增删改查
菜单管理
增删改查、页面控件、自定义样式
开发中无需考虑 new ,可以使用注入方式 ,在构造函数中使用
public partialclassUserControlTestTable : UserControl
{
public UserControlTestTable(IFreeSql fsq1)
{
InitializeComponent();
adminTable1.SetColumns<SysDict>();
}
}
//需要提前注入,若是采用插件方式开发,此处可以调用外部插件直接注入dll文件
App.Run(services =>
{
services.AddControlServices(Assembly.GetExecutingAssembly());
}, true);
完成注入后即可在菜单选中使用
角色管理
增删改查、分配权限
用户管理
增删改查、分配角色、重置密码
用户信息设置
更改密码、修改图像、图像存储在SQL中
封装组件演示
1、前后端分离增删改查
2、图像选择组件
3、字典选择组件
4、上传功能集成组件
5、下载功能集成组件
6、Model编辑组件
7、双向绑定
8、Auth组件(按钮权限)
前后分离通用查询方式虽然方便,慎用慎用!!!
出于安全考虑,不集成在 AdminTable,若需要使用,只要替换增删改查代码即可
1、查询数据
需要需要提供类型 搜索内容 页码 单页数
var client = new ApiClient();
var res = await client.GetListAsync(typeof(SysDict), "", true, 1, 5);
this.table1.DataSource = res.Data;
2、更新数据
var client = new ApiClient();
var res = client.UpdateObject(item);
await RefreshDataAsync();
3、删除数据
var client = new ApiClient();
var res = client.DeleteObject(item);
await RefreshDataAsync();
4、插入数据
var client = new ApiClient();
var res = client.InsertObject(item);
await RefreshDataAsync();
Model编辑组件
使用方式
this.modelEditControl1.GetItemBuilder(value)
.Add(a => a.Color)
.Add(a => a.Name)
.Add(a => a.CreateTime)
.Add(a => a.Image)
//.Add(a => a.Aa)
//.Add(a => a.Name, content: new DictSelect("1"))
.Add(a => a.KK)
.Add(a => a.Dict)
.Add(a => a.KKd)
.Add(a => a.Typ)
.Add(a => a.TestEditControlTest, content: new TestEditControl())
.Add(a => a.Check);
更新数据
this.modelEditControl1.Model = obj;
Auth组件(按钮权限)
设计页面拖入 Auth ,然后点击按钮,按钮上就会多一个属性
AdminTable 增删改 权限设置方法
this.auth1.SetAuth(this.adminTable1, "useradmin");
//菜单中请设置权限 useradmin:edit, useradmin:delete, useradmin:add
项目源码
Gitee:https://gitee.com/AntdUI/wen-antd-ui
总结
WenAntdUI框架基于AntdUI,集成了多种实用功能,通过简洁的集成方式和丰富的组件库,为大家提供了一站式的管理后台开发解决方案。
不管是初始化与登录、项目结构与启动、数据演示与配置,还是功能集成与组件使用,WenAntdUI都表现出了极高的易用性和灵活性。对于希望快速开发管理后台系统的团队来说,WenAntdUI无疑是一个值得尝试的选择。
关键词
#WenAntdUI、#WinForm、#AntdUI、#AdminTable、#权限管理、#AOT、#gRPC、#SignalR、#SqlSugar、#FreeSql、#AOT编译支持、#AntDesign风格、#SQLite、#AntdUI
阅读原文:原文链接
该文章在 2025/8/4 18:20:10 编辑过