首页 > 其他分享 >.NET 多版本 WinForm 开源控件库 SunnyUI

.NET 多版本 WinForm 开源控件库 SunnyUI

时间:2024-09-12 10:48:28浏览次数:10  
标签:控件 SunnyUI UILocalize static NET public

前言

给大家推荐一款开源的 Winform 控件库,可以帮助我们开发更加美观、漂亮的 WinForm 界面。

项目介绍

SunnyUI.NET 是一个基于 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 开源控件库,同时也提供了工具类库、扩展类库和多页面开发框架。

基于 .NET Framework 4.0,采用原生控件开发,参考 Element 主题风格,包含超过 70 个常用控件,如按钮、编辑框、下拉框、数据表格、工控仪表和统计图表,满足常规开发需求,每个控件都精心设计,注重细节。

提供 11 个 Element 风格主题和 6 个其他主题,支持多彩主题模式自定义。包含主题管理组件 UIStyleManager,可自由切换主题。

项目架构

控件库拥有不同的主题、字体和语言、包括了常见的组件Button、Label、CheckBox、TreeView和TabControl、对话框、进度条、消息提示,提供了扩展库和工具库,方便我们开发和使用,具体如下图所示:

项目环境

1、源码编译环境

VS 2022,安装.NET Framework 4.0 目标包

编译源码,.NET 8 需要 VS 2022 17.8+ 版本,或者修改 SunnyUI.csproj 文件的 TargetFrameworks 属性以适应 VS 环境

2、动态库应用环境

VS 2010 及以上均可,支持.NET Framework 4.0+、.NET 6、.NET 7

推荐通过 Nuget 安装

PM->Install-Package SunnyUI

或者通过 Nuget 搜索 SunnyUI 安装,不支持(.NET Framework 4 Client Profile)。

项目展示

1、主题

SunnyUI为了避免视觉传达差异,使用一套特定的调色板来规定颜色,为你所搭建的产品提供一致的外观视觉感受。

主要颜色参照Element(https://element.eleme.cn/

主色

SunnyUI主要品牌颜色是鲜艳、友好的蓝色。

Style主题

SunnyUI包含 Element 风格主题 11 个,DotNetBar 主题 3 个,其他主题 2 个,包含主题管理组件 UIStyleManager,可自由切换主题。

UIStyle.Blue

UIStyle.Purple

2、国际化

SunnyUI 控件内部默认使用中文,若希望使用其他语言,则需要进行多语言设置。

本页面所描述的国际化是针对SunnyUI内的按钮、标题等中文资源的国际化如您开发的系统需要做国际化请自行开发。

常用的按钮、标题、提示等文字已经设置为静态字符串变量,存于ULocalize.cs文件中。

public static class UILocalize
{
    public static string InfoTitle = "提示";
    public static string SuccessTitle = "正确";
    public static string WarningTitle = "警告";
    public static string ErrorTitle = "错误";
    public static string AskTitle = "提示";
    public static string InputTitle = "输入";
    public static string CloseAll = "全部关闭";
    public static string OK = "确定";
    public static string Cancel = "取消";
    public static string GridNoData = "[ 无数据 ]";
    public static string GridDataLoading = "数据加载中 ......";
    public static string GridDataSourceException = "数据源必须为DataTable或者List";
}

可以重写UILocalize类静态变量值来改变语言。

UILocalizeHelper类已经包含中文和英文的默认配置函数:

public static class UILocalizeHelper
{
    public static void SetEN()
    {
        UILocalize.InfoTitle = "Info";
        UILocalize.SuccessTitle = "Success";
        UILocalize.WarningTitle = "Warning";
        UILocalize.ErrorTitle = "Error";
        UILocalize.AskTitle = "Query";
        UILocalize.InputTitle = "Input";
        UILocalize.CloseAll = "Close all";
        UILocalize.OK = "OK";
        UILocalize.Cancel = "Cancel";
        UILocalize.GridNoData = "[ No data ]";
        UILocalize.GridDataLoading = "Data loading ......";
        UILocalize.GridDataSourceException = "The data source must be DataTable or List";
    }
​
    public static void SetCH()
    {
        UILocalize.InfoTitle = "提示";
        UILocalize.SuccessTitle = "正确";
        UILocalize.WarningTitle = "警告";
        UILocalize.ErrorTitle = "错误";
        UILocalize.AskTitle = "提示";
        UILocalize.InputTitle = "输入";
        UILocalize.CloseAll = "全部关闭";
        UILocalize.OK = "确定";
        UILocalize.Cancel = "取消";
        UILocalize.GridNoData = "[ 无数据 ]";
        UILocalize.GridDataLoading = "数据加载中 ......";
        UILocalize.GridDataSourceException = "数据源必须为DataTable或者List";
    }
}

如需要其他语言,则在自己程序里写函数更新UILocalize类静态变量值即可。

中英文效果展示:

3、字体图标

SunnyUI的字体图标目前主要有两个:

FontAwesome

https://fontawesome.com/

https://github.com/FortAwesome/Font-Awesome

ElegantIcons.ttf V1.0

https://www.elegantthemes.com/blog/resources/elegant-icon-font

这两个都是目前 Web 开发常用的字体图标,SunnyUI经过精心研发,将他们用于.NET Winform开发,省去了到处找图标的麻烦。

SunnyUI 常用字体图标的控件为 UISymbolButton 和 UISymbolLabel

字体图标的选择方法是设置UISymbolButton和UISymbolLabel的以下属性

Symbol:字体图标(int)

SymbolSize:字体图标的大小(int)

4、控件库

常用的各类组件都有,具体内容可以下载源码学习。

5、窗体

UIForm 常用的窗体基类

UILoginForm:登录窗体基类

6、多页面框架

SunnyUI多页面框架由框架和页面构成。最基本的实现是框架(IFrame)由UIForm实现,页面由(UIPage)实现。

在UIForm放置一个UITabControl,将多个UIPage放置于UIForm的UITabControl的TabPage内。

通过PageIndex(正整数,唯一)进行页面的关联和切换。

听起来有点复杂,其实主要就IFrame接口的三个函数:AddPage,ExistPage,SelectPage。

7、工具类库

简易的 Json 静态类库,可以在不引用 NewtonJson 即可简单处理 Json 对象。当然如果有复杂需求,第三方库还是推荐NewtonJson。另外在.NET 5,System.Text.Json的性能已经非常不错了,也可以尝试。

项目地址

GitHub:https://github.com/yhuse/SunnyUI

Gitee:https://gitee.com/yhuse/SunnyUI

帮助文档:https://gitee.com/yhuse/SunnyUI/wikis/pages

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

标签:控件,SunnyUI,UILocalize,static,NET,public
From: https://www.cnblogs.com/1312mn/p/18405542

相关文章

  • 揭秘Profinet远程IO模块的神奇之处
    在这个智能化、自动化日益普及的时代,远程IO模块发挥着越来越重要的用。我们自主研发的MR20系列一体式IO也应运而生,那么,它究竟是什么呢?又能为我们带来哪些便利?让我们一起揭开它的神秘面纱!什么是Profinet协议Profinet协议是一种基于以太网的工业自动化通信协议,广泛应用于工业控制系统......
  • Azure web app has no access to openai private endpoint in virtual network
    题意:"AzureWeb应用无法访问虚拟网络中的OpenAI私有端点。"问题背景:IamtryingtohostawebapplicationsimilartoaprivateChatGPTinstancewithinasecludedvirtualnetwork,ensuringthatthere'snoexternalinternetaccess."我正在尝试在一个隔离的......
  • nnunetv2系列:使用默认的预测类推理2D数据
    nnunetv2系列:使用默认的预测类推理2D数据这里参考源代码nnUNet/nnunetv2/inference/predict_from_raw_data.py中给的示例进行调整和测试。代码示例fromtorchimportdevicefromnnunetv2.inference.predict_from_raw_dataimportnnUNetPredictor#fromnnunetv2.pat......
  • dotnet C# 警惕可空结构体的方法内部赋值无效
    本文将记录一个C#dotnet里的一个稍微隐藏的行为,那就是如果有一个结构体存在某个的方法,此方法的作用是修改结构里面的字段或属性的值,那此时将会在可空的结构体调用此方法时,发现没有真正修改到可空结构体局部变量本身其实这个问题非常好理解,只不过可能在编写代码的时候,由于语法......
  • dotnet 使用 dnlib 检测插件程序集的 API 兼容性
    本文将和大家介绍在开发dotnet的插件时,如何通过dnlib库检测当前的插件是否由于主应用程序的版本差异导致存在API兼容性问题众所周知,在开发插件的过程中,插件与主程序之间的兼容性问题将持续是一个令开发者烦恼的事情。举个例子,我开发的插件是面向1.0版本的主程序开发了,我......
  • dotnet 禁用 SQLite 的 SQLiteFunction 扫描程序集提升启动性能
    在我所在的团队开发的一个WPF应用程序里面,使用到了SQLite作为本地数据库。在优化启动性能过程中,发现了在启动过程一旦访问SQLite将会因为SQLiteFunction扫描程序集导致CPU损耗,从而影响启动性能。本文将告诉大家如何禁用SQLite的SQLiteFunction扫描程序集在SQLiteF......
  • dotnet 测试 SemaphoreSlim 的 Wait 是否保持进入等待的顺序先进先出
    本文记录我测试dotnet里面的SemaphoreSlim锁,在多线程进入Wait等待时,进行释放锁时,获取锁执行权限的顺序是否与进入Wait等待的顺序相同。测试的结果是SemaphoreSlim的Wait大部分情况是先进先出,按照Wait的顺序出来的,但是压力测试下也存在乱序,根据官方文档说明不应该依......
  • dotnet 测试 Mutex 的 WaitOne 是否保持进入等待的顺序先进先出
    本文记录我测试dotnet里面的Mutex锁,在多线程进入WaitOne等待时,进行释放锁时,获取锁执行权限的顺序是否与进入WaitOne等待的顺序相同。测试的结果是Mutex的WaitOne是乱序的,不应该依赖Mutex的WaitOne做排队顺序以下是测试程序代码vartaskList=newList<Task>();......
  • Packaging.DebUOS 专门为 dotnet 应用制作 UOS 安装包
    Packaging.DebUOS是我所在的团队开发开源的一款专门用在为dotnet的应用制作成为符合要求的UOS统信系统软件安装包的工具,此工具可以辅助开发者使用现有的工具链经过简单的配置即可完成安装包的制作设计思想Packaging.DebUOS旨在通过使用csproj项目文件等方式进行配置,避免......
  • Kubernetes为什么移出默认Docker
    • K8s核心代码优化•Docker内部调用链比较复杂,多层封装和调用,导致性能降低、提升故障率、不易排查•Docker还会在宿主机创建网络规则、存储卷,也带来了安全隐患故而可以使用cri-docker继续使用docker,或者使用别的容器运行时。例如:•containerd:containerd与Docker相兼容,相......