Compare commits

...

95 Commits

Author SHA1 Message Date
Sunny
42a042beb3 * UIDataGridView: 修复数据更新时是否自动滚动到最后一行 2025-04-21 22:54:29 +08:00
Sunny
123427892e * UITabControl: 更新部分注释 2025-04-21 22:15:14 +08:00
Sunny
0b7f218b3c * UITabControl: 修复不可关闭的主页被关闭了 #IC1XIU 2025-04-17 22:20:30 +08:00
Sunny
c5e5a11188 * UINavMenu: 增加节点文字居中的属性 2025-04-17 13:48:50 +08:00
Sunny
8bf338e488 3.8.3 2025-04-06 20:20:28 +08:00
Sunny
0d989a75ea * EnumEx: DisplayText特性改为原生的Description特性 2025-04-06 16:42:44 +08:00
Sunny
00897c5cc5 * UIBreadcrumb: 增加SetItemColor,设置单个节点颜色,可以用RemoveItemColor移除 2025-04-03 23:24:27 +08:00
Sunny
cd04f9cf19 * UIDigitalLabel: 增加ShowText属性,可以显示文字 #IBY64V 2025-04-03 22:43:44 +08:00
Sunny
7fd73a8808 * UILedLabel: 重构显示位置,并增加Padding属性关联显示 2025-03-31 21:03:58 +08:00
Sunny
b9c87e15e8 * UIComboBox: 修复过滤下拉框跟随主题配色 2025-03-18 22:36:33 +08:00
Sunny
4f75336ed5 * 增加控件在工具箱说明文字 2025-03-18 22:12:54 +08:00
Sunny
8fce03fff2 * 增加控件在工具箱说明文字 2025-03-17 23:50:55 +08:00
Sunny
42c453820c * 更新一些控件的字体图标 2025-03-16 13:27:59 +08:00
Sunny
dc503f0eea * UIDoubleUpDown: 增加按钮字体图标的大小属性
* UIIntegerUpDown: 增加按钮字体图标的大小属性
2025-03-16 13:20:12 +08:00
Sunny
76426019e3 更新Demo 2025-03-09 21:17:23 +08:00
Sunny
f40426c113 V3.8.2 2025-03-09 20:55:59 +08:00
Sunny
28a1f1a451 * UIBarChart: 增加Y轴零度线偏移量,Option.ZeroLineOffset 2025-03-05 21:12:11 +08:00
Sunny
ec00734884 * UIBattery: 增加图标旋转角度,增加图标偏移位置,调整图标最大值 2025-03-04 21:18:52 +08:00
Sunny
282c1ae17c * UITabControl: 增加标签页分割线属性ShowTabDivider,#IBLERL 2025-02-13 10:45:17 +08:00
Sunny
76910ac4ff * UITabControlMenu: 修复切换主题色时,TabPage未设置背景色,#IBKDR7 2025-02-07 21:12:24 +08:00
Sunny
a07043ae07 * UITabControl: 修复切换主题色时,TabPage未设置背景色,#IBKDR7 2025-02-07 21:09:34 +08:00
Sunny
8decdf00cf * UIColorPicker: 增加手动输入ARGB值调色 #IBHL0H 2025-02-04 22:13:55 +08:00
Sunny
c451a61a66 更新Demo 2025-02-04 21:36:42 +08:00
Sunny
2c3022a322 + UIStatusBox: 增加根据状态显示图片控件 2025-01-18 17:33:21 +08:00
Sunny
b0093af77a * UIMenuButton: 更改属性描述 2025-01-15 17:49:06 +08:00
Sunny
8727038717 * UIForm: 修复窗体边框显示不全 #IBGJBS 2025-01-09 20:44:27 +08:00
Sunny
b9daa7e005 更新版本日期 2025-01-07 22:19:21 +08:00
Sunny
031be368e4 * UFontAwesomeV6: 更新为Font Awesome version: 6.7.2 2025-01-06 21:54:57 +08:00
Sunny
6a5d7bea2f 更新描述 2025-01-02 21:51:25 +08:00
Sunny
8a5f6ea7b0 更改描述 2025-01-02 21:47:14 +08:00
Sunny
36b7d41336 V3.8.1 2024-12-27 23:34:17 +08:00
Sunny
66fec152d4 V3.8.1 2024-12-27 22:28:21 +08:00
Sunny
1d60a09987 重构 2024-12-27 21:37:59 +08:00
Sunny
6b5d644bd9 重构 2024-12-27 21:28:27 +08:00
Sunny
b01e4e14e1 + UIMenuButton: 增加下拉菜单按钮 2024-12-26 21:35:08 +08:00
Sunny
5d9e0a6f53 + UIMenuButton: 增加下拉菜单按钮 2024-12-26 21:32:53 +08:00
Sunny
65a35f5bad 增加了两处翻译 2024-12-23 22:49:45 +08:00
Sunny
c0c3298fd1 * UITitlePanel: 增加Padding设置 #IBB1UF 2024-12-14 20:11:13 +08:00
Sunny
2c70e734c4 * UITabControl: 增加未选页签颜色 #IB7U69 2024-12-12 23:11:35 +08:00
Sunny
d0c731fe97 * UITabControl: 修复标签文字越界显示 #IB8571 2024-12-12 22:31:28 +08:00
Sunny
09ba37daa3 * UIVerificationCode: 可以自定义颜色 #IBABW1 2024-12-12 20:49:26 +08:00
Sunny
000c567255 * UIComboDataGridView: 修复一个报错 #IB8YK9 2024-12-04 21:40:44 +08:00
Sunny
beb21ebb91 * UICalendar: 切换语言实时刷新 2024-12-02 21:34:22 +08:00
Sunny
452e9e6e15 * UIScrollingText: 停止滚动时,可以设置默认显示位置 2024-12-02 21:25:39 +08:00
Sunny
120dbf2151 * UICheckBoxGroup: 修复TitleTop为0时,条目显示错位的问题 #IB7STO
* UIRadioButtonGroup: 修复TitleTop为0时,条目显示错位的问题 #IB7STO
2024-11-29 10:59:06 +08:00
Sunny
98d280d9f0 * UITabControl: 修复了SelectedIndex=-1时的报错 2024-11-29 09:35:54 +08:00
Sunny
f831a92cf7 * UIComboDataGridView: 解决下拉框显示过滤编辑框不能一直显示 #IB7AFB 2024-11-28 21:05:48 +08:00
Sunny
661b44090c 更新Demo 2024-11-27 22:50:09 +08:00
Sunny
741d10939a * UFontAwesomeV6: 更新为Font Awesome version: 6.7.1 2024-11-27 22:33:15 +08:00
Sunny
22677c9974 更新Demo 2024-11-19 23:08:47 +08:00
Sunny
9dbc2e80bd 3.8.0.1 2024-11-19 22:31:12 +08:00
Sunny
28cc5b3823 V3.8.0 2024-11-19 22:10:21 +08:00
Sunny
c6650b3c0e * UINotifier: 点击提示关闭,增加输出提示 2024-11-19 12:33:30 +08:00
Sunny
1708d57ef1 重构 2024-11-19 09:46:37 +08:00
Sunny
7e6ee8e98b * UIPanel: 增加透明度 2024-11-19 09:40:43 +08:00
Sunny
3c2ba689eb 更新 2024-11-15 10:30:17 +08:00
Sunny
4760de7dd1 * UILineChart: 增加了鼠标移上绘制十字线颜色 2024-11-14 10:17:21 +08:00
Sunny
c676e92fda * UILineChart: 增加了鼠标移上绘制十字线样式 2024-11-13 11:05:53 +08:00
Sunny
92607169d5 * UIComboDataGridView: 增加下拉框滚动条宽度调整属性 2024-11-12 15:03:45 +08:00
Sunny
e4c483dfeb * UINavBar: 增加StyleDropDown属性,手动修改Style时设置此属性以修改下拉框主题 2024-11-11 11:24:12 +08:00
Sunny
af41257d35 * UIComboBox: 增加StyleDropDown属性,手动修改Style时设置此属性以修改下拉框主题
* UIComboBox: 删除ScrollBarColor、ScrollBarBackColor、ScrollBarStyleInherited属性
* UIColorPicker:  增加StyleDropDown属性,手动修改Style时设置此属性以修改下拉框主题
* UIComboDataGridView: 增加StyleDropDown属性,手动修改Style时设置此属性以修改下拉框主题
* UIComboTreeView: 增加StyleDropDown属性,手动修改Style时设置此属性以修改下拉框主题
* UIDatePicker: 增加StyleDropDown属性,手动修改Style时设置此属性以修改下拉框主题
* UIDatetimePicker: 增加StyleDropDown属性,手动修改Style时设置此属性以修改下拉框主题
* UIDatePicker: 增加StyleDropDown属性,手动修改Style时设置此属性以修改下拉框主题
* UINumPadTextBox: 增加StyleDropDown属性,手动修改Style时设置此属性以修改下拉框主题
2024-11-10 22:43:32 +08:00
Sunny
76b13321e6 * UControl: UITreeView增加了一个刷新节点状态的扩展函数 2024-11-06 14:33:31 +08:00
Sunny
63952daa11 * UIScrollBar: 修复了一些重载事件 2024-11-04 14:00:21 +08:00
Sunny
b68740f828 重构 2024-11-03 23:24:23 +08:00
Sunny
45d2eed8b9 * UIPage: 增加标题栏图片属性IconImage,优先于Symbol 2024-10-30 21:46:30 +08:00
Sunny
ecc5d49b90 * UIBaseForm: IconImage增加IconImageSize属性,可调整大小 2024-10-29 22:55:52 +08:00
Sunny
88bce81140 * UIComboBox: 增加了SelectionChangeCommitted事件,下拉框显示鼠标点击条目时响应 2024-10-28 22:46:47 +08:00
Sunny
2d98153089 * UIBarChart: 增加了一个快捷的显示数据函数ShowData 2024-10-25 10:44:56 +08:00
Sunny
49c9419590 * UIDigitalLabel: 增加DPI支持 2024-10-22 21:05:30 +08:00
Sunny
e9ffd02edc V3.7.2 2024-10-06 21:31:18 +08:00
Sunny
a411027eb1 * UIBaseForm: 增加属性IconImage,以改善Icon转Image显示不佳,状态栏显示仍然用Icon属性 2024-10-05 22:11:46 +08:00
Sunny
e67f03d9da * 重构多语翻译类 2024-10-05 21:09:26 +08:00
Sunny
7af419a5c0 * 重构多语翻译类 2024-09-29 22:27:03 +08:00
Sunny
5f09fe5626 * 重构多语翻译类 2024-09-27 23:34:14 +08:00
Sunny
2daddaef65 * 重构多语翻译类 2024-09-26 23:33:08 +08:00
Sunny
7bdde150c2 增加示例说明 2024-09-24 22:22:18 +08:00
Sunny
ecc1433b37 更新文档 2024-09-24 22:08:38 +08:00
Sunny
2ae270d571 更新文档 2024-09-23 22:21:59 +08:00
Sunny
9a3320c10f 更新文档 2024-09-22 22:21:11 +08:00
Sunny
aec616b1cf 增加文档 2024-09-22 21:18:27 +08:00
Sunny
b3ef1e1288 更新忽略项 2024-09-22 21:18:14 +08:00
Sunny
f12bef2dd8 * 重构多语翻译类 2024-09-17 22:49:54 +08:00
Sunny
2c24db60d9 * 重构多语翻译类 2024-09-16 21:54:35 +08:00
Sunny
1ccaaad57c * 重构多语翻译类 2024-09-16 21:47:57 +08:00
Sunny
3a506824d1 * 多页面框架重构 2024-09-16 17:33:34 +08:00
Sunny
c0fbc85a76 * 重构多语翻译类 2024-09-14 22:05:03 +08:00
Sunny
98c7a8f81e * 重构多语翻译类 2024-09-13 23:43:27 +08:00
Sunny
fd053e6553 * 重构多语翻译类 2024-09-10 23:31:49 +08:00
Sunny
6543a103a4 * UICheckBoxGroup: 2024-09-09: V3.7.0 更改计算节点位置的方法,解决问题:#IAPY94
* UIRadioButtonGroup: 2024-09-09: V3.7.0 更改计算节点位置的方法,解决问题:#IAPY94
2024-09-09 15:47:06 +08:00
Sunny
7fb69265ee * UIDataGridView: 解决有隐藏行时,滚动条滚动时出错的问题 #IAOW3A 2024-09-04 21:33:52 +08:00
Sunny
d1957cb75c * UINumPadTextBox: 增加ShowDropDown()弹窗方法 2024-09-03 16:34:42 +08:00
Sunny
6794b58d65 * UIRadioButton: 修改AutoSize属性可以保存在Design.cs文件里面,#IAKYX4
* UICheckBox: 修改AutoSize属性可以保存在Design.cs文件里面,#IAKYX4
2024-08-30 21:18:08 +08:00
Sunny
4dd0a284ac * UIDatePicker: 修复格式化字符串包含/时显示错误
* UIDateTimePicker: 修复格式化字符串包含/时显示错误
2024-08-28 21:55:55 +08:00
Sunny
51c6da4833 * UIDataGridView: 增加属性AutoScrollToBottom,数据更新时是否自动滚动到最后一行 2024-08-27 14:14:36 +08:00
Sunny
c2b4db9fc7 * UIDoubleUpDown: 增加加按钮字体图标的偏移位置
* UIIntegerUpDown: 增加加按钮字体图标的偏移位置
2024-08-27 14:07:21 +08:00
439 changed files with 12288 additions and 3433 deletions

6
.gitignore vendored
View File

@ -351,3 +351,9 @@ healthchecksdb
/SunnyUI.Demo/Bin/SunnyUI.Demo.exe /SunnyUI.Demo/Bin/SunnyUI.Demo.exe
/SunnyUI.Demo/Bin/SunnyUI.Demo.exe.config /SunnyUI.Demo/Bin/SunnyUI.Demo.exe.config
/SunnyUI.Demo/Bin/SunnyUI.dll /SunnyUI.Demo/Bin/SunnyUI.dll
/docs/.vitepress/cache/deps
/run.bat
/package.json
/package-lock.json
/docs/markdown-examples.md
/docs/api-examples.md

View File

@ -23,11 +23,11 @@ SunnyUI.Net项目已加入[dotNET China](https://gitee.com/dotnetchina) 组织
![dotnetchina](https://images.gitee.com/uploads/images/2021/0324/120117_2da9922c_416720.png "132645_21007ea0_974299.png") ![dotnetchina](https://images.gitee.com/uploads/images/2021/0324/120117_2da9922c_416720.png "132645_21007ea0_974299.png")
#### 软件介绍 #### 软件介绍
- SunnyUI.NET 是基于.Net Framework4.0+、.Net6、.Net8 框架的 C# WinForm 开源控件库、工具类库、扩展类库、多页面开发框架。 - SunnyUI.NET 是基于.Net Framework4.0+、.Net8、.Net9 框架的 C# WinForm 开源控件库、工具类库、扩展类库、多页面开发框架。
- 源码编译环境: - 源码编译环境:
1. **VS2022**,安装.NetFramework4.0目标包的方法见https://www.cnblogs.com/yhuse/p/15536393.html 1. **VS2022**,安装.NetFramework4.0目标包的方法见https://www.cnblogs.com/yhuse/p/15536393.html
2. 编译源码,.Net8需要VS2022 17.8+版本或者修改SunnyUI.csproj文件的TargetFrameworks属性以适应VS环境 2. 编译源码,.Net8需要VS2022 17.12+版本或者修改SunnyUI.csproj文件的TargetFrameworks属性以适应VS环境
- 动态库应用环境: **VS2010**及以上均可,支持.Net Framework4.0+、.Net6、.Net8 - 动态库应用环境: **VS2010**及以上均可,支持.Net Framework4.0+、.Net8、.Net9
1. 推荐通过Nuget安装Install-Package SunnyUI或者通过Nuget搜索SunnyUI安装。 1. 推荐通过Nuget安装Install-Package SunnyUI或者通过Nuget搜索SunnyUI安装。
2. 不支持(.Net Framework 4 **Client Profile**)。 2. 不支持(.Net Framework 4 **Client Profile**)。

View File

@ -18,6 +18,13 @@ namespace Sunny.UI.Demo
DateTime dt = new DateTime(2020, 10, 4); DateTime dt = new DateTime(2020, 10, 4);
UILineOption option = new UILineOption(); UILineOption option = new UILineOption();
//设置图表边框空白部分尺寸
option.Grid.Left = 60;
option.Grid.Right = 60;
option.Grid.Top = 60;
option.Grid.Bottom = 60;
option.ToolTip.Visible = true; option.ToolTip.Visible = true;
option.Title = new UITitle(); option.Title = new UITitle();
option.Title.Text = "SunnyUI"; option.Title.Text = "SunnyUI";
@ -40,6 +47,7 @@ namespace Sunny.UI.Demo
//数据点显示小数位数 //数据点显示小数位数
series.YAxisDecimalPlaces = 2; series.YAxisDecimalPlaces = 2;
//增加曲线时可以设置曲线颜色例如Color.Lime
series = option.AddSeries(new UILineSeries("Line2", Color.Lime)); series = option.AddSeries(new UILineSeries("Line2", Color.Lime));
series.Add(dt.AddHours(3), 3.3); series.Add(dt.AddHours(3), 3.3);
series.Add(dt.AddHours(4), 2.3); series.Add(dt.AddHours(4), 2.3);
@ -116,6 +124,9 @@ namespace Sunny.UI.Demo
//设置曲线显示最大点数,超过后自动清理 //设置曲线显示最大点数,超过后自动清理
series.SetMaxCount(50); series.SetMaxCount(50);
//设置曲线平滑
series.Smooth = true;
//坐标轴显示小数位数 //坐标轴显示小数位数
option.XAxis.AxisLabel.DecimalPlaces = 1; option.XAxis.AxisLabel.DecimalPlaces = 1;
option.YAxis.AxisLabel.DecimalPlaces = 1; option.YAxis.AxisLabel.DecimalPlaces = 1;

View File

@ -196,7 +196,7 @@ namespace Sunny.UI.Demo
this.uiAvatar2.AvatarSize = 55; this.uiAvatar2.AvatarSize = 55;
this.uiAvatar2.Font = new System.Drawing.Font("宋体", 12F); this.uiAvatar2.Font = new System.Drawing.Font("宋体", 12F);
this.uiAvatar2.Icon = Sunny.UI.UIAvatar.UIIcon.Image; this.uiAvatar2.Icon = Sunny.UI.UIAvatar.UIIcon.Image;
this.uiAvatar2.Image = global::Sunny.UI.Demo.Properties.Resources.SunnyUISmall; this.uiAvatar2.Image = global::Sunny.UI.Demo.Properties.Resources.SunnyUI72;
this.uiAvatar2.Location = new System.Drawing.Point(30, 85); this.uiAvatar2.Location = new System.Drawing.Point(30, 85);
this.uiAvatar2.MinimumSize = new System.Drawing.Size(1, 1); this.uiAvatar2.MinimumSize = new System.Drawing.Size(1, 1);
this.uiAvatar2.Name = "uiAvatar2"; this.uiAvatar2.Name = "uiAvatar2";

View File

@ -84,10 +84,17 @@ namespace Sunny.UI.Demo
this.uiToolTip1 = new Sunny.UI.UIToolTip(this.components); this.uiToolTip1 = new Sunny.UI.UIToolTip(this.components);
this.uiSwitch5 = new Sunny.UI.UISwitch(); this.uiSwitch5 = new Sunny.UI.UISwitch();
this.uiSwitch6 = new Sunny.UI.UISwitch(); this.uiSwitch6 = new Sunny.UI.UISwitch();
this.uiMenuButton1 = new Sunny.UI.UIMenuButton();
this.uiLine6 = new Sunny.UI.UILine();
this.uiContextMenuStrip1 = new Sunny.UI.UIContextMenuStrip();
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)(this.uiImageButton4)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.uiImageButton4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).BeginInit();
this.uiContextMenuStrip1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// uiSwitch3 // uiSwitch3
@ -1004,11 +1011,69 @@ namespace Sunny.UI.Demo
this.uiSwitch6.TabIndex = 117; this.uiSwitch6.TabIndex = 117;
this.uiSwitch6.Text = "uiSwitch6"; this.uiSwitch6.Text = "uiSwitch6";
// //
// uiMenuButton1
//
this.uiMenuButton1.Cursor = System.Windows.Forms.Cursors.Hand;
this.uiMenuButton1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiMenuButton1.Location = new System.Drawing.Point(30, 554);
this.uiMenuButton1.Menu = this.uiContextMenuStrip1;
this.uiMenuButton1.MinimumSize = new System.Drawing.Size(1, 1);
this.uiMenuButton1.Name = "uiMenuButton1";
this.uiMenuButton1.Size = new System.Drawing.Size(180, 35);
this.uiMenuButton1.Symbol = 361642;
this.uiMenuButton1.TabIndex = 118;
this.uiMenuButton1.Text = "下拉菜单按钮";
this.uiMenuButton1.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
//
// uiLine6
//
this.uiLine6.BackColor = System.Drawing.Color.Transparent;
this.uiLine6.Font = new System.Drawing.Font("宋体", 12F);
this.uiLine6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLine6.Location = new System.Drawing.Point(30, 516);
this.uiLine6.MinimumSize = new System.Drawing.Size(16, 16);
this.uiLine6.Name = "uiLine6";
this.uiLine6.Size = new System.Drawing.Size(312, 20);
this.uiLine6.TabIndex = 119;
this.uiLine6.Text = "UIMenuButton";
this.uiLine6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// uiContextMenuStrip1
//
this.uiContextMenuStrip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255)))));
this.uiContextMenuStrip1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiContextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ToolStripMenuItem,
this.ToolStripMenuItem,
this.ToolStripMenuItem});
this.uiContextMenuStrip1.Name = "uiContextMenuStrip1";
this.uiContextMenuStrip1.Size = new System.Drawing.Size(123, 70);
//
// 菜单一ToolStripMenuItem
//
this.ToolStripMenuItem.Name = "菜单一ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
this.ToolStripMenuItem.Text = "菜单一";
//
// 菜单二ToolStripMenuItem
//
this.ToolStripMenuItem.Name = "菜单二ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
this.ToolStripMenuItem.Text = "菜单二";
//
// 菜单三ToolStripMenuItem
//
this.ToolStripMenuItem.Name = "菜单三ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
this.ToolStripMenuItem.Text = "菜单三";
//
// FButton // FButton
// //
this.AllowShowTitle = true; this.AllowShowTitle = true;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(800, 614); this.ClientSize = new System.Drawing.Size(800, 614);
this.Controls.Add(this.uiLine6);
this.Controls.Add(this.uiMenuButton1);
this.Controls.Add(this.uiSymbolButton24); this.Controls.Add(this.uiSymbolButton24);
this.Controls.Add(this.uiSwitch6); this.Controls.Add(this.uiSwitch6);
this.Controls.Add(this.uiSwitch5); this.Controls.Add(this.uiSwitch5);
@ -1072,6 +1137,7 @@ namespace Sunny.UI.Demo
((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit();
this.uiContextMenuStrip1.ResumeLayout(false);
this.ResumeLayout(false); this.ResumeLayout(false);
} }
@ -1132,5 +1198,11 @@ namespace Sunny.UI.Demo
private UIToolTip uiToolTip1; private UIToolTip uiToolTip1;
private UISwitch uiSwitch5; private UISwitch uiSwitch5;
private UISwitch uiSwitch6; private UISwitch uiSwitch6;
private UIMenuButton uiMenuButton1;
private UILine uiLine6;
private UIContextMenuStrip uiContextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem;
} }
} }

View File

@ -120,4 +120,7 @@
<metadata name="uiToolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="uiToolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
<metadata name="uiContextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>133, 17</value>
</metadata>
</root> </root>

View File

@ -40,8 +40,6 @@ namespace Sunny.UI.Demo
uiComboDataGridView1.DataGridView.AddColumn("数据列2", "Column2"); uiComboDataGridView1.DataGridView.AddColumn("数据列2", "Column2");
uiComboDataGridView1.DataGridView.AddColumn("数据列3", "Column3"); uiComboDataGridView1.DataGridView.AddColumn("数据列3", "Column3");
uiComboDataGridView1.DataGridView.ReadOnly = true; uiComboDataGridView1.DataGridView.ReadOnly = true;
uiComboDataGridView1.SelectIndexChange += UiComboDataGridView1_SelectIndexChange;
uiComboDataGridView1.ShowFilter = true;
uiComboDataGridView1.DataGridView.DataSource = dt;//用DataTable做数据源过滤用List不行 uiComboDataGridView1.DataGridView.DataSource = dt;//用DataTable做数据源过滤用List不行
uiComboDataGridView1.FilterColumnName = "Column1;Column3"; //不设置则全部列过滤,可加分号过滤多列 uiComboDataGridView1.FilterColumnName = "Column1;Column3"; //不设置则全部列过滤,可加分号过滤多列
@ -52,7 +50,6 @@ namespace Sunny.UI.Demo
uiComboDataGridView2.DataGridView.AddColumn("数据列2", "Column2"); uiComboDataGridView2.DataGridView.AddColumn("数据列2", "Column2");
uiComboDataGridView2.DataGridView.AddColumn("数据列3", "Column3"); uiComboDataGridView2.DataGridView.AddColumn("数据列3", "Column3");
uiComboDataGridView2.DataGridView.ReadOnly = true; uiComboDataGridView2.DataGridView.ReadOnly = true;
uiComboDataGridView2.ShowFilter = true;
uiComboDataGridView2.DataGridView.DataSource = dt; uiComboDataGridView2.DataGridView.DataSource = dt;
uiComboDataGridView2.FilterColumnName = "Column1"; //不设置则全部列过滤 uiComboDataGridView2.FilterColumnName = "Column1"; //不设置则全部列过滤
@ -152,7 +149,7 @@ namespace Sunny.UI.Demo
if (value != null && value is DataGridViewSelectedRowCollection) if (value != null && value is DataGridViewSelectedRowCollection)
{ {
DataGridViewSelectedRowCollection collection = (DataGridViewSelectedRowCollection)value; DataGridViewSelectedRowCollection collection = (DataGridViewSelectedRowCollection)value;
foreach (var item in collection) foreach (object item in collection)
{ {
DataGridViewRow row = (DataGridViewRow)item; DataGridViewRow row = (DataGridViewRow)item;
uiComboDataGridView2.Text += row.Cells[0].Value.ToString();//通过索引显示值 uiComboDataGridView2.Text += row.Cells[0].Value.ToString();//通过索引显示值

View File

@ -12,7 +12,7 @@ namespace Sunny.UI.Demo
var styles = UIStyles.PopularStyles(); var styles = UIStyles.PopularStyles();
foreach (UIStyle style in styles) foreach (UIStyle style in styles)
{ {
ToolStripMenuItem item = new ToolStripMenuItem(style.DisplayText()) { Tag = style }; ToolStripMenuItem item = new ToolStripMenuItem(style.Description()) { Tag = style };
item.Click += Item_Click; item.Click += Item_Click;
uiContextMenuStrip1.Items.Add(item); uiContextMenuStrip1.Items.Add(item);
} }

View File

@ -31,8 +31,12 @@
this.components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FMain)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FMain));
this.uiContextMenuStrip1 = new Sunny.UI.UIContextMenuStrip(); this.uiContextMenuStrip1 = new Sunny.UI.UIContextMenuStrip();
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.NHome = new System.Windows.Forms.ToolStripMenuItem();
this.ToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.NAbout = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
this.NZhCN = new System.Windows.Forms.ToolStripMenuItem();
this.NZhTW = new System.Windows.Forms.ToolStripMenuItem();
this.NEnUS = new System.Windows.Forms.ToolStripMenuItem();
this.StyleManager = new Sunny.UI.UIStyleManager(this.components); this.StyleManager = new Sunny.UI.UIStyleManager(this.components);
this.uiNavBar1 = new Sunny.UI.UINavBar(); this.uiNavBar1 = new Sunny.UI.UINavBar();
this.uiAvatar1 = new Sunny.UI.UIAvatar(); this.uiAvatar1 = new Sunny.UI.UIAvatar();
@ -52,32 +56,63 @@
// uiContextMenuStrip1 // uiContextMenuStrip1
// //
this.uiContextMenuStrip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255))))); this.uiContextMenuStrip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255)))));
this.uiContextMenuStrip1.Font = new System.Drawing.Font("宋体", 12F); this.uiContextMenuStrip1.Font = new System.Drawing.Font("Tahoma", 12F);
this.uiContextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.uiContextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ToolStripMenuItem, this.NHome,
this.ToolStripMenuItem1}); this.NAbout,
this.toolStripMenuItem1,
this.NZhCN,
this.NZhTW,
this.NEnUS});
this.uiContextMenuStrip1.Name = "uiContextMenuStrip1"; this.uiContextMenuStrip1.Name = "uiContextMenuStrip1";
this.uiContextMenuStrip1.Size = new System.Drawing.Size(107, 48); this.uiContextMenuStrip1.Size = new System.Drawing.Size(143, 130);
// //
// 关于ToolStripMenuItem // NHome
// //
this.ToolStripMenuItem.Name = "关于ToolStripMenuItem"; this.NHome.Name = "NHome";
this.ToolStripMenuItem.Size = new System.Drawing.Size(106, 22); this.NHome.Size = new System.Drawing.Size(142, 24);
this.ToolStripMenuItem.Text = "主页"; this.NHome.Text = "主页";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click); this.NHome.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
// //
// 关于ToolStripMenuItem1 // NAbout
// //
this.ToolStripMenuItem1.Name = "关于ToolStripMenuItem1"; this.NAbout.Name = "NAbout";
this.ToolStripMenuItem1.Size = new System.Drawing.Size(106, 22); this.NAbout.Size = new System.Drawing.Size(142, 24);
this.ToolStripMenuItem1.Text = "关于"; this.NAbout.Text = "关于";
this.ToolStripMenuItem1.Click += new System.EventHandler(this.ToolStripMenuItem1_Click); this.NAbout.Click += new System.EventHandler(this.ToolStripMenuItem1_Click);
//
// toolStripMenuItem1
//
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
this.toolStripMenuItem1.Size = new System.Drawing.Size(139, 6);
//
// NZhCN
//
this.NZhCN.Name = "NZhCN";
this.NZhCN.Size = new System.Drawing.Size(142, 24);
this.NZhCN.Text = "简体中文";
this.NZhCN.Click += new System.EventHandler(this.NZhCN_Click);
//
// NZhTW
//
this.NZhTW.Name = "NZhTW";
this.NZhTW.Size = new System.Drawing.Size(142, 24);
this.NZhTW.Text = "繁体中文";
this.NZhTW.Click += new System.EventHandler(this.NZhTW_Click);
//
// NEnUS
//
this.NEnUS.Name = "NEnUS";
this.NEnUS.Size = new System.Drawing.Size(142, 24);
this.NEnUS.Text = "English";
this.NEnUS.Click += new System.EventHandler(this.NEnUS_Click);
// //
// StyleManager // StyleManager
// //
this.StyleManager.DPIScale = true; this.StyleManager.DPIScale = true;
this.StyleManager.GlobalFont = true; this.StyleManager.GlobalFont = true;
this.StyleManager.GlobalFontName = "Tahoma"; this.StyleManager.GlobalFontName = "Tahoma";
this.StyleManager.MultiLanguageSupport = true;
// //
// uiNavBar1 // uiNavBar1
// //
@ -160,6 +195,7 @@
this.uiPanel3.Location = new System.Drawing.Point(842, 0); this.uiPanel3.Location = new System.Drawing.Point(842, 0);
this.uiPanel3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.uiPanel3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiPanel3.MinimumSize = new System.Drawing.Size(1, 1); this.uiPanel3.MinimumSize = new System.Drawing.Size(1, 1);
this.uiPanel3.MultiLanguageSupport = false;
this.uiPanel3.Name = "uiPanel3"; this.uiPanel3.Name = "uiPanel3";
this.uiPanel3.RadiusSides = Sunny.UI.UICornerRadiusSides.None; this.uiPanel3.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
this.uiPanel3.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left | System.Windows.Forms.ToolStripStatusLabelBorderSides.Top))); this.uiPanel3.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left | System.Windows.Forms.ToolStripStatusLabelBorderSides.Top)));
@ -175,6 +211,7 @@
this.uiPanel2.Location = new System.Drawing.Point(0, 0); this.uiPanel2.Location = new System.Drawing.Point(0, 0);
this.uiPanel2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.uiPanel2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiPanel2.MinimumSize = new System.Drawing.Size(1, 1); this.uiPanel2.MinimumSize = new System.Drawing.Size(1, 1);
this.uiPanel2.MultiLanguageSupport = false;
this.uiPanel2.Name = "uiPanel2"; this.uiPanel2.Name = "uiPanel2";
this.uiPanel2.RadiusSides = Sunny.UI.UICornerRadiusSides.None; this.uiPanel2.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
this.uiPanel2.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right))); this.uiPanel2.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)));
@ -190,11 +227,14 @@
this.uiNavMenu1.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; this.uiNavMenu1.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll;
this.uiNavMenu1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiNavMenu1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiNavMenu1.FullRowSelect = true; this.uiNavMenu1.FullRowSelect = true;
this.uiNavMenu1.HotTracking = true;
this.uiNavMenu1.ItemHeight = 35; this.uiNavMenu1.ItemHeight = 35;
this.uiNavMenu1.Location = new System.Drawing.Point(2, 162); this.uiNavMenu1.Location = new System.Drawing.Point(2, 162);
this.uiNavMenu1.Name = "uiNavMenu1"; this.uiNavMenu1.Name = "uiNavMenu1";
this.uiNavMenu1.ShowLines = false; this.uiNavMenu1.ShowLines = false;
this.uiNavMenu1.ShowOneNode = true; this.uiNavMenu1.ShowOneNode = true;
this.uiNavMenu1.ShowPlusMinus = false;
this.uiNavMenu1.ShowRootLines = false;
this.uiNavMenu1.Size = new System.Drawing.Size(286, 650); this.uiNavMenu1.Size = new System.Drawing.Size(286, 650);
this.uiNavMenu1.TabIndex = 4; this.uiNavMenu1.TabIndex = 4;
this.uiNavMenu1.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiNavMenu1.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
@ -224,6 +264,7 @@
// //
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(1132, 846); this.ClientSize = new System.Drawing.Size(1132, 846);
this.CloseAskString = "您确认要退出程序吗?";
this.Controls.Add(this.uiTabControl1); this.Controls.Add(this.uiTabControl1);
this.Controls.Add(this.uiNavMenu1); this.Controls.Add(this.uiNavMenu1);
this.Controls.Add(this.uiPanel1); this.Controls.Add(this.uiPanel1);
@ -231,11 +272,14 @@
this.ExtendBox = true; this.ExtendBox = true;
this.ExtendMenu = this.uiContextMenuStrip1; this.ExtendMenu = this.uiContextMenuStrip1;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.IconImage = global::Sunny.UI.Demo.Properties.Resources.Sunny24;
this.MainTabControl = this.uiTabControl1; this.MainTabControl = this.uiTabControl1;
this.Name = "FMain"; this.Name = "FMain";
this.Padding = new System.Windows.Forms.Padding(2, 36, 2, 2); this.Padding = new System.Windows.Forms.Padding(2, 36, 2, 2);
this.Resizable = true;
this.ShowDragStretch = true; this.ShowDragStretch = true;
this.Text = "Form1"; this.Text = "Form1";
this.ZoomScaleRect = new System.Drawing.Rectangle(15, 15, 1132, 846);
this.HotKeyEventHandler += new Sunny.UI.HotKeyEventHandler(this.Form1_HotKeyEventHandler); this.HotKeyEventHandler += new Sunny.UI.HotKeyEventHandler(this.Form1_HotKeyEventHandler);
this.PageSelected += new Sunny.UI.OnUIPageChanged(this.Form1_PageSelected); this.PageSelected += new Sunny.UI.OnUIPageChanged(this.Form1_PageSelected);
this.ReceiveParams += new Sunny.UI.OnReceiveParams(this.Form1_ReceiveParams); this.ReceiveParams += new Sunny.UI.OnReceiveParams(this.Form1_ReceiveParams);
@ -249,8 +293,8 @@
#endregion #endregion
private UIContextMenuStrip uiContextMenuStrip1; private UIContextMenuStrip uiContextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem NHome;
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem NAbout;
private UIStyleManager StyleManager; private UIStyleManager StyleManager;
private UINavBar uiNavBar1; private UINavBar uiNavBar1;
private UIPanel uiPanel1; private UIPanel uiPanel1;
@ -262,5 +306,9 @@
private UIPanel uiPanel3; private UIPanel uiPanel3;
private System.Windows.Forms.Timer timer1; private System.Windows.Forms.Timer timer1;
private UIPanel uiPanel4; private UIPanel uiPanel4;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem NZhCN;
private System.Windows.Forms.ToolStripMenuItem NZhTW;
private System.Windows.Forms.ToolStripMenuItem NEnUS;
} }
} }

View File

@ -6,10 +6,10 @@ using System.Windows.Forms;
namespace Sunny.UI.Demo namespace Sunny.UI.Demo
{ {
/// <summary> /// <summary>
/// Windows10、Windows11 建议用UIForm2更接近原生窗体使用体验用UIForm也可以 /// WindowsXP、Windows7、Windows10、Windows11 建议使用 UIForm
/// WindowsXP、Windows7 建议使用UIForm /// Windows10、Windows11 可尝试使用 UIForm2更接近原生窗体使用体验用 UIForm 也可以
/// </summary> /// </summary>
public partial class FMain : UIForm2 public partial class FMain : UIForm
{ {
public FMain() public FMain()
{ {
@ -97,7 +97,7 @@ namespace Sunny.UI.Demo
var styles = UIStyles.PopularStyles(); var styles = UIStyles.PopularStyles();
foreach (UIStyle style in styles) foreach (UIStyle style in styles)
{ {
uiNavBar1.CreateChildNode(uiNavBar1.Nodes[4], style.DisplayText(), style.Value()); uiNavBar1.CreateChildNode(uiNavBar1.Nodes[4], style.Description(), style.Value());
} }
var node = uiNavBar1.CreateChildNode(uiNavBar1.Nodes[4], "字体图标", 99999); var node = uiNavBar1.CreateChildNode(uiNavBar1.Nodes[4], "字体图标", 99999);
@ -105,17 +105,17 @@ namespace Sunny.UI.Demo
node = uiNavBar1.CreateChildNode(uiNavBar1.Nodes[4], "多彩主题", UIStyle.Colorful.Value()); node = uiNavBar1.CreateChildNode(uiNavBar1.Nodes[4], "多彩主题", UIStyle.Colorful.Value());
uiNavBar1.SetNodeSymbol(node, 558295); uiNavBar1.SetNodeSymbol(node, 558295);
//左侧导航主节点关联页面 //左侧导航主节点关联页面
uiNavMenu1.CreateNode(AddPage(new FSymbols())); uiNavMenu1.CreateNode(AddPage(new FSymbols(), 99999));
uiNavMenu1.CreateNode(AddPage(new FColorful())); uiNavMenu1.CreateNode(AddPage(new FColorful(), UIStyle.Colorful.Value()));
//直接增加一个页面,不在左侧列表显示 //直接增加一个页面,不在左侧列表显示
//AddPage(new FColorful());
AddPage(new FCommon()); AddPage(new FCommon());
//选中第一个节点 //选中第一个节点
uiNavMenu1.SelectPage(1002); uiNavMenu1.SelectPage(1002);
uiPanel2.Text = Text = Version; uiPanel2.Text = Text = Version;
//设置全局热键
RegisterHotKey(UI.ModifierKeys.Shift, Keys.F8); RegisterHotKey(UI.ModifierKeys.Shift, Keys.F8);
//根据页面类型获取页面 //根据页面类型获取页面
@ -177,6 +177,11 @@ namespace Sunny.UI.Demo
Process.Start("https://gitee.com/yhuse/SunnyUI"); Process.Start("https://gitee.com/yhuse/SunnyUI");
} }
/// <summary>
/// 全局热键事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_HotKeyEventHandler(object sender, HotKeyEventArgs e) private void Form1_HotKeyEventHandler(object sender, HotKeyEventArgs e)
{ {
if (e.hotKey.ModifierKey == UI.ModifierKeys.Shift && e.hotKey.Key == Keys.F8) if (e.hotKey.ModifierKey == UI.ModifierKeys.Shift && e.hotKey.Key == Keys.F8)
@ -195,5 +200,56 @@ namespace Sunny.UI.Demo
{ {
uiPanel3.Text = DateTime.Now.DateTimeString(); uiPanel3.Text = DateTime.Now.DateTimeString();
} }
private void NZhCN_Click(object sender, EventArgs e)
{
UIStyles.CultureInfo = CultureInfos.zh_CN;
}
private void NZhTW_Click(object sender, EventArgs e)
{
UIStyles.CultureInfo = CultureInfos.zh_TW;
}
private void NEnUS_Click(object sender, EventArgs e)
{
UIStyles.CultureInfo = CultureInfos.en_US;
}
/// <summary>
/// 重载多语翻译
/// </summary>
public override void Translate()
{
//必须保留
base.Translate();
//读取翻译代码中的多语资源
CodeTranslator.Load(this);
//设置多语资源
this.CloseAskString = CodeTranslator.Current.CloseAskString;
this.uiNavMenu1.Nodes[0].Text = this.uiNavBar1.Nodes[0].Text = CodeTranslator.Current.Controls;
this.uiNavMenu1.Nodes[1].Text = this.uiNavBar1.Nodes[1].Text = CodeTranslator.Current.Forms;
this.uiNavMenu1.Nodes[2].Text = this.uiNavBar1.Nodes[2].Text = CodeTranslator.Current.Charts;
this.uiNavMenu1.Nodes[3].Text = this.uiNavBar1.Nodes[3].Text = CodeTranslator.Current.Industrial;
this.uiNavBar1.Nodes[4].Text = CodeTranslator.Current.Theme;
this.uiNavMenu1.Nodes[4].Text = CodeTranslator.Current.Symbols;
this.uiNavMenu1.Nodes[5].Text = CodeTranslator.Current.Colorful;
this.uiNavBar1.Invalidate();
this.uiNavMenu1.Invalidate();
}
private class CodeTranslator : IniCodeTranslator<CodeTranslator>
{
public string CloseAskString { get; set; } = "您确认要退出程序吗?";
public string Controls { get; set; } = "控件";
public string Forms { get; set; } = "窗体";
public string Charts { get; set; } = "图表";
public string Industrial { get; set; } = "工控";
public string Theme { get; set; } = "主题";
public string Symbols { get; set; } = "字体图标";
public string Colorful { get; set; } = "多彩主题";
}
} }
} }

View File

@ -235,6 +235,7 @@ namespace Sunny.UI.Demo
// uiLabel1 // uiLabel1
// //
this.uiLabel1.Font = new System.Drawing.Font("宋体", 12F); this.uiLabel1.Font = new System.Drawing.Font("宋体", 12F);
this.uiLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLabel1.Location = new System.Drawing.Point(30, 288); this.uiLabel1.Location = new System.Drawing.Point(30, 288);
this.uiLabel1.Name = "uiLabel1"; this.uiLabel1.Name = "uiLabel1";
this.uiLabel1.Size = new System.Drawing.Size(698, 23); this.uiLabel1.Size = new System.Drawing.Size(698, 23);
@ -263,6 +264,7 @@ namespace Sunny.UI.Demo
// uiLabel2 // uiLabel2
// //
this.uiLabel2.Font = new System.Drawing.Font("宋体", 12F); this.uiLabel2.Font = new System.Drawing.Font("宋体", 12F);
this.uiLabel2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLabel2.Location = new System.Drawing.Point(176, 383); this.uiLabel2.Location = new System.Drawing.Point(176, 383);
this.uiLabel2.Name = "uiLabel2"; this.uiLabel2.Name = "uiLabel2";
this.uiLabel2.Size = new System.Drawing.Size(172, 23); this.uiLabel2.Size = new System.Drawing.Size(172, 23);
@ -272,7 +274,9 @@ namespace Sunny.UI.Demo
// //
// uiLine1 // uiLine1
// //
this.uiLine1.BackColor = System.Drawing.Color.Transparent;
this.uiLine1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiLine1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiLine1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLine1.Location = new System.Drawing.Point(30, 430); this.uiLine1.Location = new System.Drawing.Point(30, 430);
this.uiLine1.MinimumSize = new System.Drawing.Size(1, 1); this.uiLine1.MinimumSize = new System.Drawing.Size(1, 1);
this.uiLine1.Name = "uiLine1"; this.uiLine1.Name = "uiLine1";
@ -283,7 +287,9 @@ namespace Sunny.UI.Demo
// //
// uiLine2 // uiLine2
// //
this.uiLine2.BackColor = System.Drawing.Color.Transparent;
this.uiLine2.Font = new System.Drawing.Font("宋体", 12F); this.uiLine2.Font = new System.Drawing.Font("宋体", 12F);
this.uiLine2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLine2.Location = new System.Drawing.Point(30, 55); this.uiLine2.Location = new System.Drawing.Point(30, 55);
this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
this.uiLine2.Name = "uiLine2"; this.uiLine2.Name = "uiLine2";
@ -298,12 +304,15 @@ namespace Sunny.UI.Demo
this.cbFont.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList; this.cbFont.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList;
this.cbFont.FillColor = System.Drawing.Color.White; this.cbFont.FillColor = System.Drawing.Color.White;
this.cbFont.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.cbFont.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cbFont.ItemHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(155)))), ((int)(((byte)(200)))), ((int)(((byte)(255)))));
this.cbFont.ItemSelectForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
this.cbFont.Location = new System.Drawing.Point(101, 473); this.cbFont.Location = new System.Drawing.Point(101, 473);
this.cbFont.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); this.cbFont.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.cbFont.MinimumSize = new System.Drawing.Size(63, 0); this.cbFont.MinimumSize = new System.Drawing.Size(63, 0);
this.cbFont.Name = "cbFont"; this.cbFont.Name = "cbFont";
this.cbFont.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); this.cbFont.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
this.cbFont.Size = new System.Drawing.Size(469, 29); this.cbFont.Size = new System.Drawing.Size(469, 29);
this.cbFont.SymbolSize = 24;
this.cbFont.TabIndex = 79; this.cbFont.TabIndex = 79;
this.cbFont.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; this.cbFont.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
this.cbFont.Watermark = ""; this.cbFont.Watermark = "";
@ -311,6 +320,7 @@ namespace Sunny.UI.Demo
// uiLabel3 // uiLabel3
// //
this.uiLabel3.Font = new System.Drawing.Font("宋体", 12F); this.uiLabel3.Font = new System.Drawing.Font("宋体", 12F);
this.uiLabel3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLabel3.Location = new System.Drawing.Point(30, 524); this.uiLabel3.Location = new System.Drawing.Point(30, 524);
this.uiLabel3.Name = "uiLabel3"; this.uiLabel3.Name = "uiLabel3";
this.uiLabel3.Size = new System.Drawing.Size(172, 23); this.uiLabel3.Size = new System.Drawing.Size(172, 23);
@ -321,6 +331,7 @@ namespace Sunny.UI.Demo
// uiLabel4 // uiLabel4
// //
this.uiLabel4.Font = new System.Drawing.Font("宋体", 12F); this.uiLabel4.Font = new System.Drawing.Font("宋体", 12F);
this.uiLabel4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLabel4.Location = new System.Drawing.Point(30, 476); this.uiLabel4.Location = new System.Drawing.Point(30, 476);
this.uiLabel4.Name = "uiLabel4"; this.uiLabel4.Name = "uiLabel4";
this.uiLabel4.Size = new System.Drawing.Size(85, 23); this.uiLabel4.Size = new System.Drawing.Size(85, 23);
@ -359,6 +370,7 @@ namespace Sunny.UI.Demo
// uiLabel5 // uiLabel5
// //
this.uiLabel5.Font = new System.Drawing.Font("宋体", 12F); this.uiLabel5.Font = new System.Drawing.Font("宋体", 12F);
this.uiLabel5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLabel5.Location = new System.Drawing.Point(511, 524); this.uiLabel5.Location = new System.Drawing.Point(511, 524);
this.uiLabel5.Name = "uiLabel5"; this.uiLabel5.Name = "uiLabel5";
this.uiLabel5.Size = new System.Drawing.Size(59, 23); this.uiLabel5.Size = new System.Drawing.Size(59, 23);
@ -396,7 +408,7 @@ namespace Sunny.UI.Demo
this.Padding = new System.Windows.Forms.Padding(0, 35, 0, 0); this.Padding = new System.Windows.Forms.Padding(0, 35, 0, 0);
this.PageIndex = 999; this.PageIndex = 999;
this.ShowTitle = true; this.ShowTitle = true;
this.Symbol = 262210; this.Symbol = 558295;
this.Text = "多彩主题"; this.Text = "多彩主题";
this.ResumeLayout(false); this.ResumeLayout(false);

View File

@ -64,7 +64,6 @@
this.uiSymbolButton13 = new Sunny.UI.UISymbolButton(); this.uiSymbolButton13 = new Sunny.UI.UISymbolButton();
this.uiLine11 = new Sunny.UI.UILine(); this.uiLine11 = new Sunny.UI.UILine();
this.uiSymbolButton12 = new Sunny.UI.UISymbolButton(); this.uiSymbolButton12 = new Sunny.UI.UISymbolButton();
this.uiPagination1 = new Sunny.UI.UIPagination();
this.SuspendLayout(); this.SuspendLayout();
// //
// btnError // btnError
@ -89,7 +88,7 @@
this.btnError.StyleCustomMode = true; this.btnError.StyleCustomMode = true;
this.btnError.Symbol = 61532; this.btnError.Symbol = 61532;
this.btnError.TabIndex = 29; this.btnError.TabIndex = 29;
this.btnError.Text = "Error"; this.btnError.Text = "错误";
this.btnError.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.btnError.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnError.Click += new System.EventHandler(this.btnError_Click); this.btnError.Click += new System.EventHandler(this.btnError_Click);
// //
@ -115,7 +114,7 @@
this.btnWarn.StyleCustomMode = true; this.btnWarn.StyleCustomMode = true;
this.btnWarn.Symbol = 61553; this.btnWarn.Symbol = 61553;
this.btnWarn.TabIndex = 28; this.btnWarn.TabIndex = 28;
this.btnWarn.Text = "Warn"; this.btnWarn.Text = "警告";
this.btnWarn.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.btnWarn.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnWarn.Click += new System.EventHandler(this.btnWarn_Click); this.btnWarn.Click += new System.EventHandler(this.btnWarn_Click);
// //
@ -141,7 +140,7 @@
this.btnSuccess.StyleCustomMode = true; this.btnSuccess.StyleCustomMode = true;
this.btnSuccess.Symbol = 61528; this.btnSuccess.Symbol = 61528;
this.btnSuccess.TabIndex = 27; this.btnSuccess.TabIndex = 27;
this.btnSuccess.Text = "Success"; this.btnSuccess.Text = "成功";
this.btnSuccess.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.btnSuccess.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnSuccess.Click += new System.EventHandler(this.btnSuccess_Click); this.btnSuccess.Click += new System.EventHandler(this.btnSuccess_Click);
// //
@ -157,7 +156,7 @@
this.btnAsk.StyleCustomMode = true; this.btnAsk.StyleCustomMode = true;
this.btnAsk.Symbol = 61529; this.btnAsk.Symbol = 61529;
this.btnAsk.TabIndex = 26; this.btnAsk.TabIndex = 26;
this.btnAsk.Text = "Query"; this.btnAsk.Text = "确认";
this.btnAsk.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.btnAsk.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnAsk.Click += new System.EventHandler(this.btnAsk_Click); this.btnAsk.Click += new System.EventHandler(this.btnAsk_Click);
// //
@ -188,7 +187,7 @@
this.btnInfo.StyleCustomMode = true; this.btnInfo.StyleCustomMode = true;
this.btnInfo.Symbol = 61530; this.btnInfo.Symbol = 61530;
this.btnInfo.TabIndex = 37; this.btnInfo.TabIndex = 37;
this.btnInfo.Text = "Info"; this.btnInfo.Text = "提示";
this.btnInfo.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.btnInfo.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnInfo.Click += new System.EventHandler(this.btnInfo_Click); this.btnInfo.Click += new System.EventHandler(this.btnInfo_Click);
// //
@ -345,7 +344,7 @@
this.uiSymbolButton2.StyleCustomMode = true; this.uiSymbolButton2.StyleCustomMode = true;
this.uiSymbolButton2.Symbol = 61530; this.uiSymbolButton2.Symbol = 61530;
this.uiSymbolButton2.TabIndex = 57; this.uiSymbolButton2.TabIndex = 57;
this.uiSymbolButton2.Text = "Info"; this.uiSymbolButton2.Text = "提示";
this.uiSymbolButton2.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiSymbolButton2.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiSymbolButton2.Click += new System.EventHandler(this.uiSymbolButton2_Click); this.uiSymbolButton2.Click += new System.EventHandler(this.uiSymbolButton2_Click);
// //
@ -371,7 +370,7 @@
this.uiSymbolButton4.StyleCustomMode = true; this.uiSymbolButton4.StyleCustomMode = true;
this.uiSymbolButton4.Symbol = 61532; this.uiSymbolButton4.Symbol = 61532;
this.uiSymbolButton4.TabIndex = 55; this.uiSymbolButton4.TabIndex = 55;
this.uiSymbolButton4.Text = "Error"; this.uiSymbolButton4.Text = "错误";
this.uiSymbolButton4.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiSymbolButton4.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiSymbolButton4.Click += new System.EventHandler(this.uiSymbolButton4_Click); this.uiSymbolButton4.Click += new System.EventHandler(this.uiSymbolButton4_Click);
// //
@ -397,7 +396,7 @@
this.uiSymbolButton5.StyleCustomMode = true; this.uiSymbolButton5.StyleCustomMode = true;
this.uiSymbolButton5.Symbol = 61553; this.uiSymbolButton5.Symbol = 61553;
this.uiSymbolButton5.TabIndex = 54; this.uiSymbolButton5.TabIndex = 54;
this.uiSymbolButton5.Text = "Warn"; this.uiSymbolButton5.Text = "警告";
this.uiSymbolButton5.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiSymbolButton5.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiSymbolButton5.Click += new System.EventHandler(this.uiSymbolButton5_Click); this.uiSymbolButton5.Click += new System.EventHandler(this.uiSymbolButton5_Click);
// //
@ -423,7 +422,7 @@
this.uiSymbolButton6.StyleCustomMode = true; this.uiSymbolButton6.StyleCustomMode = true;
this.uiSymbolButton6.Symbol = 61528; this.uiSymbolButton6.Symbol = 61528;
this.uiSymbolButton6.TabIndex = 53; this.uiSymbolButton6.TabIndex = 53;
this.uiSymbolButton6.Text = "Success"; this.uiSymbolButton6.Text = "成功";
this.uiSymbolButton6.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiSymbolButton6.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiSymbolButton6.Click += new System.EventHandler(this.uiSymbolButton6_Click); this.uiSymbolButton6.Click += new System.EventHandler(this.uiSymbolButton6_Click);
// //
@ -506,7 +505,7 @@
this.uiSymbolButton7.StyleCustomMode = true; this.uiSymbolButton7.StyleCustomMode = true;
this.uiSymbolButton7.Symbol = 61532; this.uiSymbolButton7.Symbol = 61532;
this.uiSymbolButton7.TabIndex = 64; this.uiSymbolButton7.TabIndex = 64;
this.uiSymbolButton7.Text = "Error"; this.uiSymbolButton7.Text = "错误";
this.uiSymbolButton7.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiSymbolButton7.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiSymbolButton7.Click += new System.EventHandler(this.uiSymbolButton7_Click); this.uiSymbolButton7.Click += new System.EventHandler(this.uiSymbolButton7_Click);
// //
@ -532,7 +531,7 @@
this.uiSymbolButton8.StyleCustomMode = true; this.uiSymbolButton8.StyleCustomMode = true;
this.uiSymbolButton8.Symbol = 61553; this.uiSymbolButton8.Symbol = 61553;
this.uiSymbolButton8.TabIndex = 63; this.uiSymbolButton8.TabIndex = 63;
this.uiSymbolButton8.Text = "Warn"; this.uiSymbolButton8.Text = "警告";
this.uiSymbolButton8.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiSymbolButton8.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiSymbolButton8.Click += new System.EventHandler(this.uiSymbolButton8_Click); this.uiSymbolButton8.Click += new System.EventHandler(this.uiSymbolButton8_Click);
// //
@ -558,7 +557,7 @@
this.uiSymbolButton9.StyleCustomMode = true; this.uiSymbolButton9.StyleCustomMode = true;
this.uiSymbolButton9.Symbol = 61528; this.uiSymbolButton9.Symbol = 61528;
this.uiSymbolButton9.TabIndex = 62; this.uiSymbolButton9.TabIndex = 62;
this.uiSymbolButton9.Text = "Success"; this.uiSymbolButton9.Text = "成功";
this.uiSymbolButton9.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiSymbolButton9.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiSymbolButton9.Click += new System.EventHandler(this.uiSymbolButton9_Click); this.uiSymbolButton9.Click += new System.EventHandler(this.uiSymbolButton9_Click);
// //
@ -586,7 +585,7 @@
this.uiSymbolButton3.Size = new System.Drawing.Size(100, 35); this.uiSymbolButton3.Size = new System.Drawing.Size(100, 35);
this.uiSymbolButton3.Symbol = 62144; this.uiSymbolButton3.Symbol = 62144;
this.uiSymbolButton3.TabIndex = 68; this.uiSymbolButton3.TabIndex = 68;
this.uiSymbolButton3.Text = "Login"; this.uiSymbolButton3.Text = "登录";
this.uiSymbolButton3.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiSymbolButton3.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiSymbolButton3.Click += new System.EventHandler(this.uiSymbolButton3_Click); this.uiSymbolButton3.Click += new System.EventHandler(this.uiSymbolButton3_Click);
// //
@ -601,7 +600,7 @@
this.uiSymbolButton10.Size = new System.Drawing.Size(100, 35); this.uiSymbolButton10.Size = new System.Drawing.Size(100, 35);
this.uiSymbolButton10.Symbol = 61447; this.uiSymbolButton10.Symbol = 61447;
this.uiSymbolButton10.TabIndex = 67; this.uiSymbolButton10.TabIndex = 67;
this.uiSymbolButton10.Text = "Login"; this.uiSymbolButton10.Text = "登录";
this.uiSymbolButton10.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiSymbolButton10.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiSymbolButton10.Click += new System.EventHandler(this.uiSymbolButton10_Click); this.uiSymbolButton10.Click += new System.EventHandler(this.uiSymbolButton10_Click);
// //
@ -689,32 +688,11 @@
this.uiSymbolButton12.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiSymbolButton12.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiSymbolButton12.Click += new System.EventHandler(this.uiSymbolButton12_Click); this.uiSymbolButton12.Click += new System.EventHandler(this.uiSymbolButton12_Click);
// //
// uiPagination1
//
this.uiPagination1.ButtonFillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(128)))), ((int)(((byte)(204)))));
this.uiPagination1.ButtonStyleInherited = false;
this.uiPagination1.CausesValidation = false;
this.uiPagination1.Font = new System.Drawing.Font("宋体", 12F);
this.uiPagination1.Location = new System.Drawing.Point(258, 482);
this.uiPagination1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiPagination1.MinimumSize = new System.Drawing.Size(1, 1);
this.uiPagination1.Name = "uiPagination1";
this.uiPagination1.PagerCount = 11;
this.uiPagination1.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
this.uiPagination1.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None;
this.uiPagination1.ShowText = false;
this.uiPagination1.Size = new System.Drawing.Size(442, 35);
this.uiPagination1.TabIndex = 79;
this.uiPagination1.Text = "uiDataGridPage1";
this.uiPagination1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;
this.uiPagination1.TotalCount = 40;
//
// FDialogs // FDialogs
// //
this.AllowShowTitle = true; this.AllowShowTitle = true;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(800, 590); this.ClientSize = new System.Drawing.Size(800, 590);
this.Controls.Add(this.uiPagination1);
this.Controls.Add(this.uiLine11); this.Controls.Add(this.uiLine11);
this.Controls.Add(this.uiSymbolButton12); this.Controls.Add(this.uiSymbolButton12);
this.Controls.Add(this.uiLine1); this.Controls.Add(this.uiLine1);
@ -798,6 +776,5 @@
private UISymbolButton uiSymbolButton13; private UISymbolButton uiSymbolButton13;
private UILine uiLine11; private UILine uiLine11;
private UISymbolButton uiSymbolButton12; private UISymbolButton uiSymbolButton12;
private UIPagination uiPagination1;
} }
} }

View File

@ -19,56 +19,56 @@ namespace Sunny.UI.Demo
private void btnInfo_Click(object sender, EventArgs e) private void btnInfo_Click(object sender, EventArgs e)
{ {
this.ShowInfoDialog2("默认信息提示框"); this.ShowInfoDialog2(CodeTranslator.Current.Default);
this.ShowInfoDialog("默认信息提示框"); this.ShowInfoDialog(CodeTranslator.Current.Default);
} }
private void btnAsk_Click(object sender, EventArgs e) private void btnAsk_Click(object sender, EventArgs e)
{ {
if (this.ShowAskDialog2("确认信息提示框", true)) if (this.ShowAskDialog2(CodeTranslator.Current.Confirm, true))
{ {
this.ShowSuccessTip("您点击了确定按钮"); this.ShowSuccessTip(CodeTranslator.Current.PressedOK);
} }
else else
{ {
this.ShowErrorTip("您点击了取消按钮"); this.ShowErrorTip(CodeTranslator.Current.PressedCancel);
} }
if (this.ShowAskDialog("确认信息提示框")) if (this.ShowAskDialog(CodeTranslator.Current.Confirm))
{ {
this.ShowSuccessTip("您点击了确定按钮"); this.ShowSuccessTip(CodeTranslator.Current.PressedOK);
} }
else else
{ {
this.ShowErrorTip("您点击了取消按钮"); this.ShowErrorTip(CodeTranslator.Current.PressedCancel);
} }
} }
private void btnSuccess_Click(object sender, EventArgs e) private void btnSuccess_Click(object sender, EventArgs e)
{ {
this.ShowSuccessDialog2("正确信息提示框", false, 3000); this.ShowSuccessDialog2(CodeTranslator.Current.Success, false, 3000);
this.ShowSuccessDialog("正确信息提示框", false, 3000); this.ShowSuccessDialog(CodeTranslator.Current.Success, false, 3000);
} }
private void btnWarn_Click(object sender, EventArgs e) private void btnWarn_Click(object sender, EventArgs e)
{ {
this.ShowWarningDialog2("警告信息提示框"); this.ShowWarningDialog2(CodeTranslator.Current.Warning);
this.ShowWarningDialog("警告信息提示框"); this.ShowWarningDialog(CodeTranslator.Current.Warning);
} }
private void btnError_Click(object sender, EventArgs e) private void btnError_Click(object sender, EventArgs e)
{ {
this.ShowErrorDialog2("错误信息提示框"); this.ShowErrorDialog2(CodeTranslator.Current.Error);
this.ShowErrorDialog("错误信息提示框"); this.ShowErrorDialog(CodeTranslator.Current.Error);
} }
private void btnStatus2_Click(object sender, EventArgs e) private void btnStatus2_Click(object sender, EventArgs e)
{ {
this.ShowStatusForm(100, "数据加载中......", 0); this.ShowStatusForm(100, CodeTranslator.Current.Loading + "......", 0);
for (int i = 0; i < 88; i++) for (int i = 0; i < 88; i++)
{ {
SystemEx.Delay(50); SystemEx.Delay(50);
this.SetStatusFormDescription("数据加载中(" + i + "%)......"); this.SetStatusFormDescription(CodeTranslator.Current.Loading + "(" + i + "%)......");
this.SetStatusFormStepIt(); this.SetStatusFormStepIt();
} }
@ -77,8 +77,8 @@ namespace Sunny.UI.Demo
private void btnStringInput_Click(object sender, EventArgs e) private void btnStringInput_Click(object sender, EventArgs e)
{ {
string value = "请输入字符串"; string value = CodeTranslator.Current.InputString;
if (this.ShowInputStringDialog(ref value, true, "请输入字符串:", true)) if (this.ShowInputStringDialog(ref value, true, CodeTranslator.Current.InputString, true))
{ {
this.ShowInfoDialog(value); this.ShowInfoDialog(value);
} }
@ -123,12 +123,12 @@ namespace Sunny.UI.Demo
private void uiSymbolButton2_Click(object sender, EventArgs e) private void uiSymbolButton2_Click(object sender, EventArgs e)
{ {
this.ShowInfoNotifier("Info", InfoNotifierClick); this.ShowInfoNotifier("Hello SunnyUI!", InfoNotifierClick);
} }
private void InfoNotifierClick(object sender, EventArgs e) private void InfoNotifierClick(object sender, DescriptionEventArgs e)
{ {
this.ShowInfoTip("嗨,你点击了右下角的弹窗消息"); this.ShowInfoTip(e.Description);
} }
private void uiSymbolButton6_Click(object sender, EventArgs e) private void uiSymbolButton6_Click(object sender, EventArgs e)
@ -148,17 +148,17 @@ namespace Sunny.UI.Demo
private void uiSymbolButton9_Click(object sender, EventArgs e) private void uiSymbolButton9_Click(object sender, EventArgs e)
{ {
this.ShowSuccessTip("轻便消息提示框 - 成功"); this.ShowSuccessTip(CodeTranslator.Current.Success);
} }
private void uiSymbolButton8_Click(object sender, EventArgs e) private void uiSymbolButton8_Click(object sender, EventArgs e)
{ {
this.ShowWarningTip("轻便消息提示框 - 警告"); this.ShowWarningTip(CodeTranslator.Current.Warning);
} }
private void uiSymbolButton7_Click(object sender, EventArgs e) private void uiSymbolButton7_Click(object sender, EventArgs e)
{ {
this.ShowErrorTip("轻便消息提示框 - 错误"); this.ShowErrorTip(CodeTranslator.Current.Error);
} }
private void uiSymbolButton10_Click(object sender, EventArgs e) private void uiSymbolButton10_Click(object sender, EventArgs e)
@ -167,7 +167,7 @@ namespace Sunny.UI.Demo
frm.ShowDialog(); frm.ShowDialog();
if (frm.IsLogin) if (frm.IsLogin)
{ {
UIMessageTip.ShowOk("登录成功"); UIMessageTip.ShowOk(CodeTranslator.Current.LoginSuccess);
} }
frm.Dispose(); frm.Dispose();
@ -188,7 +188,7 @@ namespace Sunny.UI.Demo
frm.ShowDialog(); frm.ShowDialog();
if (frm.IsLogin) if (frm.IsLogin)
{ {
UIMessageTip.ShowOk("登录成功"); UIMessageTip.ShowOk(CodeTranslator.Current.LoginSuccess);
} }
frm.Dispose(); frm.Dispose();
@ -201,24 +201,24 @@ namespace Sunny.UI.Demo
private void uiSymbolButton11_Click(object sender, EventArgs e) private void uiSymbolButton11_Click(object sender, EventArgs e)
{ {
this.ShowWaitForm("准备开始..."); this.ShowWaitForm(CodeTranslator.Current.Prepare);
Thread.Sleep(1000); Thread.Sleep(1000);
this.SetWaitFormDescription(UILocalize.SystemProcessing + "20%"); this.SetWaitFormDescription(UIStyles.CurrentResources.SystemProcessing + "20%");
Thread.Sleep(1000); Thread.Sleep(1000);
this.SetWaitFormDescription(UILocalize.SystemProcessing + "40%"); this.SetWaitFormDescription(UIStyles.CurrentResources.SystemProcessing + "40%");
Thread.Sleep(1000); Thread.Sleep(1000);
this.SetWaitFormDescription(UILocalize.SystemProcessing + "60%"); this.SetWaitFormDescription(UIStyles.CurrentResources.SystemProcessing + "60%");
Thread.Sleep(1000); Thread.Sleep(1000);
this.SetWaitFormDescription(UILocalize.SystemProcessing + "80%"); this.SetWaitFormDescription(UIStyles.CurrentResources.SystemProcessing + "80%");
Thread.Sleep(1000); Thread.Sleep(1000);
this.SetWaitFormDescription(UILocalize.SystemProcessing + "100%"); this.SetWaitFormDescription(UIStyles.CurrentResources.SystemProcessing + "100%");
this.HideWaitForm(); this.HideWaitForm();
} }
private void uiSymbolButton13_Click(object sender, EventArgs e) private void uiSymbolButton13_Click(object sender, EventArgs e)
{ {
string dir = ""; string dir = "";
if (DirEx.SelectDirEx("扩展打开文件夹", ref dir)) if (DirEx.SelectDirEx(CodeTranslator.Current.OpenDir, ref dir))
{ {
UIMessageTip.ShowOk(dir); UIMessageTip.ShowOk(dir);
} }
@ -233,29 +233,40 @@ namespace Sunny.UI.Demo
private void btnCH_Click(object sender, EventArgs e) private void btnCH_Click(object sender, EventArgs e)
{ {
UILocalizeHelper.SetCH(); UIStyles.CultureInfo = CultureInfos.zh_CN;
LoginText = "登录";
UIStyles.Translate();
} }
private void btnEN_Click(object sender, EventArgs e) private void btnEN_Click(object sender, EventArgs e)
{ {
UILocalizeHelper.SetEN(); UIStyles.CultureInfo = CultureInfos.en_US;
LoginText = "Login";
UIStyles.Translate();
} }
private string LoginText = "登录"; /// <summary>
/// 重载多语翻译
public void Translate() /// </summary>
public override void Translate()
{ {
uiSymbolButton6.Text = btnSuccess.Text = uiSymbolButton9.Text = UILocalize.SuccessTitle; //必须保留
uiSymbolButton5.Text = btnWarn.Text = uiSymbolButton8.Text = UILocalize.WarningTitle; base.Translate();
uiSymbolButton4.Text = btnError.Text = uiSymbolButton7.Text = UILocalize.ErrorTitle; //读取翻译代码中的多语资源
uiSymbolButton2.Text = btnInfo.Text = UILocalize.InfoTitle; CodeTranslator.Load(this);
btnAsk.Text = UILocalize.AskTitle; }
uiSymbolButton3.Text = uiSymbolButton10.Text = LoginText; private class CodeTranslator : IniCodeTranslator<CodeTranslator>
{
public string Default { get; set; } = "默认信息提示框";
public string Confirm { get; set; } = "确认信息提示框";
public string PressedOK { get; set; } = "您点击了确定按钮";
public string PressedCancel { get; set; } = "您点击了取消按钮";
public string Success { get; set; } = "正确信息提示框";
public string Warning { get; set; } = "警告信息提示框";
public string Error { get; set; } = "错误信息提示框";
public string Loading { get; set; } = "数据加载中";
public string InputString { get; set; } = "请输入字符串";
public string PressedNotifier { get; set; } = "嗨,你点击了右下角的弹窗消息";
public string LoginSuccess { get; set; } = "登录成功";
public string Prepare { get; set; } = "准备开始";
public string OpenDir { get; set; } = "打开文件夹";
} }
} }
} }

View File

@ -56,6 +56,7 @@ namespace Sunny.UI.Demo
this.uiDigitalLabel2 = new Sunny.UI.UIDigitalLabel(); this.uiDigitalLabel2 = new Sunny.UI.UIDigitalLabel();
this.uiDigitalLabel1 = new Sunny.UI.UIDigitalLabel(); this.uiDigitalLabel1 = new Sunny.UI.UIDigitalLabel();
this.uiLine4 = new Sunny.UI.UILine(); this.uiLine4 = new Sunny.UI.UILine();
this.uiBattery7 = new Sunny.UI.UIBattery();
this.SuspendLayout(); this.SuspendLayout();
// //
// uiBattery6 // uiBattery6
@ -170,7 +171,7 @@ namespace Sunny.UI.Demo
this.uiLedStopwatch1.Name = "uiLedStopwatch1"; this.uiLedStopwatch1.Name = "uiLedStopwatch1";
this.uiLedStopwatch1.Size = new System.Drawing.Size(190, 34); this.uiLedStopwatch1.Size = new System.Drawing.Size(190, 34);
this.uiLedStopwatch1.TabIndex = 61; this.uiLedStopwatch1.TabIndex = 61;
this.uiLedStopwatch1.Text = "12:50"; this.uiLedStopwatch1.Text = "01:05";
// //
// uiLedDisplay1 // uiLedDisplay1
// //
@ -359,11 +360,25 @@ namespace Sunny.UI.Demo
this.uiLine4.Text = "UIDigitalLabel"; this.uiLine4.Text = "UIDigitalLabel";
this.uiLine4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.uiLine4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
// //
// uiBattery7
//
this.uiBattery7.Font = new System.Drawing.Font("宋体", 12F);
this.uiBattery7.Location = new System.Drawing.Point(42, 410);
this.uiBattery7.MinimumSize = new System.Drawing.Size(1, 1);
this.uiBattery7.Name = "uiBattery7";
this.uiBattery7.Size = new System.Drawing.Size(73, 105);
this.uiBattery7.SymbolOffset = new System.Drawing.Point(1, 3);
this.uiBattery7.SymbolRotate = 270;
this.uiBattery7.SymbolSize = 100;
this.uiBattery7.TabIndex = 110;
this.uiBattery7.Text = "uiBattery7";
//
// FLed // FLed
// //
this.AllowShowTitle = true; this.AllowShowTitle = true;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(800, 555); this.ClientSize = new System.Drawing.Size(800, 555);
this.Controls.Add(this.uiBattery7);
this.Controls.Add(this.uiLine4); this.Controls.Add(this.uiLine4);
this.Controls.Add(this.uiDigitalLabel2); this.Controls.Add(this.uiDigitalLabel2);
this.Controls.Add(this.uiDigitalLabel1); this.Controls.Add(this.uiDigitalLabel1);
@ -426,5 +441,6 @@ namespace Sunny.UI.Demo
private UIDigitalLabel uiDigitalLabel2; private UIDigitalLabel uiDigitalLabel2;
private UIDigitalLabel uiDigitalLabel1; private UIDigitalLabel uiDigitalLabel1;
private UILine uiLine4; private UILine uiLine4;
private UIBattery uiBattery7;
} }
} }

View File

@ -19,7 +19,7 @@
private void timer1_Tick(object sender, System.EventArgs e) private void timer1_Tick(object sender, System.EventArgs e)
{ {
value++; value++;
uiBattery1.Power = value; uiBattery7.Power = uiBattery1.Power = value;
uiLedDisplay1.Text = value + " Ω"; uiLedDisplay1.Text = value + " Ω";
uiDigitalLabel2.Value += 0.1; uiDigitalLabel2.Value += 0.1;
} }

View File

@ -45,6 +45,12 @@ namespace Sunny.UI.Demo
this.uiLedBulb6 = new Sunny.UI.UILedBulb(); this.uiLedBulb6 = new Sunny.UI.UILedBulb();
this.uiLight5 = new Sunny.UI.UILight(); this.uiLight5 = new Sunny.UI.UILight();
this.uiLight6 = new Sunny.UI.UILight(); this.uiLight6 = new Sunny.UI.UILight();
this.uiStatusBox1 = new Sunny.UI.UIStatusBox();
this.uiLine1 = new Sunny.UI.UILine();
this.uiButton1 = new Sunny.UI.UIButton();
this.uiButton2 = new Sunny.UI.UIButton();
this.uiButton3 = new Sunny.UI.UIButton();
((System.ComponentModel.ISupportInitialize)(this.uiStatusBox1)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
// uiLedBulb4 // uiLedBulb4
@ -78,7 +84,9 @@ namespace Sunny.UI.Demo
// //
// uiLine8 // uiLine8
// //
this.uiLine8.BackColor = System.Drawing.Color.Transparent;
this.uiLine8.Font = new System.Drawing.Font("宋体", 12F); this.uiLine8.Font = new System.Drawing.Font("宋体", 12F);
this.uiLine8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLine8.Location = new System.Drawing.Point(381, 55); this.uiLine8.Location = new System.Drawing.Point(381, 55);
this.uiLine8.MinimumSize = new System.Drawing.Size(16, 16); this.uiLine8.MinimumSize = new System.Drawing.Size(16, 16);
this.uiLine8.Name = "uiLine8"; this.uiLine8.Name = "uiLine8";
@ -144,7 +152,9 @@ namespace Sunny.UI.Demo
// //
// uiLine2 // uiLine2
// //
this.uiLine2.BackColor = System.Drawing.Color.Transparent;
this.uiLine2.Font = new System.Drawing.Font("宋体", 12F); this.uiLine2.Font = new System.Drawing.Font("宋体", 12F);
this.uiLine2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLine2.Location = new System.Drawing.Point(30, 55); this.uiLine2.Location = new System.Drawing.Point(30, 55);
this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
this.uiLine2.Name = "uiLine2"; this.uiLine2.Name = "uiLine2";
@ -223,11 +233,113 @@ namespace Sunny.UI.Demo
this.uiLight6.TabIndex = 75; this.uiLight6.TabIndex = 75;
this.uiLight6.Text = "uiLight6"; this.uiLight6.Text = "uiLight6";
// //
// uiStatusBox1
//
this.uiStatusBox1.Image = global::Sunny.UI.Demo.Properties.Resources.led_g;
this.uiStatusBox1.Location = new System.Drawing.Point(30, 272);
this.uiStatusBox1.Name = "uiStatusBox1";
this.uiStatusBox1.Size = new System.Drawing.Size(36, 36);
this.uiStatusBox1.Status1 = global::Sunny.UI.Demo.Properties.Resources.led_g;
this.uiStatusBox1.Status2 = global::Sunny.UI.Demo.Properties.Resources.led_y;
this.uiStatusBox1.Status3 = global::Sunny.UI.Demo.Properties.Resources.led_r;
this.uiStatusBox1.TabIndex = 77;
this.uiStatusBox1.TabStop = false;
//
// uiLine1
//
this.uiLine1.BackColor = System.Drawing.Color.Transparent;
this.uiLine1.Font = new System.Drawing.Font("宋体", 12F);
this.uiLine1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLine1.Location = new System.Drawing.Point(30, 230);
this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
this.uiLine1.Name = "uiLine1";
this.uiLine1.Size = new System.Drawing.Size(319, 20);
this.uiLine1.TabIndex = 79;
this.uiLine1.Text = "UILight";
this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// uiButton1
//
this.uiButton1.Cursor = System.Windows.Forms.Cursors.Hand;
this.uiButton1.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
this.uiButton1.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
this.uiButton1.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(139)))), ((int)(((byte)(203)))), ((int)(((byte)(83)))));
this.uiButton1.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(152)))), ((int)(((byte)(32)))));
this.uiButton1.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(152)))), ((int)(((byte)(32)))));
this.uiButton1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiButton1.LightColor = System.Drawing.Color.FromArgb(((int)(((byte)(245)))), ((int)(((byte)(251)))), ((int)(((byte)(241)))));
this.uiButton1.Location = new System.Drawing.Point(78, 273);
this.uiButton1.MinimumSize = new System.Drawing.Size(1, 1);
this.uiButton1.Name = "uiButton1";
this.uiButton1.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
this.uiButton1.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(139)))), ((int)(((byte)(203)))), ((int)(((byte)(83)))));
this.uiButton1.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(152)))), ((int)(((byte)(32)))));
this.uiButton1.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(152)))), ((int)(((byte)(32)))));
this.uiButton1.Size = new System.Drawing.Size(75, 35);
this.uiButton1.Style = Sunny.UI.UIStyle.Custom;
this.uiButton1.TabIndex = 80;
this.uiButton1.Text = "切换";
this.uiButton1.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiButton1.Click += new System.EventHandler(this.uiButton1_Click);
//
// uiButton2
//
this.uiButton2.Cursor = System.Windows.Forms.Cursors.Hand;
this.uiButton2.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
this.uiButton2.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
this.uiButton2.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(175)))), ((int)(((byte)(83)))));
this.uiButton2.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(176)))), ((int)(((byte)(124)))), ((int)(((byte)(32)))));
this.uiButton2.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(176)))), ((int)(((byte)(124)))), ((int)(((byte)(32)))));
this.uiButton2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiButton2.LightColor = System.Drawing.Color.FromArgb(((int)(((byte)(253)))), ((int)(((byte)(249)))), ((int)(((byte)(241)))));
this.uiButton2.Location = new System.Drawing.Point(159, 273);
this.uiButton2.MinimumSize = new System.Drawing.Size(1, 1);
this.uiButton2.Name = "uiButton2";
this.uiButton2.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
this.uiButton2.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(175)))), ((int)(((byte)(83)))));
this.uiButton2.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(176)))), ((int)(((byte)(124)))), ((int)(((byte)(32)))));
this.uiButton2.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(176)))), ((int)(((byte)(124)))), ((int)(((byte)(32)))));
this.uiButton2.Size = new System.Drawing.Size(75, 35);
this.uiButton2.Style = Sunny.UI.UIStyle.Custom;
this.uiButton2.TabIndex = 81;
this.uiButton2.Text = "切换";
this.uiButton2.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiButton2.Click += new System.EventHandler(this.uiButton2_Click);
//
// uiButton3
//
this.uiButton3.Cursor = System.Windows.Forms.Cursors.Hand;
this.uiButton3.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.uiButton3.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.uiButton3.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(115)))), ((int)(((byte)(115)))));
this.uiButton3.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(184)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.uiButton3.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(184)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.uiButton3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiButton3.LightColor = System.Drawing.Color.FromArgb(((int)(((byte)(253)))), ((int)(((byte)(243)))), ((int)(((byte)(243)))));
this.uiButton3.Location = new System.Drawing.Point(240, 273);
this.uiButton3.MinimumSize = new System.Drawing.Size(1, 1);
this.uiButton3.Name = "uiButton3";
this.uiButton3.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.uiButton3.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(115)))), ((int)(((byte)(115)))));
this.uiButton3.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(184)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.uiButton3.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(184)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.uiButton3.Size = new System.Drawing.Size(75, 35);
this.uiButton3.Style = Sunny.UI.UIStyle.Custom;
this.uiButton3.TabIndex = 82;
this.uiButton3.Text = "切换";
this.uiButton3.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiButton3.Click += new System.EventHandler(this.uiButton3_Click);
//
// FLight // FLight
// //
this.AllowShowTitle = true; this.AllowShowTitle = true;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(800, 450); this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.uiButton3);
this.Controls.Add(this.uiButton2);
this.Controls.Add(this.uiButton1);
this.Controls.Add(this.uiLine1);
this.Controls.Add(this.uiStatusBox1);
this.Controls.Add(this.uiLight5); this.Controls.Add(this.uiLight5);
this.Controls.Add(this.uiLight6); this.Controls.Add(this.uiLight6);
this.Controls.Add(this.uiLedBulb5); this.Controls.Add(this.uiLedBulb5);
@ -247,6 +359,7 @@ namespace Sunny.UI.Demo
this.ShowTitle = true; this.ShowTitle = true;
this.Symbol = 362751; this.Symbol = 362751;
this.Text = "Light"; this.Text = "Light";
((System.ComponentModel.ISupportInitialize)(this.uiStatusBox1)).EndInit();
this.ResumeLayout(false); this.ResumeLayout(false);
} }
@ -267,5 +380,10 @@ namespace Sunny.UI.Demo
private UILedBulb uiLedBulb6; private UILedBulb uiLedBulb6;
private UILight uiLight5; private UILight uiLight5;
private UILight uiLight6; private UILight uiLight6;
private UIStatusBox uiStatusBox1;
private UILine uiLine1;
private UIButton uiButton1;
private UIButton uiButton2;
private UIButton uiButton3;
} }
} }

View File

@ -6,5 +6,27 @@
{ {
InitializeComponent(); InitializeComponent();
} }
public enum LightState
{
Green = 1,
Yellow = 2,
Red = 3
}
private void uiButton1_Click(object sender, System.EventArgs e)
{
uiStatusBox1.Status = (int)LightState.Green;
}
private void uiButton2_Click(object sender, System.EventArgs e)
{
uiStatusBox1.Status = (int)LightState.Yellow;
}
private void uiButton3_Click(object sender, System.EventArgs e)
{
uiStatusBox1.Status = (int)LightState.Red;
}
} }
} }

View File

@ -13,6 +13,13 @@ namespace Sunny.UI.Demo
{ {
Application.EnableVisualStyles(); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Application.SetCompatibleTextRenderingDefault(false);
//增加一个繁体中文的内置资源配置
UIStyles.BuiltInResources.TryAdd(CultureInfos.zh_TW.LCID, new zh_TW_Resources());
//从项目方案生成多语言配置文件生成文件在可执行文件夹的Language目录下
//生成后界面没有修改的情况下,可注释掉下一行,只运行一次即可
//TranslateHelper.LoadCsproj(@"D:\Source\SunnyUI\SunnyUI.Demo\SunnyUI.Demo.csproj");
Application.Run(new FMain()); Application.Run(new FMain());
} }
} }

View File

@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示: //通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.6.6.0")] [assembly: AssemblyVersion("3.8.0.1")]
[assembly: AssemblyFileVersion("3.6.6.0")] [assembly: AssemblyFileVersion("3.8.0.1")]

View File

@ -470,6 +470,36 @@ namespace Sunny.UI.Demo.Properties {
} }
} }
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap led_g {
get {
object obj = ResourceManager.GetObject("led_g", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap led_r {
get {
object obj = ResourceManager.GetObject("led_r", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap led_y {
get {
object obj = ResourceManager.GetObject("led_y", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary> /// </summary>
@ -600,6 +630,16 @@ namespace Sunny.UI.Demo.Properties {
} }
} }
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap Sunny24 {
get {
object obj = ResourceManager.GetObject("Sunny24", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary> /// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary> /// </summary>
@ -623,9 +663,9 @@ namespace Sunny.UI.Demo.Properties {
/// <summary> /// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary> /// </summary>
internal static System.Drawing.Bitmap SunnyUISmall { internal static System.Drawing.Bitmap SunnyUI72 {
get { get {
object obj = ResourceManager.GetObject("SunnyUISmall", resourceCulture); object obj = ResourceManager.GetObject("SunnyUI72", resourceCulture);
return ((System.Drawing.Bitmap)(obj)); return ((System.Drawing.Bitmap)(obj));
} }
} }

View File

@ -214,6 +214,15 @@
<data name="lazio" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="lazio" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\lazio.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\lazio.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="led_g" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\led_g.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="led_r" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\led_r.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="led_y" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\led_y.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mallorca" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="mallorca" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\mallorca.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\mallorca.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
@ -253,14 +262,17 @@
<data name="sevilla" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="sevilla" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\sevilla.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\sevilla.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="Sunny24" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Sunny24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="SunnyLogin" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="SunnyLogin" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SunnyLogin.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\SunnyLogin.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="SunnyUI" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="SunnyUI" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SunnyUI.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\SunnyUI.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="SunnyUISmall" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="SunnyUI72" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SunnyUISmall.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\SunnyUI72.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="Tom" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Tom" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Tom.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\Tom.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -41,36 +41,33 @@
<ApplicationManifest>app.manifest</ApplicationManifest> <ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="SunnyUI, Version=3.7.0.0, Culture=neutral, PublicKeyToken=27d7d2e821d97aeb, processorArchitecture=MSIL"> <Reference Include="SunnyUI, Version=3.8.3.0, Culture=neutral, PublicKeyToken=27d7d2e821d97aeb, processorArchitecture=MSIL">
<HintPath>..\packages\SunnyUI.3.7.0\lib\net472\SunnyUI.dll</HintPath> <HintPath>..\packages\SunnyUI.3.8.3\lib\net472\SunnyUI.dll</HintPath>
</Reference> </Reference>
<Reference Include="SunnyUI.COM, Version=6.3.3.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="SunnyUI.COM, Version=9.0.3.1, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\SunnyUI.COM.6.3.3\lib\net472\SunnyUI.COM.dll</HintPath> <HintPath>..\packages\SunnyUI.COM.9.0.3.1\lib\net472\SunnyUI.COM.dll</HintPath>
</Reference> </Reference>
<Reference Include="SunnyUI.Common, Version=3.7.0.0, Culture=neutral, PublicKeyToken=5a271fb7ba597231, processorArchitecture=MSIL"> <Reference Include="SunnyUI.Common, Version=3.8.3.0, Culture=neutral, PublicKeyToken=5a271fb7ba597231, processorArchitecture=MSIL">
<HintPath>..\packages\SunnyUI.Common.3.7.0\lib\net472\SunnyUI.Common.dll</HintPath> <HintPath>..\packages\SunnyUI.Common.3.8.3\lib\net472\SunnyUI.Common.dll</HintPath>
</Reference> </Reference>
<Reference Include="SunnyUI.FrameDecoder, Version=7.1.6.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="SunnyUI.FrameDecoder, Version=7.6.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\SunnyUI.FrameDecoder.7.1.6\lib\net472\SunnyUI.FrameDecoder.dll</HintPath> <HintPath>..\packages\SunnyUI.FrameDecoder.7.6.0\lib\net472\SunnyUI.FrameDecoder.dll</HintPath>
</Reference>
<Reference Include="SunnyUI.Serialization, Version=6.3.5.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\SunnyUI.Serialization.6.3.5\lib\net472\SunnyUI.Serialization.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.Buffers, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath> <HintPath>..\packages\System.Buffers.4.6.1\lib\net462\System.Buffers.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Design" /> <Reference Include="System.Design" />
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.Memory, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath> <HintPath>..\packages\System.Memory.4.6.3\lib\net462\System.Memory.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Numerics" /> <Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Numerics.Vectors, Version=4.1.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath> <HintPath>..\packages\System.Numerics.Vectors.4.6.1\lib\net462\System.Numerics.Vectors.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath> <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.1.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web.Extensions" /> <Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
@ -416,6 +413,7 @@
<DependentUpon>FCommon.cs</DependentUpon> <DependentUpon>FCommon.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Units\UMapperDemo.cs" /> <Compile Include="Units\UMapperDemo.cs" />
<Compile Include="Units\UZhTW.cs" />
<EmbeddedResource Include="Charts\FDoughnutChart.resx"> <EmbeddedResource Include="Charts\FDoughnutChart.resx">
<DependentUpon>FDoughnutChart.cs</DependentUpon> <DependentUpon>FDoughnutChart.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
@ -772,6 +770,11 @@
<None Include="Resources\9.png" /> <None Include="Resources\9.png" />
<None Include="Resources\Home_32x32.png" /> <None Include="Resources\Home_32x32.png" />
<None Include="Resources\Tom.gif" /> <None Include="Resources\Tom.gif" />
<None Include="Resources\Sunny24.png" />
<None Include="Resources\SunnyUI72.png" />
<None Include="Resources\led_g.png" />
<None Include="Resources\led_r.png" />
<None Include="Resources\led_y.png" />
<Content Include="SunnyUI.ico" /> <Content Include="SunnyUI.ico" />
</ItemGroup> </ItemGroup>
<ItemGroup /> <ItemGroup />

View File

@ -0,0 +1,55 @@
using System.Globalization;
namespace Sunny.UI.Demo
{
/// <summary>
/// 多語言字符串定義
/// </summary>
public class zh_TW_Resources : UIBuiltInResources
{
public override CultureInfo CultureInfo { get; } = CultureInfos.zh_TW;
public override string InfoTitle { get; set; } = "提示";
public override string SuccessTitle { get; set; } = "正確";
public override string WarningTitle { get; set; } = "警告";
public override string ErrorTitle { get; set; } = "錯誤";
public override string AskTitle { get; set; } = "提示";
public override string InputTitle { get; set; } = "輸入";
public override string SelectTitle { get; set; } = "選擇";
public override string CloseAll { get; set; } = "全部關閉";
public override string OK { get; set; } = "確定";
public override string Cancel { get; set; } = "取消";
public override string GridNoData { get; set; } = "[ 無資料 ]";
public override string GridDataLoading { get; set; } = "資料加載中,請稍候...";
public override string GridDataSourceException { get; set; } = "資料源必須為DataTable或者List";
public override string SystemProcessing { get; set; } = "系統正在處理中,請稍候...";
public override string Monday { get; set; } = "一";
public override string Tuesday { get; set; } = "二";
public override string Wednesday { get; set; } = "三";
public override string Thursday { get; set; } = "四";
public override string Friday { get; set; } = "五";
public override string Saturday { get; set; } = "六";
public override string Sunday { get; set; } = "日";
public override string Prev { get; set; } = "上一頁";
public override string Next { get; set; } = "下一頁";
public override string SelectPageLeft { get; set; } = "第";
public override string SelectPageRight { get; set; } = "頁";
public override string January { get; set; } = "一月";
public override string February { get; set; } = "二月";
public override string March { get; set; } = "三月";
public override string April { get; set; } = "四月";
public override string May { get; set; } = "五月";
public override string June { get; set; } = "六月";
public override string July { get; set; } = "七月";
public override string August { get; set; } = "八月";
public override string September { get; set; } = "九月";
public override string October { get; set; } = "十月";
public override string November { get; set; } = "十一月";
public override string December { get; set; } = "十二月";
public override string Today { get; set; } = "今天";
public override string Search { get; set; } = "搜尋";
public override string Clear { get; set; } = "清除";
public override string Open { get; set; } = "打開";
public override string Save { get; set; } = "保存";
public override string All { get; set; } = "全部";
}
}

View File

@ -9,7 +9,15 @@
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-6.0.3.0" newVersion="6.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>

View File

@ -1,12 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="SunnyUI" version="3.7.0" targetFramework="net472" /> <package id="SunnyUI" version="3.8.3" targetFramework="net472" />
<package id="SunnyUI.COM" version="6.3.3" targetFramework="net472" /> <package id="SunnyUI.COM" version="9.0.3.1" targetFramework="net472" />
<package id="SunnyUI.Common" version="3.7.0" targetFramework="net472" /> <package id="SunnyUI.Common" version="3.8.3" targetFramework="net472" />
<package id="SunnyUI.FrameDecoder" version="7.1.6" targetFramework="net472" /> <package id="SunnyUI.FrameDecoder" version="7.6.0" targetFramework="net472" />
<package id="SunnyUI.Serialization" version="6.3.5" targetFramework="net472" /> <package id="System.Buffers" version="4.6.1" targetFramework="net472" />
<package id="System.Buffers" version="4.5.1" targetFramework="net472" /> <package id="System.Memory" version="4.6.3" targetFramework="net472" />
<package id="System.Memory" version="4.5.5" targetFramework="net472" /> <package id="System.Numerics.Vectors" version="4.6.1" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" /> <package id="System.Runtime.CompilerServices.Unsafe" version="6.1.2" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
</packages> </packages>

View File

@ -2,3 +2,139 @@
# Default severity for analyzer diagnostics with category 'Style' # Default severity for analyzer diagnostics with category 'Style'
dotnet_analyzer_diagnostic.category-Style.severity = none dotnet_analyzer_diagnostic.category-Style.severity = none
# WFO1000: A property should determine its property content serialization with the DesignerSerializationVisibilityAttribute, DefaultValueAttribute or the ShouldSerializeProperty method
dotnet_diagnostic.WFO1000.severity = silent
csharp_using_directive_placement = outside_namespace:silent
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_expression_bodied_local_functions = false:silent
csharp_style_conditional_delegate_call = true:suggestion
csharp_style_var_for_built_in_types = false:silent
csharp_space_around_binary_operators = before_and_after
csharp_indent_labels = one_less_than_current
csharp_style_var_when_type_is_apparent = false:silent
csharp_style_var_elsewhere = false:silent
csharp_prefer_simple_using_statement = true:suggestion
csharp_prefer_braces = true:silent
csharp_style_namespace_declarations = block_scoped:silent
csharp_style_prefer_method_group_conversion = true:silent
csharp_style_prefer_top_level_statements = true:silent
csharp_style_prefer_primary_constructors = true:suggestion
csharp_prefer_system_threading_lock = true:suggestion
csharp_prefer_static_local_function = true:suggestion
csharp_prefer_static_anonymous_function = true:suggestion
csharp_style_prefer_readonly_struct = true:suggestion
csharp_style_prefer_readonly_struct_member = true:suggestion
csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent
csharp_style_prefer_switch_expression = true:suggestion
csharp_style_prefer_pattern_matching = true:silent
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
csharp_style_prefer_not_pattern = true:suggestion
csharp_style_prefer_extended_property_pattern = true:suggestion
csharp_style_throw_expression = true:suggestion
csharp_style_prefer_null_check_over_type_check = true:suggestion
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_prefer_local_over_anonymous_function = true:suggestion
csharp_style_prefer_index_operator = true:suggestion
csharp_style_prefer_range_operator = true:suggestion
csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
csharp_style_prefer_tuple_swap = true:suggestion
csharp_style_prefer_utf8_string_literals = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
csharp_style_unused_value_expression_statement_preference = discard_variable:silent
[*.{cs,vb}]
#### 命名样式 ####
# 命名规则
dotnet_naming_rule.interface_should_be_以_i_开始.severity = suggestion
dotnet_naming_rule.interface_should_be_以_i_开始.symbols = interface
dotnet_naming_rule.interface_should_be_以_i_开始.style = 以_i_开始
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.severity = suggestion
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.symbols = 类型
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.style = 帕斯卡拼写法
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.severity = suggestion
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.symbols = 非字段成员
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.style = 帕斯卡拼写法
# 符号规范
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_symbols.类型.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.类型.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.类型.required_modifiers =
dotnet_naming_symbols.非字段成员.applicable_kinds = property, event, method
dotnet_naming_symbols.非字段成员.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.非字段成员.required_modifiers =
# 命名样式
dotnet_naming_style.以_i_开始.required_prefix = I
dotnet_naming_style.以_i_开始.required_suffix =
dotnet_naming_style.以_i_开始.word_separator =
dotnet_naming_style.以_i_开始.capitalization = pascal_case
dotnet_naming_style.帕斯卡拼写法.required_prefix =
dotnet_naming_style.帕斯卡拼写法.required_suffix =
dotnet_naming_style.帕斯卡拼写法.word_separator =
dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case
dotnet_naming_style.帕斯卡拼写法.required_prefix =
dotnet_naming_style.帕斯卡拼写法.required_suffix =
dotnet_naming_style.帕斯卡拼写法.word_separator =
dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case
end_of_line = crlf
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_property = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_event = false:silent
tab_width = 4
indent_size = 4
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
dotnet_code_quality_unused_parameters = all:suggestion
dotnet_style_readonly_field = true:suggestion
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
dotnet_style_allow_multiple_blank_lines_experimental = true:silent
dotnet_style_allow_statement_immediately_after_block_experimental = true:silent
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_compound_assignment = true:suggestion
dotnet_style_prefer_simplified_interpolation = true:suggestion
dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion
dotnet_style_namespace_match_folder = true:suggestion
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
dotnet_style_predefined_type_for_member_access = true:silent
dotnet_diagnostic.CA2022.severity = silent

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -31,7 +31,9 @@
* 2023-05-13: V3.3.6 Option.BarInterval,Bar之间间隔-1 * 2023-05-13: V3.3.6 Option.BarInterval,Bar之间间隔-1
* 2023-05-14: V3.3.6 DrawString函数 * 2023-05-14: V3.3.6 DrawString函数
* 2023-06-06: V3.3.7 Y轴文字居中 * 2023-06-06: V3.3.7 Y轴文字居中
* 2025-06-08: V3.6.6 X轴文字带角度显示时居中 * 2024-06-08: V3.6.6 X轴文字带角度显示时居中
* 2024-10-25: V3.7.2 ShowData
* 2025-03-05: V3.8.1 Y轴零度线偏移量Option.ZeroLineOffset
******************************************************************************/ ******************************************************************************/
using System; using System;
@ -48,6 +50,7 @@ namespace Sunny.UI
/// 柱状图 /// 柱状图
/// </summary> /// </summary>
[ToolboxItem(true)] [ToolboxItem(true)]
[Description("柱状图控件")]
public class UIBarChart : UIChart public class UIBarChart : UIChart
{ {
private bool NeedDraw; private bool NeedDraw;
@ -209,7 +212,7 @@ namespace Sunny.UI
float ww = Math.Min(x2, series.MaxWidth); float ww = Math.Min(x2, series.MaxWidth);
xx -= ww / 2.0f; xx -= ww / 2.0f;
float YZeroPos = YScale.CalcYPixel(0, DrawOrigin.Y, DrawSize.Height); float YZeroPos = YScale.CalcYPixel(Option.ZeroLineOffset, DrawOrigin.Y, DrawSize.Height);
float VPos = YScale.CalcYPixel(series.Data[j], DrawOrigin.Y, DrawSize.Height); float VPos = YScale.CalcYPixel(series.Data[j], DrawOrigin.Y, DrawSize.Height);
if (VPos <= YZeroPos) if (VPos <= YZeroPos)
@ -255,7 +258,7 @@ namespace Sunny.UI
float ww = Math.Min(x2, series.MaxWidth); float ww = Math.Min(x2, series.MaxWidth);
float xl = (DrawBarWidth - Option.SeriesCount * ww - (Option.SeriesCount - 1) * Option.BarInterval) / 2.0f; float xl = (DrawBarWidth - Option.SeriesCount * ww - (Option.SeriesCount - 1) * Option.BarInterval) / 2.0f;
float xx = barX + xl + i * ww + i * Option.BarInterval; float xx = barX + xl + i * ww + i * Option.BarInterval;
float YZeroPos = YScale.CalcYPixel(0, DrawOrigin.Y, DrawSize.Height); float YZeroPos = YScale.CalcYPixel(Option.ZeroLineOffset, DrawOrigin.Y, DrawSize.Height);
float VPos = YScale.CalcYPixel(series.Data[j], DrawOrigin.Y, DrawSize.Height); float VPos = YScale.CalcYPixel(series.Data[j], DrawOrigin.Y, DrawSize.Height);
if (VPos <= YZeroPos) if (VPos <= YZeroPos)
@ -536,6 +539,11 @@ namespace Sunny.UI
double[] YLabels = YScale.CalcLabels(); double[] YLabels = YScale.CalcLabels();
float[] labels = YScale.CalcYPixels(YLabels, DrawOrigin.Y, DrawSize.Height); float[] labels = YScale.CalcYPixels(YLabels, DrawOrigin.Y, DrawSize.Height);
float wmax = 0; float wmax = 0;
using Pen pn = new Pen(ForeColor);
pn.DashStyle = DashStyle.Dash;
pn.DashPattern = new float[] { 3, 3 };
for (int i = 0; i < labels.Length; i++) for (int i = 0; i < labels.Length; i++)
{ {
if (labels[i] > DrawOrigin.Y) continue; if (labels[i] > DrawOrigin.Y) continue;
@ -546,17 +554,16 @@ namespace Sunny.UI
if (YLabels[i].IsNanOrInfinity()) continue; if (YLabels[i].IsNanOrInfinity()) continue;
if (!Option.YAxis.ShowGridLine) continue; if (!Option.YAxis.ShowGridLine) continue;
if (!YLabels[i].EqualsDouble(0)) //if (!YLabels[i].EqualsDouble(Option.ZeroLineOffset))
{ //{
using Pen pn = new Pen(ForeColor);
pn.DashStyle = DashStyle.Dash; g.DrawLine(pn, DrawOrigin.X, labels[i], Width - Option.Grid.Right, labels[i]);
pn.DashPattern = new float[] { 3, 3 };
g.DrawLine(pn, DrawOrigin.X, labels[i], Width - Option.Grid.Right, labels[i]); //}
} //else
else //{
{ // g.DrawLine(ForeColor, DrawOrigin.X, labels[i], Width - Option.Grid.Right, labels[i]);
g.DrawLine(ForeColor, DrawOrigin.X, labels[i], Width - Option.Grid.Right, labels[i]); //}
}
} }
if (Option.YAxis.AxisLabel.Show) if (Option.YAxis.AxisLabel.Show)
@ -575,6 +582,9 @@ namespace Sunny.UI
float yy = Option.Grid.Top + DrawSize.Height / 2.0f; float yy = Option.Grid.Top + DrawSize.Height / 2.0f;
g.DrawRotateString(Option.YAxis.Name, TempFont, ForeColor, new PointF(xx, yy), 270); g.DrawRotateString(Option.YAxis.Name, TempFont, ForeColor, new PointF(xx, yy), 270);
} }
float YZeroPos = YScale.CalcYPixel(Option.ZeroLineOffset, DrawOrigin.Y, DrawSize.Height);
g.DrawLine(ForeColor, DrawOrigin.X, YZeroPos, Width - Option.Grid.Right, YZeroPos);
} }
private void DrawAxisScales(Graphics g) private void DrawAxisScales(Graphics g)
@ -646,5 +656,23 @@ namespace Sunny.UI
public UIBarSeries Series { get; set; } public UIBarSeries Series { get; set; }
} }
public void ShowData(string[] labels, double[] values, string title = "")
{
int len = Math.Min(labels.Length, values.Length);
if (len == 0) return;
UIBarOption option = new UIBarOption();
option.Title.Text = title;
var series = new UIBarSeries();
for (int i = 0; i < len; i++)
{
option.XAxis.Data.Add(labels[i]);
series.AddData(values[i]);
}
option.Series.Add(series);
SetOption(option);
}
} }
} }

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -87,6 +87,11 @@ namespace Sunny.UI
public int BarInterval { get; set; } = -1; public int BarInterval { get; set; } = -1;
/// <summary>
/// Y轴零度线偏移
/// </summary>
public double ZeroLineOffset { get; set; } = 0;
public void AddSeries(UIBarSeries series) public void AddSeries(UIBarSeries series)
{ {
if (series == null) if (series == null)

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -73,7 +73,7 @@ namespace Sunny.UI
tip.Visible = false; tip.Visible = false;
} }
protected readonly UITransparentPanel tip = new UITransparentPanel(); internal readonly UITransparentPanel tip = new UITransparentPanel();
private UIChartStyleType chartStyleType = UIChartStyleType.Plain; private UIChartStyleType chartStyleType = UIChartStyleType.Plain;
[DefaultValue(UIChartStyleType.Plain)] [DefaultValue(UIChartStyleType.Plain)]

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -32,7 +32,7 @@ using System.Windows.Forms;
namespace Sunny.UI namespace Sunny.UI
{ {
[ToolboxItem(true), Description("甜甜圈图")] [ToolboxItem(true), Description("甜甜圈图控件")]
public sealed class UIDoughnutChart : UIChart public sealed class UIDoughnutChart : UIChart
{ {
/// <summary> /// <summary>
@ -249,9 +249,9 @@ namespace Sunny.UI
{ {
Angle angle = Angles[pieIndex][azIndex]; Angle angle = Angles[pieIndex][azIndex];
PointF pf = angle.Center; PointF pf = angle.Center;
if (Drawing.CalcDistance(e.Location, pf) > angle.Outer) continue; if (e.Location.CalcDistance(pf) > angle.Outer) continue;
if (Drawing.CalcDistance(e.Location, pf) < angle.Inner) continue; if (e.Location.CalcDistance(pf) < angle.Inner) continue;
double az = Drawing.CalcAngle(e.Location, pf); double az = e.Location.CalcAngle(pf);
if (az >= angle.Start && az <= angle.Start + angle.Sweep) if (az >= angle.Start && az <= angle.Start + angle.Sweep)
{ {
SetPieAndAzIndex(pieIndex, azIndex); SetPieAndAzIndex(pieIndex, azIndex);

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -53,6 +53,8 @@
* 2023-10-20: V3.5.1 线DashStyle样式 * 2023-10-20: V3.5.1 线DashStyle样式
* 2023-11-22: V3.6.0 * 2023-11-22: V3.6.0
* 2024-07-01: V3.6.7 Y轴自定义坐标显示 * 2024-07-01: V3.6.7 Y轴自定义坐标显示
* 2024-11-13: V3.7.2 线
* 2024-11-14: V3.7.2 线
******************************************************************************/ ******************************************************************************/
using System; using System;
@ -67,10 +69,19 @@ using System.Windows.Forms;
namespace Sunny.UI namespace Sunny.UI
{ {
[ToolboxItem(true)] [ToolboxItem(true)]
[Description("曲线图控件")]
public class UILineChart : UIChart public class UILineChart : UIChart
{ {
protected bool NeedDraw; protected bool NeedDraw;
[DefaultValue(MouseLineType.None)]
[Description("鼠标移上绘制十字线样式"), Category("SunnyUI")]
public MouseLineType MouseLine { get; set; }
[DefaultValue(typeof(Color), "Red")]
[Description("鼠标移上绘制十字线颜色"), Category("SunnyUI")]
public Color MouseLineColor { get; set; } = Color.Red;
/// <summary> /// <summary>
/// 重载控件尺寸变更 /// 重载控件尺寸变更
/// </summary> /// </summary>
@ -98,7 +109,7 @@ namespace Sunny.UI
NeedDraw = false; NeedDraw = false;
if (Option?.Series == null || Option.Series.Count == 0) return; if (Option?.Series == null || Option.Series.Count == 0) return;
if (DrawSize.Width <= 0 || DrawSize.Height <= 0) return; if (DrawSize.Width <= 0 || DrawSize.Height <= 0) return;
CalcAxises(); CalcAxes();
foreach (var series in Option.Series.Values) foreach (var series in Option.Series.Values)
{ {
@ -137,7 +148,7 @@ namespace Sunny.UI
protected UIScale YScale; protected UIScale YScale;
protected UIScale Y2Scale; protected UIScale Y2Scale;
protected void CalcAxises() protected void CalcAxes()
{ {
if (Option.XAxisType == UIAxisType.DateTime) if (Option.XAxisType == UIAxisType.DateTime)
XScale = new UIDateScale(); XScale = new UIDateScale();
@ -289,6 +300,23 @@ namespace Sunny.UI
DrawAxisScales(g); DrawAxisScales(g);
DrawPointSymbols(g); DrawPointSymbols(g);
DrawOther(g); DrawOther(g);
if (MousePoint.InRect(DrawRect))
{
switch (MouseLine)
{
case MouseLineType.Horizontal:
g.DrawLine(MouseLineColor, DrawRect.Left + 1, MousePoint.Y, DrawRect.Right - 1, MousePoint.Y);
break;
case MouseLineType.Vertical:
g.DrawLine(MouseLineColor, MousePoint.X, DrawRect.Top + 1, MousePoint.X, DrawRect.Bottom - 1);
break;
case MouseLineType.Cross:
g.DrawLine(MouseLineColor, DrawRect.Left + 1, MousePoint.Y, DrawRect.Right - 1, MousePoint.Y);
g.DrawLine(MouseLineColor, MousePoint.X, DrawRect.Top + 1, MousePoint.X, DrawRect.Bottom - 1);
break;
}
}
} }
private void DrawAxis(Graphics g) private void DrawAxis(Graphics g)
@ -848,6 +876,7 @@ namespace Sunny.UI
private readonly List<UILineSelectPoint> selectPoints = new List<UILineSelectPoint>(); private readonly List<UILineSelectPoint> selectPoints = new List<UILineSelectPoint>();
private readonly List<UILineSelectPoint> selectPointsTemp = new List<UILineSelectPoint>(); private readonly List<UILineSelectPoint> selectPointsTemp = new List<UILineSelectPoint>();
public Point MousePoint;
/// <summary> /// <summary>
/// 重载鼠标移动事件 /// 重载鼠标移动事件
/// </summary> /// </summary>
@ -955,7 +984,7 @@ namespace Sunny.UI
using Graphics g = this.CreateGraphics(); using Graphics g = this.CreateGraphics();
using var TempFont = Font.DPIScaleFont(UIStyles.DefaultSubFontSize); using var TempFont = Font.DPIScaleFont(UIStyles.DefaultSubFontSize);
Size sf = TextRenderer.MeasureText(sb.ToString(), TempFont); Size sf = TextRenderer.MeasureText(sb.ToString(), TempFont);
tip.Size = new Size(sf.Width + 4, sf.Height + 4); tip.Size = new Size(sf.Width + 4, sf.Height + 10);
int x = e.Location.X + 15; int x = e.Location.X + 15;
int y = e.Location.Y + 20; int y = e.Location.Y + 20;
@ -1014,6 +1043,9 @@ namespace Sunny.UI
} }
} }
MousePoint = e.Location;
if (MouseLine != MouseLineType.None) Invalidate();
} }
public delegate void OnPointValue(object sender, UILineSelectPoint[] points); public delegate void OnPointValue(object sender, UILineSelectPoint[] points);

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -33,6 +33,14 @@ using System.Linq;
namespace Sunny.UI namespace Sunny.UI
{ {
public enum MouseLineType
{
None,
Horizontal,
Vertical,
Cross
}
public enum UISeriesDataOrder public enum UISeriesDataOrder
{ {
X, X,

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -32,6 +32,7 @@ using System.Windows.Forms;
namespace Sunny.UI namespace Sunny.UI
{ {
[ToolboxItem(true)] [ToolboxItem(true)]
[Description("饼状图控件")]
public sealed class UIPieChart : UIChart public sealed class UIPieChart : UIChart
{ {
/// <summary> /// <summary>
@ -273,9 +274,9 @@ namespace Sunny.UI
if (!e.Location.InRect(rect)) continue; if (!e.Location.InRect(rect)) continue;
PointF pf = new PointF(rect.Left + rect.Width / 2.0f, rect.Top + rect.Height / 2.0f); PointF pf = new PointF(rect.Left + rect.Width / 2.0f, rect.Top + rect.Height / 2.0f);
if (Drawing.CalcDistance(e.Location, pf) * 2 > rect.Width) continue; if (e.Location.CalcDistance(pf) * 2 > rect.Width) continue;
double az = Drawing.CalcAngle(e.Location, pf); double az = e.Location.CalcAngle(pf);
for (int azIndex = 0; azIndex < Option.Series[pieIndex].Data.Count; azIndex++) for (int azIndex = 0; azIndex < Option.Series[pieIndex].Data.Count; azIndex++)
{ {
Angle angle = Angles[pieIndex][azIndex]; Angle angle = Angles[pieIndex][azIndex];

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,67 +1,77 @@
using Microsoft.Win32; using System;
using System;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Windows.Forms; using System.Windows.Forms;
using Microsoft.Win32;
namespace Sunny.UI namespace Sunny.UI
{ {
public static class ApplicationEx public static class ApplicationEx
{ {
private static string StartUpPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; private static readonly string StartUpPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
//获取GUID /// <summary>
/// 获取当前应用程序的 GUID
/// </summary>
/// <returns>应用程序的 GUID</returns>
public static Guid AppGuid() public static Guid AppGuid()
{ {
Assembly asm = Assembly.GetEntryAssembly(); var asm = Assembly.GetEntryAssembly();
if (asm == null) return Guid.Empty;
object[] attr = (asm.GetCustomAttributes(typeof(GuidAttribute), true)); object[] attr = (asm.GetCustomAttributes(typeof(GuidAttribute), true));
return new Guid((attr[0] as GuidAttribute).Value); return attr.Length > 0 && attr[0] is GuidAttribute ga ? new Guid(ga.Value) : Guid.Empty;
} }
public static string Folder(this Environment.SpecialFolder specialFolder) /// <summary>
{ /// 获取指定特殊文件夹的路径,并处理路径格式
return Environment.GetFolderPath(specialFolder).DealPath(); /// </summary>
} /// <param name="specialFolder">特殊文件夹枚举</param>
/// <returns>处理后的文件夹路径</returns>
public static string Folder(this Environment.SpecialFolder specialFolder) => Environment.GetFolderPath(specialFolder).DealPath();
/// <summary>
/// 获取指定特殊文件夹下的应用程序文件夹路径,并在必要时创建该文件夹
/// </summary>
/// <param name="specialFolder">特殊文件夹枚举</param>
/// <param name="createIfNotExists">如果文件夹不存在,是否创建</param>
/// <returns>应用程序文件夹路径</returns>
public static string FolderWithApplication(this Environment.SpecialFolder specialFolder, bool createIfNotExists = true) public static string FolderWithApplication(this Environment.SpecialFolder specialFolder, bool createIfNotExists = true)
{ {
string dir = (specialFolder.Folder() + Application.ProductName).DealPath(); var dir = (specialFolder.Folder() + Application.ProductName).DealPath();
if (createIfNotExists) Dir.CreateDir(dir); if (createIfNotExists) Dir.CreateDir(dir);
return dir; return dir;
} }
/// <summary> /// <summary>
/// 用作当前漫游用户的应用程序特定数据的公共储存库的目录。 漫游用户在网络上的多台计算机上工作。 漫游用户的配置文件保留在网络服务器上,并在用户登录时加载到系统中。 /// 获取当前漫游用户的应用程序特定数据的公共储存库的目录
/// C:\Users\{YourUserName}\AppData\Roaming\{Application.ProductName}\ /// C:\Users\{YourUserName}\AppData\Roaming\{Application.ProductName}\
/// </summary> /// </summary>
/// <returns></returns> /// <returns>应用程序数据文件夹路径</returns>
public static string ApplicationDataFolder() => Environment.SpecialFolder.ApplicationData.FolderWithApplication(); public static string ApplicationDataFolder() => Environment.SpecialFolder.ApplicationData.FolderWithApplication();
/// <summary> /// <summary>
/// 用作当前非漫游用户使用的应用程序特定数据的公共储存库的目录 /// 获取当前非漫游用户使用的应用程序特定数据的公共储存库的目录
/// C:\Users\{YourUserName}\AppData\Local\{Application.ProductName}\ /// C:\Users\{YourUserName}\AppData\Local\{Application.ProductName}\
/// </summary> /// </summary>
/// <returns></returns> /// <returns>本地应用程序数据文件夹路径</returns>
public static string LocalApplicationDataFolder() => Environment.SpecialFolder.LocalApplicationData.FolderWithApplication(); public static string LocalApplicationDataFolder() => Environment.SpecialFolder.LocalApplicationData.FolderWithApplication();
/// <summary> /// <summary>
/// 用作所有用户使用的应用程序特定数据的公共储存库的目录 /// 获取所有用户使用的应用程序特定数据的公共储存库的目录
/// C:\ProgramData \{Application.ProductName}\ /// C:\ProgramData \{Application.ProductName}\
/// </summary> /// </summary>
/// <returns></returns> /// <returns>公共应用程序数据文件夹路径</returns>
public static string CommonApplicationDataFolder() => Environment.SpecialFolder.CommonApplicationData.FolderWithApplication(); public static string CommonApplicationDataFolder() => Environment.SpecialFolder.CommonApplicationData.FolderWithApplication();
/// <summary> /// <summary>
/// 增加当前程序到开机自动运行 /// 增加当前程序到开机自动运行
/// </summary> /// </summary>
/// <param name="arguments"></param> /// <param name="arguments">启动参数</param>
public static void AddToStartup(string arguments) public static void AddToStartup(string arguments)
{ {
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(StartUpPath, true)) using var key = Registry.CurrentUser.OpenSubKey(StartUpPath, true);
{ key?.SetValue(Application.ProductName, $"\"{Application.ExecutablePath}\" {arguments}");
key.SetValue(Application.ProductName, "\"" + Application.ExecutablePath + "\" " + arguments);
}
} }
/// <summary> /// <summary>
@ -69,10 +79,8 @@ namespace Sunny.UI
/// </summary> /// </summary>
public static void AddToStartup() public static void AddToStartup()
{ {
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(StartUpPath, true)) using var key = Registry.CurrentUser.OpenSubKey(StartUpPath, true);
{ key?.SetValue(Application.ProductName, $"\"{Application.ExecutablePath}\"");
key.SetValue(Application.ProductName, "\"" + Application.ExecutablePath + "\"");
}
} }
/// <summary> /// <summary>
@ -80,22 +88,18 @@ namespace Sunny.UI
/// </summary> /// </summary>
public static void RemoveFromStartup() public static void RemoveFromStartup()
{ {
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(StartUpPath, true)) using var key = Registry.CurrentUser.OpenSubKey(StartUpPath, true);
{ if (Application.ProductName != null) key?.DeleteValue(Application.ProductName, false);
key.DeleteValue(Application.ProductName, false);
}
} }
/// <summary> /// <summary>
/// 判断当前程序是否开机自动运行 /// 判断当前程序是否开机自动运行
/// </summary> /// </summary>
/// <returns></returns> /// <returns>是否开机自动运行</returns>
public static bool StartupEnabled() public static bool StartupEnabled()
{ {
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(StartUpPath, false)) using var key = Registry.CurrentUser.OpenSubKey(StartUpPath, false);
{ return key != null && key.GetValue(Application.ProductName) != null;
return key.GetValue(Application.ProductName) != null;
}
} }
/// <summary> /// <summary>
@ -103,30 +107,27 @@ namespace Sunny.UI
/// </summary> /// </summary>
public static void CheckAndUpdateStartupPath() public static void CheckAndUpdateStartupPath()
{ {
if (StartupEnabled()) if (!StartupEnabled()) return;
string arg = string.Empty;
// 从注册表键值中读取启动参数
using var key = Registry.CurrentUser.OpenSubKey(StartUpPath, true);
if (key == null) return;
string oldValue = key.GetValue(Application.ProductName)?.ToString();
if (oldValue == null) return;
if (oldValue.StartsWith("\""))
{ {
string oldValue; arg = string.Join("\"", oldValue.Split('\"').Skip(2)).Trim();
string arg = string.Empty;
//Read Argument From Registry Key Value
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(StartUpPath, true))
{
oldValue = key.GetValue(Application.ProductName).ToString();
if (oldValue.StartsWith("\""))
{
arg = string.Join("\"", oldValue.Split('\"').Skip(2)).Trim();
}
else if (oldValue.Contains(" "))
{
arg = string.Join(" ", oldValue.Split(' ').Skip(1));
}
}
if (string.IsNullOrEmpty(arg))
AddToStartup();
else
AddToStartup(arg);
} }
else if (oldValue.Contains(" "))
{
arg = string.Join(" ", oldValue.Split(' ').Skip(1));
}
if (string.IsNullOrEmpty(arg))
AddToStartup();
else
AddToStartup(arg);
} }
} }
} }

View File

@ -1,11 +1,33 @@
namespace Sunny.UI namespace Sunny.UI
{ {
/// <summary>
/// 提供程序集引用的常量定义。
/// </summary>
internal static class AssemblyRefEx internal static class AssemblyRefEx
{ {
/// <summary>
/// 程序集版本号。
/// </summary>
internal const string Version = "4.0.0.0"; internal const string Version = "4.0.0.0";
/// <summary>
/// Microsoft 公钥。
/// </summary>
internal const string MicrosoftPublicKey = "b03f5f7f11d50a3a"; internal const string MicrosoftPublicKey = "b03f5f7f11d50a3a";
/// <summary>
/// System.Design 程序集引用。
/// </summary>
internal const string SystemDesign = "System.Design, Version=" + Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey; internal const string SystemDesign = "System.Design, Version=" + Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
/// <summary>
/// System.Drawing.Design 程序集引用。
/// </summary>
internal const string SystemDrawingDesign = "System.Drawing.Design, Version=" + Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey; internal const string SystemDrawingDesign = "System.Drawing.Design, Version=" + Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
/// <summary>
/// System.Drawing 程序集引用。
/// </summary>
internal const string SystemDrawing = "System.Drawing, Version=" + Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey; internal const string SystemDrawing = "System.Drawing, Version=" + Version + ", Culture=neutral, PublicKeyToken=" + MicrosoftPublicKey;
} }
} }

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -57,10 +57,14 @@ namespace Sunny.UI
BackgroundLoop BackgroundLoop
} }
private static SoundPlayer _SoundPlayer; private static SoundPlayer _soundPlayer;
#region Methods #region Methods
/// <summary>
/// 停止播放声音。
/// </summary>
/// <param name="sound">SoundPlayer 对象。</param>
private static void InternalStop(SoundPlayer sound) private static void InternalStop(SoundPlayer sound)
{ {
new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert(); new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert();
@ -74,60 +78,66 @@ namespace Sunny.UI
} }
} }
/// <summary>播放。wav声音文件。</summary> /// <summary>
/// <param name="location">String包含声音文件的名称 </param> /// 播放 .wav 声音文件。
/// <PermissionSet><IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" /><IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" /><IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode, ControlThread" /><IPermission class="System.Net.WebPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" /></PermissionSet> /// </summary>
/// <param name="location">包含声音文件的名称的字符串。</param>
public static void Play(string location) public static void Play(string location)
{ {
Play(location, AudioPlayMode.Background); Play(location, AudioPlayMode.Background);
} }
/// <summary> /// <summary>
/// 播放。wav声音文件. /// 播放 .wav 声音文件。
/// </summary> /// </summary>
/// <param name="location">AudioPlayMode枚举模式播放声音。默认情况下AudioPlayMode.Background。</param> /// <param name="location">包含声音文件的名称的字符串。</param>
/// <param name="playMode">String包含声音文件的名称</param> /// <param name="playMode">AudioPlayMode 枚举,指示播放模式。</param>
public static void Play(string location, AudioPlayMode playMode) public static void Play(string location, AudioPlayMode playMode)
{ {
ValidateAudioPlayModeEnum(playMode, "playMode"); ValidateAudioPlayModeEnum(playMode, nameof(playMode));
string text1 = ValidateFilename(location); var validatedLocation = ValidateFilename(location);
SoundPlayer player1 = new SoundPlayer(text1); SoundPlayer player = new SoundPlayer(validatedLocation);
Play(player1, playMode); Play(player, playMode);
} }
/// <summary>
/// 根据播放模式播放声音。
/// </summary>
/// <param name="sound">SoundPlayer 对象。</param>
/// <param name="mode">AudioPlayMode 枚举,指示播放模式。</param>
private static void Play(SoundPlayer sound, AudioPlayMode mode) private static void Play(SoundPlayer sound, AudioPlayMode mode)
{ {
if (_SoundPlayer != null) if (_soundPlayer != null)
{ {
InternalStop(_SoundPlayer); InternalStop(_soundPlayer);
} }
_SoundPlayer = sound; _soundPlayer = sound;
switch (mode) switch (mode)
{ {
case AudioPlayMode.WaitToComplete: case AudioPlayMode.WaitToComplete:
_SoundPlayer.PlaySync(); _soundPlayer.PlaySync();
return; break;
case AudioPlayMode.Background: case AudioPlayMode.Background:
_SoundPlayer.Play(); _soundPlayer.Play();
return; break;
case AudioPlayMode.BackgroundLoop: case AudioPlayMode.BackgroundLoop:
_SoundPlayer.PlayLooping(); _soundPlayer.PlayLooping();
return; break;
} }
} }
/// <summary> /// <summary>
/// 播放系统声音。 /// 播放系统声音。
/// </summary> /// </summary>
/// <param name="systemSound">对象代表系统播放声音。</param> /// <param name="systemSound">SystemSound 对象代表系统播放声音。</param>
public static void PlaySystemSound(SystemSound systemSound) public static void PlaySystemSound(SystemSound systemSound)
{ {
if (systemSound == null) if (systemSound == null)
{ {
throw new ArgumentNullException(); throw new ArgumentNullException(nameof(systemSound));
} }
systemSound.Play(); systemSound.Play();
@ -136,26 +146,35 @@ namespace Sunny.UI
/// <summary> /// <summary>
/// 停止在后台播放声音。 /// 停止在后台播放声音。
/// </summary> /// </summary>
/// <filterpriority>1</filterpriority>
public static void Stop() public static void Stop()
{ {
SoundPlayer player1 = new SoundPlayer(); SoundPlayer player = new SoundPlayer();
InternalStop(player1); InternalStop(player);
} }
/// <summary>
/// 验证 AudioPlayMode 枚举值。
/// </summary>
/// <param name="value">AudioPlayMode 枚举值。</param>
/// <param name="paramName">参数名称。</param>
private static void ValidateAudioPlayModeEnum(AudioPlayMode value, string paramName) private static void ValidateAudioPlayModeEnum(AudioPlayMode value, string paramName)
{ {
if ((value < AudioPlayMode.WaitToComplete) || (value > AudioPlayMode.BackgroundLoop)) if (!Enum.IsDefined(typeof(AudioPlayMode), value))
{ {
throw new InvalidEnumArgumentException(paramName, (int)value, typeof(AudioPlayMode)); throw new InvalidEnumArgumentException(paramName, (int)value, typeof(AudioPlayMode));
} }
} }
/// <summary>
/// 验证文件名。
/// </summary>
/// <param name="location">文件名字符串。</param>
/// <returns>验证后的文件名。</returns>
private static string ValidateFilename(string location) private static string ValidateFilename(string location)
{ {
if (string.IsNullOrEmpty(location)) if (string.IsNullOrEmpty(location))
{ {
throw new ArgumentNullException(); throw new ArgumentNullException(nameof(location));
} }
return location; return location;
@ -170,18 +189,18 @@ namespace Sunny.UI
public static class Mp3Player public static class Mp3Player
{ {
/// <summary> /// <summary>
/// 播放 /// 播放 MP3 文件。
/// </summary> /// </summary>
/// <param name="MP3_FileName">文件名</param> /// <param name="mp3FileName">文件名。</param>
/// <param name="Repeat">重复</param> /// <param name="repeat">是否重复播放。</param>
public static void Play(string MP3_FileName, bool Repeat) public static void Play(string mp3FileName, bool repeat)
{ {
Win32.WinMM.mciSendString("open \"" + MP3_FileName + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero); Win32.WinMM.mciSendString($"open \"{mp3FileName}\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
Win32.WinMM.mciSendString("play MediaFile" + (Repeat ? " repeat" : string.Empty), null, 0, IntPtr.Zero); Win32.WinMM.mciSendString($"play MediaFile{(repeat ? " repeat" : string.Empty)}", null, 0, IntPtr.Zero);
} }
/// <summary> /// <summary>
/// 暂停 /// 暂停播放。
/// </summary> /// </summary>
public static void Pause() public static void Pause()
{ {
@ -189,7 +208,7 @@ namespace Sunny.UI
} }
/// <summary> /// <summary>
/// 停止 /// 停止播放。
/// </summary> /// </summary>
public static void Stop() public static void Stop()
{ {

View File

@ -0,0 +1,743 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2023 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.Common.dll can be used for free under the MIT license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UBaseConfig.cs
* :
* : V3.1
* : 2020-01-01
*
* 2020-01-01: V2.2.0
******************************************************************************/
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using System.Xml.Serialization;
namespace Sunny.UI
{
/// <summary>
/// 配置文件基类
/// </summary>
/// <typeparam name="TConfig">类型</typeparam>
public abstract class BaseConfig<TConfig> where TConfig : BaseConfig<TConfig>, new()
{
/// <summary>
/// 实体对象
/// </summary>
protected static TConfig current;
/// <summary>
/// 配置文件描述
/// </summary>
public static string Description
{
get
{
var fileanddesc = ConfigHelper.GetConfigFile<TConfig>();
return fileanddesc.Item2;
}
}
/// <summary>
/// 配置文件名
/// </summary>
public static string ConfigFile
{
get
{
var fileanddesc = ConfigHelper.GetConfigFile<TConfig>();
return fileanddesc.Item1;
}
}
/// <summary>
/// 当前可执行文件路径,末尾包括\
/// </summary>
/// <returns>结果</returns>
private static string CurrentDir()
{
return Environment.CurrentDirectory.DealPath();
}
/// <summary>
/// 当前实例。通过置空可以使其重新加载。
/// </summary>
public static TConfig Current
{
get
{
if (current != null)
{
return current;
}
// 现在没有对象尝试加载若返回null则实例化一个新的
current = CreateNew();
if (!current.Load(CurrentDir() + ConfigFile))
{
try
{
// 根据配置,有可能不保存,直接返回默认
current.Save();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
return current;
}
set => current = value;
}
private static TConfig CreateNew()
{
TConfig config = new TConfig();
config.SetDefault();
return config;
}
/// <summary>保存到配置文件中去</summary>
public void Save()
{
Save(null);
}
/// <summary>
/// 加载指定配置文件
/// </summary>
/// <returns>结果</returns>
public bool Load()
{
return Load(null);
}
/// <summary>
/// 加密
/// </summary>
/// <param name="str">字符串</param>
/// <returns>加密后字符串</returns>
public string Encrypt(string str)
{
Random random = new Random();
var value = random.Next(100000, 999999);
string tmp = str + value.ToString();
return tmp.DesEncrypt();
}
/// <summary>
/// 解密
/// </summary>
/// <param name="str">字符串</param>
/// <returns>解密后字符串</returns>
public string Decrypt(string str)
{
string result = str.DesDecrypt();
return result.Left(result.Length - 6);
}
/// <summary>加载指定配置文件</summary>
/// <param name="filename">文件名</param>
/// <returns>结果</returns>
public abstract bool Load(string filename);
/// <summary>保存到配置文件中去</summary>
/// <param name="filename">文件名</param>
public abstract void Save(string filename);
/// <summary>
/// 设置默认值
/// </summary>
public virtual void SetDefault()
{
}
}
/// <summary>
/// 忽略此属性的配置存储
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class MapperIgnoreAttribute : Attribute
{
}
/// <summary>
/// 忽略此属性的配置存储
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class IgnoreAttribute : Attribute
{
}
/// <summary>
/// 配置文件帮助类
/// </summary>
public static class ConfigHelper
{
/// <summary>
/// 类型是否能够转为指定基类
/// </summary>
/// <param name="type">类型</param>
/// <param name="baseType">基类</param>
/// <returns>是否能够转为指定基类</returns>
public static bool As(this Type type, Type baseType)
{
if (type == null)
{
return false;
}
// 如果基类是泛型定义
if (baseType.IsGenericTypeDefinition && type.IsGenericType && !type.IsGenericTypeDefinition)
{
type = type.GetGenericTypeDefinition();
}
if (type == baseType)
{
return true;
}
if (baseType.IsAssignableFrom(type))
{
return true;
}
var rs = false;
// 接口
if (baseType.IsInterface)
{
if (type.GetInterface(baseType.FullName) != null)
{
rs = true;
}
else
foreach (var e in type.GetInterfaces())
{
if (e.IsGenericType && baseType.IsGenericTypeDefinition ? e.GetGenericTypeDefinition() == baseType : e == baseType)
{
rs = true;
break;
}
}
}
// 判断是否子类时,支持只反射加载的程序集
if (!rs && type.Assembly.ReflectionOnly)
{
// 反射加载时,需要特殊处理接口
while (!rs && type != typeof(object))
{
if (type == null)
{
continue;
}
if (type.FullName == baseType.FullName && type.AssemblyQualifiedName == baseType.AssemblyQualifiedName)
{
rs = true;
}
type = type.BaseType;
}
}
return rs;
}
/// <summary>是否泛型字典</summary>
/// <param name="type">类型</param>
/// <returns>是否泛型字典</returns>
public static bool IsDictionary(this Type type) => type != null && type.IsGenericType && type.As(typeof(IDictionary<,>));
/// <summary>是否泛型列表</summary>
/// <param name="type">类型</param>
/// <returns>是否泛型列表</returns>
public static bool IsList(this Type type)
{
return type != null && type.IsGenericType && type.As(typeof(IList<>));
//return Array.IndexOf(type.GetInterfaces(), typeof(IEnumerable)) > -1;
}
/// <summary>获取成员绑定的显示名优先DisplayName然后Description</summary>
/// <param name="member">member</param>
/// <returns>显示名</returns>
public static string DisplayName(this PropertyInfo member)
{
var att = member.GetCustomAttribute<DisplayNameAttribute>();
if (att != null && !att.DisplayName.IsNullOrWhiteSpace())
{
return att.DisplayName;
}
return "";
}
/// <summary>获取成员绑定的显示名优先DisplayName然后Description</summary>
/// <param name="member">member</param>
/// <returns>显示名</returns>
public static string Description(this PropertyInfo member)
{
var att2 = member.GetCustomAttribute<DescriptionAttribute>();
if (att2 != null && !att2.Description.IsNullOrWhiteSpace())
{
return att2.Description;
}
return "";
}
/// <summary>
/// 获取需要的属性,删除忽略的属性
/// </summary>
/// <param name="type">类型</param>
/// <returns>属性列表</returns>
public static List<PropertyInfo> GetNeedProperties(this Type type)
{
var list = type.GetProperties();
List<PropertyInfo> result = new List<PropertyInfo>();
foreach (var info in list)
{
if (info.GetCustomAttribute<XmlIgnoreAttribute>() != null)
{
continue;
}
if (info.GetCustomAttribute<ConfigIgnoreAttribute>() != null)
{
continue;
}
if (info.GetCustomAttribute<MapperIgnoreAttribute>() != null)
{
continue;
}
if (info.GetCustomAttribute<IgnoreAttribute>() != null)
{
continue;
}
result.Add(info);
}
return result;
}
/// <summary>
/// 获取配置文件路径
/// </summary>
/// <typeparam name="TConfig">类型</typeparam>
/// <returns>文件名</returns>
public static Tuple<string, string> GetConfigFile<TConfig>()
{
string filename;
string description = "配置文件";
var att = typeof(TConfig).GetCustomAttribute<ConfigFileAttribute>();
if (att == null || att.FileName.IsNullOrWhiteSpace())
{
filename = $"{typeof(TConfig).Name}.cfg";
}
else
{
filename = att.FileName;
if (!att.Description.IsNullOrEmpty())
{
description = att.Description;
}
}
return new Tuple<string, string>(filename, description);
}
/// <summary>
/// 初始化属性
/// </summary>
/// <param name="config">配置类</param>
/// <typeparam name="TConfig">类型</typeparam>
/// <returns>节点</returns>
/// <exception cref="ApplicationException">ApplicationException</exception>
public static ConcurrentDictionary<string, Ident> InitIdents<TConfig>(TConfig config)
{
ConcurrentDictionary<string, Ident> idents = new ConcurrentDictionary<string, Ident>();
var list = config.GetType().GetNeedProperties();
foreach (PropertyInfo info in list)
{
Ident ident = new Ident
{
Key = info.Name,
Show = true,
Description = info.Description(),
IsList = info.PropertyType.IsList()
};
var section = info.GetCustomAttribute<ConfigSectionAttribute>();
ident.Section = section != null ? section.Section : "";
var propertyatt = info.GetCustomAttribute<ConfigPropertyAttribute>();
ident.Caption = propertyatt != null ? propertyatt.Caption : "";
ident.Unit = propertyatt != null ? propertyatt.Unit : "";
ident.Description = propertyatt != null ? propertyatt.Description : "";
var indexatt = info.GetCustomAttribute<ConfigIndexAttribute>();
ident.Index = indexatt?.Index ?? short.MaxValue + idents.Count;
ident.Show = indexatt == null || indexatt.Show;
if (ident.Description.IsNullOrEmpty())
{
ident.Description = info.DisplayName() ?? info.Description();
}
if (ident.Description.IsNullOrEmpty())
{
ident.Description = "";
}
if (!idents.ContainsKey(ident.Key))
{
idents.TryAdd(ident.Key, ident);
}
}
return idents;
}
/// <summary>
/// 类型默认值
/// </summary>
/// <param name="targetType">类型</param>
/// <returns>默认值</returns>
public static object DefaultValue(Type targetType)
{
return targetType.IsValueType ? Activator.CreateInstance(targetType) : null;
}
/// <summary>
/// 读取对象数值
/// </summary>
/// <param name="config">配置文件</param>
/// <param name="idents">节点</param>
/// <typeparam name="TConfig">类型</typeparam>
/// <exception cref="ApplicationException">ApplicationException</exception>
public static void LoadConfigValue<TConfig>(TConfig config, ConcurrentDictionary<string, Ident> idents)
{
var list = config.GetType().GetNeedProperties();
foreach (PropertyInfo info in list)
{
object defaultobj = info.GetValue(config, null);
Type type = info.PropertyType;
if (type == typeof(string))
{
object value = idents[info.Name].Value;
info.SetValue(config, Convert.ChangeType(value == null ? defaultobj : value, type), null);
continue;
}
if (ConvertEx.CanConvent(type))
{
object value = ConvertEx.StringToObject(idents[info.Name].Value, type, defaultobj);
info.SetValue(config, Convert.ChangeType(value, type), null);
continue;
}
if (type.IsList())
{
Type[] genericTypes = type.GetGenericArguments();
if (genericTypes.Length != 1)
{
throw new ApplicationException("转换出错: " + type.FullName);
}
Type childtype = genericTypes[0];
Type typeDataList = typeof(List<>).MakeGenericType(childtype);
MethodInfo methodInfo = typeDataList.GetMethod("Add", BindingFlags.Public | BindingFlags.Instance);
if (methodInfo == null)
{
continue;
}
object listvalue = typeDataList.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, new object[] { });
foreach (string strvalue in idents[info.Name].Values)
{
if (childtype == typeof(string))
{
object value = strvalue;
methodInfo.Invoke(listvalue, new[] { value });
}
else if (ConvertEx.CanConvent(childtype))
{
object value = ConvertEx.StringToObject(strvalue, childtype, DefaultValue(childtype));
methodInfo.Invoke(listvalue, new[] { value });
}
}
info.SetValue(config, listvalue, null);
continue;
}
throw new ApplicationException("不支持此类型: " + type.FullName);
}
}
/// <summary>
/// 设置对象数值
/// </summary>
/// <param name="config">配置文件</param>
/// <param name="idents">节点</param>
/// <typeparam name="TConfig">类型</typeparam>
/// <exception cref="ApplicationException">ApplicationException</exception>
public static void SaveConfigValue<TConfig>(TConfig config, ConcurrentDictionary<string, Ident> idents)
{
var list = config.GetType().GetNeedProperties();
foreach (PropertyInfo info in list)
{
object obj = info.GetValue(config, null);
Type type = info.PropertyType;
if (ConvertEx.CanConvent(type))
{
string value = ConvertEx.ObjectToString(obj, type);
idents[info.Name].Value = value;
continue;
}
if (type.IsList())
{
Type[] genericTypes = type.GetGenericArguments();
if (genericTypes.Length != 1)
{
throw new ApplicationException("转换出错: " + type.FullName);
}
Type childtype = genericTypes[0];
IEnumerable en = obj as IEnumerable;
if (en == null)
{
throw new ApplicationException("转换出错: " + type.FullName);
}
idents[info.Name].Values.Clear();
foreach (object child in en)
{
if (ConvertEx.CanConvent(childtype))
{
idents[info.Name].Values.Add(ConvertEx.ObjectToString(child, childtype));
}
else
{
throw new ApplicationException("不支持此类型: " + type.FullName);
}
}
continue;
}
throw new ApplicationException("不支持此类型: " + type.FullName);
}
}
}
/// <summary>配置文件特性</summary>
[AttributeUsage(AttributeTargets.Class)]
public class ConfigFileAttribute : Attribute
{
/// <summary>
/// 配置文件名
/// </summary>
public string FileName { get; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; }
/// <summary>
/// 配置文件
/// </summary>
public ConfigFileAttribute() : this(string.Empty, string.Empty)
{
}
/// <summary>配置文件</summary>
/// <param name="fileName">文件名</param>
/// <param name="description">描述</param>
public ConfigFileAttribute(string fileName, string description = "")
{
FileName = fileName;
Description = description;
}
}
/// <summary>
/// 数据节点
/// </summary>
public class Ident
{
/// <summary>
/// 节
/// </summary>
public string Section { get; set; }
/// <summary>
/// 键
/// </summary>
public string Key { get; set; }
/// <summary>
/// 值
/// </summary>
public string Value { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Caption { get; set; }
/// <summary>
/// 单位
/// </summary>
public string Unit { get; set; }
/// <summary>
/// 序号
/// </summary>
public int Index { get; set; }
/// <summary>
/// 是否显示
/// </summary>
public bool Show { get; set; }
/// <summary>
/// ToString()
/// </summary>
/// <returns>String</returns>
public override string ToString()
{
return Index + " [" + Section + "] " + Key + " = ?";
}
/// <summary>
/// 是否是列表类型
/// </summary>
public bool IsList { get; set; }
/// <summary>
/// 列表值
/// </summary>
public List<string> Values = new List<string>();
}
/// <summary>
/// 配置属性节点特性
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class ConfigSectionAttribute : Attribute
{
/// <summary>
/// 节
/// </summary>
public string Section { get; }
/// <summary>属性节点特性</summary>
/// <param name="section">节</param>
public ConfigSectionAttribute(string section)
{
Section = section;
}
}
/// <summary>
/// 配置属性描述特性
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class ConfigPropertyAttribute : Attribute
{
/// <summary>
/// 标题
/// </summary>
public string Caption { get; }
/// <summary>
/// 单位
/// </summary>
public string Unit { get; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; }
/// <summary>
/// 配置文件属性
/// </summary>
/// <param name="caption">标题</param>
/// <param name="unit">单位</param>
/// <param name="description">描述</param>
public ConfigPropertyAttribute(string caption, string description = "", string unit = "")
{
Caption = caption;
Unit = unit;
Description = description;
}
}
/// <summary>
/// 忽略此属性的配置存储
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class ConfigIgnoreAttribute : Attribute
{
}
/// <summary>
/// 配置序号描述特性
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class ConfigIndexAttribute : Attribute
{
/// <summary>
/// 序号
/// </summary>
public int Index { get; }
/// <summary>
/// 是否显示
/// </summary>
public bool Show { get; }
/// <summary>配置序号特性</summary>
/// <param name="index">序号</param>
/// <param name="show">是否显示</param>
public ConfigIndexAttribute(int index, bool show = true)
{
Index = index;
Show = show;
}
}
}

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -153,20 +153,16 @@ namespace Sunny.UI
/// </summary> /// </summary>
public class BmpFile public class BmpFile
{ {
BmpHead head;
byte[] data;
/// <summary> /// <summary>
/// 慢于 bitmap.Save(XX,ImageFormat.Bmp)只是为了解释BMP文件数据格式 /// 慢于 bitmap.Save(XX,ImageFormat.Bmp)只是为了解释BMP文件数据格式
/// </summary> /// </summary>
/// <param name="bitmap"></param> /// <param name="bitmap"></param>
public BmpFile(Bitmap bitmap) public BmpFile(Bitmap bitmap)
{ {
head = new BmpHead(); var head = new BmpHead();
head.Init(bitmap); head.Init(bitmap);
data = new byte[head.FileSize]; Data = new byte[head.FileSize];
Array.Copy(head.ToBytes(), 0, data, 0, (int)head.BitmapDataOffset); Array.Copy(head.ToBytes(), 0, Data, 0, (int)head.BitmapDataOffset);
var sourceArea = new Rectangle(0, 0, bitmap.Width, bitmap.Height); var sourceArea = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
var bitmapData = bitmap.LockBits(sourceArea, ImageLockMode.ReadOnly, PixelFormat.Format32bppPArgb); var bitmapData = bitmap.LockBits(sourceArea, ImageLockMode.ReadOnly, PixelFormat.Format32bppPArgb);
@ -200,10 +196,10 @@ namespace Sunny.UI
/// <param name="bmpData">数据从左上角开始为每个点的B、G、R循环</param> /// <param name="bmpData">数据从左上角开始为每个点的B、G、R循环</param>
public BmpFile(int width, int height, byte[] bmpData) public BmpFile(int width, int height, byte[] bmpData)
{ {
head = new BmpHead(); var head = new BmpHead();
head.Init(width, height); head.Init(width, height);
data = new byte[head.FileSize]; Data = new byte[head.FileSize];
Array.Copy(head.ToBytes(), 0, data, 0, (int)head.BitmapDataOffset); Array.Copy(head.ToBytes(), 0, Data, 0, (int)head.BitmapDataOffset);
if (bmpData.Length != width * height * 3) return; if (bmpData.Length != width * height * 3) return;
//BMP文件的数据从左下角开始每行向上。System.Drawing.Bitmap数据是从左上角开始每行向下 //BMP文件的数据从左下角开始每行向上。System.Drawing.Bitmap数据是从左上角开始每行向下
@ -212,7 +208,7 @@ namespace Sunny.UI
{ {
int offset = height - 1 - i; int offset = height - 1 - i;
offset *= width * 3; offset *= width * 3;
Array.Copy(bmpData, offset, data, idx, width * 3); Array.Copy(bmpData, offset, Data, idx, width * 3);
idx += width * 3; idx += width * 3;
} }
} }
@ -220,7 +216,7 @@ namespace Sunny.UI
/// <summary> /// <summary>
/// 二进制数据 /// 二进制数据
/// </summary> /// </summary>
public byte[] Data => data; public byte[] Data { get; }
/// <summary> /// <summary>
/// 保存文件 /// 保存文件
@ -228,7 +224,7 @@ namespace Sunny.UI
/// <param name="fileName">文件名</param> /// <param name="fileName">文件名</param>
public void SaveToFile(string fileName) public void SaveToFile(string fileName)
{ {
File.WriteAllBytes(fileName, data); File.WriteAllBytes(fileName, Data);
} }
/// <summary> /// <summary>
@ -237,7 +233,7 @@ namespace Sunny.UI
/// <returns>图片</returns> /// <returns>图片</returns>
public Bitmap Bitmap() public Bitmap Bitmap()
{ {
MemoryStream ms = new MemoryStream(data); var ms = new MemoryStream(Data);
ms.Position = 0; ms.Position = 0;
return new Bitmap(ms); return new Bitmap(ms);
} }

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -18,6 +18,7 @@
* *
* 2020-01-01: V2.2.0 * 2020-01-01: V2.2.0
* 2023-04-02: V3.3.4 null的Bug * 2023-04-02: V3.3.4 null的Bug
* 2024-11-06: V3.7.2 UITreeView增加了一个刷新节点状态的扩展函数
******************************************************************************/ ******************************************************************************/
using System; using System;
@ -372,14 +373,11 @@ namespace Sunny.UI
internal static void HideComboDropDown(this Control ctrl) internal static void HideComboDropDown(this Control ctrl)
{ {
var ctrls = ctrl?.FindForm()?.GetInterfaceControls("IHideDropDown", true); var ctrls = ctrl?.FindForm()?.GetInterfaceControls<IHideDropDown>(true);
if (ctrls == null) return; if (ctrls == null) return;
foreach (var control in ctrls) foreach (var control in ctrls)
{ {
if (control is IHideDropDown item) control.HideDropDown();
{
item.HideDropDown();
}
} }
} }
@ -390,21 +388,43 @@ namespace Sunny.UI
/// <param name="interfaceName">接口名称</param> /// <param name="interfaceName">接口名称</param>
/// <param name="includeChild"></param> /// <param name="includeChild"></param>
/// <returns>控件列表</returns> /// <returns>控件列表</returns>
public static List<Control> GetInterfaceControls(this Control ctrl, string interfaceName, bool includeChild = false) public static List<T> GetInterfaceControls<T>(this Control ctrl, bool includeChild = false)
{ {
List<Control> values = new List<Control>(); List<T> values = new();
if (ctrl.IsNull()) return values; if (ctrl.IsNull()) return values;
foreach (Control obj in ctrl.Controls) foreach (Control obj in ctrl.Controls)
{ {
if (obj.GetType().GetInterface(interfaceName) != null) if (obj is T it && it != null)
{ {
values.Add(obj); values.Add(it);
} }
if (includeChild && obj.Controls.Count > 0) if (includeChild && obj.Controls.Count > 0)
{ {
values.AddRange(obj.GetInterfaceControls(interfaceName, true)); values.AddRange(obj.GetInterfaceControls<T>(includeChild));
}
}
return values;
}
internal static List<T> GetTranslateControls<T>(this Control ctrl)
{
List<T> values = new();
if (ctrl.IsNull()) return values;
foreach (Control obj in ctrl.Controls)
{
if (obj is T it && it != null)
{
values.Add(it);
}
if (obj.Controls.Count > 0)
{
if (obj is UIPage) continue;
values.AddRange(obj.GetTranslateControls<T>());
} }
} }
@ -511,32 +531,38 @@ namespace Sunny.UI
/// <returns>全选状态(Checked),半选状态(Indeterminate),未选状态(Unchecked)</returns> /// <returns>全选状态(Checked),半选状态(Indeterminate),未选状态(Unchecked)</returns>
public static CheckState CheckState(this TreeNode node) public static CheckState CheckState(this TreeNode node)
{ {
if (GetChildNodeCheckedState(node)) if (node.Nodes.Count > 0)
{ {
return System.Windows.Forms.CheckState.Indeterminate; var count = node.Nodes.Cast<TreeNode>().Where(n => n.Checked).ToList().Count;
if (count == 0)
{
return System.Windows.Forms.CheckState.Unchecked;
}
else if (count == node.Nodes.Count)
{
return System.Windows.Forms.CheckState.Checked;
}
else
{
return System.Windows.Forms.CheckState.Indeterminate;
}
} }
return node.Checked ? System.Windows.Forms.CheckState.Checked : System.Windows.Forms.CheckState.Unchecked; return node.Checked ? System.Windows.Forms.CheckState.Checked : System.Windows.Forms.CheckState.Unchecked;
} }
private static bool GetChildNodeCheckedState(TreeNode node) public static void RefreshCheckState(this TreeNode node)
{ {
if (node.TreeView is not UITreeView.TreeViewEx tv) return;
System.Windows.Forms.CheckState state = node.CheckState();
if (node.Nodes.Count > 0) if (node.Nodes.Count > 0)
{ {
var count = node.Nodes.Cast<TreeNode>().Where(n => n.Checked).ToList().Count; if (state == System.Windows.Forms.CheckState.Checked && !node.Checked) node.Checked = true;
if (count > 0 && count < node.Nodes.Count) if (state == System.Windows.Forms.CheckState.Unchecked && node.Checked) node.Checked = false;
{
return true;
}
else
{
foreach (TreeNode nd in node.Nodes)
{
return GetChildNodeCheckedState(nd);
}
}
} }
return false;
tv.DicNodeStatus[node.GetHashCode()] = state == System.Windows.Forms.CheckState.Indeterminate;
tv.Invalidate();
} }
public static void Disabled(this Control ctrl) public static void Disabled(this Control ctrl)

View File

@ -0,0 +1,371 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2023 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.Common.dll can be used for free under the MIT license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UConvertEx.cs
* :
* : V3.1
* : 2020-01-01
*
* 2020-11-20: V3.0.0
******************************************************************************/
using System;
using System.Drawing;
namespace Sunny.UI
{
/// <summary>
/// 对象转换扩展类
/// </summary>
public static class ConvertEx
{
/// <summary>
/// 可以对象和字符串互相转换的类型
/// </summary>
/// <param name="type">类型</param>
/// <returns>结果</returns>
public static bool CanConvent(Type type)
{
bool result = false;
TypeCode typeCode = Type.GetTypeCode(type);
switch (typeCode)
{
case TypeCode.String:
case TypeCode.Char:
case TypeCode.SByte:
case TypeCode.Byte:
case TypeCode.Int16:
case TypeCode.UInt16:
case TypeCode.Int32:
case TypeCode.UInt32:
case TypeCode.Int64:
case TypeCode.UInt64:
case TypeCode.Single:
case TypeCode.Double:
case TypeCode.Decimal:
case TypeCode.Boolean:
case TypeCode.DateTime:
result = true;
break;
case TypeCode.Object:
if (type == typeof(Point) ||
type == typeof(PointF) ||
type == typeof(Color) ||
type == typeof(Size) ||
type == typeof(SizeF))
{
result = true;
}
break;
}
return result;
}
/// <summary>
/// 字符串转对象
/// </summary>
/// <param name="str">字符串</param>
/// <param name="type">类型</param>
/// <param name="defaultobj">默认对象</param>
/// <returns>对象</returns>
public static object StringToObject(string str, Type type, object defaultobj)
{
object obj = defaultobj;
if (type == typeof(string))
{
return str;
}
if (str.IsNullOrEmpty())
{
return defaultobj;
}
TypeCode typeCode = Type.GetTypeCode(type);
switch (typeCode)
{
case TypeCode.Char:
obj = str.ToChar((char)defaultobj);
break;
case TypeCode.SByte:
obj = str.ToSByte((sbyte)defaultobj);
break;
case TypeCode.Byte:
obj = str.ToByte((byte)defaultobj);
break;
case TypeCode.Int16:
obj = str.ToShort((short)defaultobj);
break;
case TypeCode.UInt16:
obj = str.ToUShort((ushort)defaultobj);
break;
case TypeCode.Int32:
obj = str.ToInt((int)defaultobj);
break;
case TypeCode.UInt32:
obj = str.ToUInt((uint)defaultobj);
break;
case TypeCode.Int64:
obj = str.ToLong((long)defaultobj);
break;
case TypeCode.UInt64:
obj = str.ToULong((ulong)defaultobj);
break;
case TypeCode.Single:
obj = str.ToFloat((float)defaultobj);
break;
case TypeCode.Double:
obj = str.ToDouble((double)defaultobj);
break;
case TypeCode.Decimal:
obj = str.ToDecimal((decimal)defaultobj);
break;
case TypeCode.Boolean:
if (str.ToUpper().Equals(bool.TrueString.ToUpper()))
{
obj = true;
}
if (str.ToUpper().Equals(bool.FalseString.ToUpper()))
{
obj = false;
}
break;
case TypeCode.DateTime:
try
{
DateTime dt = str.ToDateTime(DateTimeEx.DateTimeFormat);
obj = dt;
}
catch (Exception e)
{
Console.WriteLine(e);
}
break;
case TypeCode.Object:
obj = StringToObjectEx(str, type, defaultobj);
break;
default:
throw new ApplicationException("不支持此类型: " + type.FullName);
}
if (type == typeof(DateTime))
{
}
return obj;
}
/// <summary>
/// 字符串转对象扩展
/// </summary>
/// <param name="str">字符串</param>
/// <param name="type">类型</param>
/// <param name="defaultobj">默认对象</param>
/// <returns>对象</returns>
private static object StringToObjectEx(string str, Type type, object defaultobj)
{
object obj = defaultobj;
if (type == typeof(Point))
{
string[] strs = str.ToUpper().Replace("X:", "").Replace("Y:", "").Trim().Split(";");
if (strs.Length == 2)
{
if (int.TryParse(strs[0], out var x) && int.TryParse(strs[1], out var y))
{
obj = new Point(x, y);
}
}
}
else if (type == typeof(PointF))
{
string[] strs = str.ToUpper().Replace("X:", "").Replace("Y:", "").Trim().Split(";");
if (strs.Length == 2)
{
if (float.TryParse(strs[0], out var x) && float.TryParse(strs[1], out var y))
{
obj = new PointF(x, y);
}
}
}
else if (type == typeof(Color))
{
string[] strs = str.ToUpper().Replace("A:", "").Replace("R:", "").Replace("G:", "").Replace("B:", "").Trim().Split(";");
if (strs.Length == 4)
{
if (int.TryParse(strs[0], out var a) && int.TryParse(strs[1], out var r) && int.TryParse(strs[2], out var g) && int.TryParse(strs[3], out var b))
{
if (a.InRange(0, 255) && r.InRange(0, 255) && g.InRange(0, 255) && b.InRange(0, 255))
{
obj = Color.FromArgb(a, r, g, b);
}
}
}
}
else if (type == typeof(Size))
{
string[] strs = str.ToUpper().Replace("W:", "").Replace("H:", "").Trim().Split(";");
if (strs.Length == 2)
{
if (int.TryParse(strs[0], out var x) && int.TryParse(strs[1], out var y))
{
obj = new Size(x, y);
}
}
}
else if (type == typeof(SizeF))
{
string[] strs = str.ToUpper().Replace("W:", "").Replace("H:", "").Trim().Split(";");
if (strs.Length == 2)
{
if (float.TryParse(strs[0], out var x) && float.TryParse(strs[1], out var y))
{
obj = new SizeF(x, y);
}
}
}
else
{
throw new ApplicationException("不支持此类型: " + type.FullName);
}
return obj;
}
/// <summary>
/// 对象转字符串
/// </summary>
/// <param name="obj">对象</param>
/// <param name="type">类型</param>
/// <returns>字符串</returns>
public static string ObjectToString(object obj, Type type)
{
string value;
TypeCode typeCode = Type.GetTypeCode(type);
switch (typeCode)
{
case TypeCode.String:
if (obj == null)
{
obj = "";
}
value = obj.ToString();
break;
case TypeCode.Char:
case TypeCode.SByte:
case TypeCode.Byte:
case TypeCode.Int16:
case TypeCode.UInt16:
case TypeCode.Int32:
case TypeCode.UInt32:
case TypeCode.Int64:
case TypeCode.UInt64:
case TypeCode.Single:
case TypeCode.Double:
case TypeCode.Decimal:
value = obj.ToString();
break;
case TypeCode.Boolean:
value = (bool)obj ? bool.TrueString : bool.FalseString;
break;
case TypeCode.DateTime:
value = ((DateTime)obj).ToString(DateTimeEx.DateTimeFormat);
break;
case TypeCode.Object:
value = ObjectToStringEx(obj, type);
break;
default:
throw new ApplicationException("不支持此类型: " + type.FullName);
}
return value;
}
/// <summary>
/// 对象转字符串扩展
/// </summary>
/// <param name="obj">对象</param>
/// <param name="type">类型</param>
/// <returns>字符串</returns>
private static string ObjectToStringEx(object obj, Type type)
{
string value;
if (type == typeof(Point))
{
Point point = (Point)obj;
value = "X:" + point.X + "; Y:" + point.Y;
}
else if (type == typeof(PointF))
{
PointF point = (PointF)obj;
value = "X:" + point.X + "; Y:" + point.Y;
}
else if (type == typeof(Color))
{
Color color = (Color)obj;
value = "A:" + color.A + "; R:" + color.R + "; G:" + color.G + "; B:" + color.B;
}
else if (type == typeof(Size))
{
Size size = (Size)obj;
value = "W:" + size.Width + "; H:" + size.Height;
}
else if (type == typeof(SizeF))
{
SizeF size = (SizeF)obj;
value = "W:" + size.Width + "; H:" + size.Height;
}
else
{
throw new ApplicationException("不支持此类型: " + type.FullName);
}
return value;
}
}
}

View File

@ -0,0 +1,382 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2023 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.dll can be used for free under the GPL-3.0 license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UDateTimeInt64.cs
* :
* : V2.2
* : 2020-09-23
*
* 2020-09-23: V2.2.8
* 2020-10-10: V2.2.8 Double互转
******************************************************************************/
using System;
namespace Sunny.UI
{
/// <summary>
/// 日期与长整形和浮点型互转
/// Value长整形为1970年1月1日0时起的毫秒数
/// DoubleValue双精度浮点数1970年1月1日0时起的天数
/// </summary>
public struct DateTimeInt64 : IComparable, IEquatable<DateTimeInt64>, IEquatable<long>, IEquatable<DateTime>
{
public long Value { get; set; }
public const long Jan1st1970Ticks = 621355968000000000; //Jan1st1970.Ticks;
public const long Dec31th9999Ticks = 3155378975999990000; //DateTime.MaxValue.Ticks;
public const string DefaultFormatString = DateTimeEx.DateTimeFormatEx;
public const double MillisecondsPerDay = 86400000.0;
/// <summary>
/// 返回当前时间的毫秒数, 这个毫秒其实就是自1970年1月1日0时起的毫秒数
/// </summary>
public static long CurrentDateTimeToTicks()
{
return (DateTime.UtcNow.Ticks - Jan1st1970Ticks) / 10000;
}
public double DoubleValue
{
get { return Value * 1.0 / MillisecondsPerDay; }
set { Value = (long)(value * MillisecondsPerDay); }
}
/// <summary>
/// 返回指定时间的毫秒数, 这个毫秒其实就是自1970年1月1日0时起的毫秒数
/// </summary>
public static long DateTimeToTicks(DateTime datetime)
{
return (datetime.ToUniversalTime().Ticks - Jan1st1970Ticks) / 10000;
}
/// <summary>
/// 从一个代表自1970年1月1日0时起的毫秒数转换为DateTime (北京时间)
/// </summary>
public static DateTime TicksToDateTime(long ticks)
{
#pragma warning disable CS0618 // 类型或成员已过时
return TimeZone.CurrentTimeZone.ToLocalTime(TicksToUTCDateTime(ticks));
#pragma warning restore CS0618 // 类型或成员已过时
}
/// <summary>
/// 从一个代表自1970年1月1日0时起的毫秒数转换为DateTime (UTC时间)
/// </summary>
public static DateTime TicksToUTCDateTime(long ticks)
{
return new DateTime(ticks * 10000 + Jan1st1970Ticks);
}
public DateTimeInt64(long ticks)
{
ticks = MakeValidDate(ticks);
Value = ticks;
}
public DateTimeInt64(double doubleTicks)
{
doubleTicks = MakeValidDate((long)(doubleTicks * MillisecondsPerDay));
Value = (long)doubleTicks;
}
public DateTimeInt64(DateTime dateTime)
{
Value = DateTimeToTicks(dateTime);
}
public DateTimeInt64(int year, int month, int day)
{
Value = DateTimeToTicks(new DateTime(year, month, day));
}
public DateTimeInt64(int year, int month, int day, int hour, int minute, int second)
{
Value = DateTimeToTicks(new DateTime(year, month, day, hour, minute, second));
}
public DateTimeInt64(int year, int month, int day, int hour, int minute, int second, int millisecond)
{
Value = DateTimeToTicks(new DateTime(year, month, day, hour, minute, second, millisecond));
}
public DateTimeInt64(DateTimeInt64 dtValue)
{
Value = dtValue.Value;
}
public bool IsValidDate
{
get { return Value >= 0 && Value <= Dec31th9999Ticks - Jan1st1970Ticks; }
}
public DateTime DateTime
{
get { return TicksToDateTime(Value); }
set { Value = DateTimeToTicks(value); }
}
public static bool CheckValidDate(long ticks)
{
return ticks >= 0 && ticks <= Dec31th9999Ticks - Jan1st1970Ticks;
}
public static long MakeValidDate(long ticks)
{
if (ticks < 0)
ticks = 0;
if (ticks > Dec31th9999Ticks - Jan1st1970Ticks)
ticks = Dec31th9999Ticks - Jan1st1970Ticks;
return ticks;
}
public void AddMilliseconds(double milliseconds)
{
Value = DateTimeToTicks(DateTime.AddMilliseconds(milliseconds));
}
public void AddSeconds(double seconds)
{
Value = DateTimeToTicks(DateTime.AddSeconds(seconds));
}
public void AddMinutes(double minutes)
{
Value = DateTimeToTicks(DateTime.AddMinutes(minutes));
}
public void AddHours(double hours)
{
Value = DateTimeToTicks(DateTime.AddHours(hours));
}
public void AddDays(double days)
{
Value = DateTimeToTicks(DateTime.AddDays(days));
}
public void AddMonths(int months)
{
Value = DateTimeToTicks(DateTime.AddMonths(months));
}
public void AddYears(int years)
{
Value = DateTimeToTicks(DateTime.AddYears(years));
}
public static long operator -(DateTimeInt64 dtValue1, DateTimeInt64 dtValue2)
{
return dtValue1.Value - dtValue2.Value;
}
public static long operator +(DateTimeInt64 dtValue1, DateTimeInt64 dtValue2)
{
return dtValue1.Value + dtValue2.Value;
}
public static DateTimeInt64 operator -(DateTimeInt64 dtValue1, long dtValue2)
{
dtValue1.Value -= dtValue2;
return dtValue1;
}
public static DateTimeInt64 operator +(DateTimeInt64 dtValue1, long dtValue2)
{
dtValue1.Value += dtValue2;
return dtValue1;
}
public static DateTimeInt64 operator ++(DateTimeInt64 dtValue)
{
dtValue.AddDays(1);
return dtValue;
}
public static DateTimeInt64 operator --(DateTimeInt64 dtValue)
{
dtValue.AddDays(-1);
return dtValue;
}
public static implicit operator long(DateTimeInt64 dtValue)
{
return dtValue.Value;
}
public static implicit operator DateTimeInt64(long ticks)
{
return new DateTimeInt64(ticks);
}
public static implicit operator DateTimeInt64(DateTime dt)
{
return new DateTimeInt64(dt);
}
public static implicit operator DateTime(DateTimeInt64 dt)
{
return dt.DateTime;
}
public static implicit operator double(DateTimeInt64 dtValue)
{
return dtValue.DoubleValue;
}
public static implicit operator DateTimeInt64(double ticks)
{
return new DateTimeInt64(ticks);
}
public static bool operator ==(DateTimeInt64 dtValue1, DateTimeInt64 dtValue2)
{
return dtValue1.Value == dtValue2.Value;
}
public static bool operator !=(DateTimeInt64 dtValue1, DateTimeInt64 dtValue2)
{
return dtValue1.Value != dtValue2.Value;
}
public static bool operator ==(DateTimeInt64 dtValue, long ticks)
{
return dtValue.Value == ticks;
}
public static bool operator !=(DateTimeInt64 dtValue, long ticks)
{
return dtValue.Value != ticks;
}
public static bool operator <(DateTimeInt64 dtValue1, DateTimeInt64 dtValue2)
{
return dtValue1.Value < dtValue2.Value;
}
public static bool operator >(DateTimeInt64 dtValue1, DateTimeInt64 dtValue2)
{
return dtValue1.Value > dtValue2.Value;
}
public static bool operator <=(DateTimeInt64 dtValue1, DateTimeInt64 dtValue2)
{
return dtValue1.Value <= dtValue2.Value;
}
public static bool operator >=(DateTimeInt64 dtValue1, DateTimeInt64 dtValue2)
{
return dtValue1.Value >= dtValue2.Value;
}
public static bool operator <(DateTimeInt64 dtValue, long ticks)
{
return dtValue.Value < ticks;
}
public static bool operator >(DateTimeInt64 dtValue, long ticks)
{
return dtValue.Value > ticks;
}
public static bool operator <=(DateTimeInt64 dtValue, long ticks)
{
return dtValue.Value <= ticks;
}
public static bool operator >=(DateTimeInt64 dtValue, long ticks)
{
return dtValue.Value >= ticks;
}
public override bool Equals(object obj)
{
if (obj is DateTimeInt64 dtValue)
{
return dtValue.Value == Value;
}
else if (obj is long longValue)
{
return longValue == Value;
}
else
{
return false;
}
}
public override int GetHashCode()
{
return Value.GetHashCode();
}
int IComparable.CompareTo(object obj)
{
if (!(obj is DateTimeInt64)) throw new ArgumentException();
return (Value).CompareTo(((DateTimeInt64)obj).Value);
}
public string ToString(long ticks)
{
return ToString(ticks, DefaultFormatString);
}
public override string ToString()
{
return ToString(Value, DefaultFormatString);
}
public string ToString(string fmtStr)
{
return ToString(Value, fmtStr);
}
public static string ToString(long dtValue, string fmtStr)
{
DateTime dt = TicksToDateTime(dtValue);
return dt.ToString(fmtStr);
}
public bool Equals(DateTimeInt64 dtValue)
{
return Value == dtValue.Value;
}
public bool Equals(long ticks)
{
return Value == ticks;
}
public bool Equals(DateTime datetime)
{
return Value == (new DateTimeInt64(datetime)).Value;
}
public string DateTimeString => DateTime.DateTimeString();
public string DateString => DateTime.DateString();
public string TimeString => DateTime.TimeString();
public string HourMinuteString => DateTime.ToString("HH:mm");
public int Year => DateTime.Year;
public int Month => DateTime.Month;
public int Day => DateTime.Day;
public int Hour => DateTime.Hour;
public int Minute => DateTime.Minute;
public int Second => DateTime.Second;
public int Millisecond => DateTime.Millisecond;
}
}

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -62,7 +62,7 @@ namespace Sunny.UI
/// <returns>打开是否成功</returns> /// <returns>打开是否成功</returns>
public static bool OpenDialog(ref string filename, string filter = "", string defaultExt = "") public static bool OpenDialog(ref string filename, string filter = "", string defaultExt = "")
{ {
using OpenFileDialog od = new OpenFileDialog { Title = UILocalize.Open }; using OpenFileDialog od = new OpenFileDialog { Title = UIStyles.CurrentResources.Open };
try try
{ {
@ -89,7 +89,7 @@ namespace Sunny.UI
/// <returns>保存是否成功</returns> /// <returns>保存是否成功</returns>
public static bool SaveDialog(ref string filename, string filter = "", string defaultExt = "") public static bool SaveDialog(ref string filename, string filter = "", string defaultExt = "")
{ {
using SaveFileDialog od = new SaveFileDialog { Title = UILocalize.Save }; using SaveFileDialog od = new SaveFileDialog { Title = UIStyles.CurrentResources.Save };
try try
{ {
od.FileName = filename; od.FileName = filename;

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -382,7 +382,6 @@ namespace Sunny.UI
/// <summary> /// <summary>
/// 创建圆角路径 /// 创建圆角路径
/// </summary> /// </summary>
/// <param name="g">绘图图面</param>
/// <param name="rect">区域</param> /// <param name="rect">区域</param>
/// <param name="radius">圆角大小</param> /// <param name="radius">圆角大小</param>
/// <param name="cornerLeftTop">左上角</param> /// <param name="cornerLeftTop">左上角</param>

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -33,6 +33,70 @@ namespace Sunny.UI
/// </summary> /// </summary>
public static class GraphicsEx public static class GraphicsEx
{ {
public static string TruncateText(Graphics graphics, string text, Font font, float maxWidth)
{
// If the text is empty or null, return it as-is.
if (string.IsNullOrEmpty(text)) return text;
// Measure the original string.
SizeF size = graphics.MeasureString(text, font);
// If the original string fits within the width, return it as-is.
if (size.Width <= maxWidth) return text;
// Otherwise, truncate the string until it fits.
string truncatedText = text;
for (int i = text.Length; i > 0; i--)
{
truncatedText = text.Left(i) + "...";
size = graphics.MeasureString(truncatedText, font);
if (size.Width <= maxWidth)
break;
}
return truncatedText;
}
public static void DrawTruncateString(this Graphics g, string text, Font font, Color color, Rectangle rect, float maxWidth, HorizontalAlignment alignment)
{
text = TruncateText(g, text, font, maxWidth);
g.DrawString(text, font, color, rect, alignment.ToContentAlignment());
}
internal static ContentAlignment ToContentAlignment(this HorizontalAlignment alignment)
{
switch (alignment)
{
case HorizontalAlignment.Left: return ContentAlignment.MiddleLeft;
case HorizontalAlignment.Center: return ContentAlignment.MiddleCenter;
case HorizontalAlignment.Right: return ContentAlignment.MiddleRight;
}
return ContentAlignment.MiddleLeft;
}
internal static HorizontalAlignment ToHorizontalAlignment(this ContentAlignment alignment)
{
switch (alignment)
{
case ContentAlignment.TopLeft:
case ContentAlignment.MiddleLeft:
case ContentAlignment.BottomLeft:
return HorizontalAlignment.Left;
case ContentAlignment.TopCenter:
case ContentAlignment.MiddleCenter:
case ContentAlignment.BottomCenter:
return HorizontalAlignment.Center;
case ContentAlignment.TopRight:
case ContentAlignment.MiddleRight:
case ContentAlignment.BottomRight:
return HorizontalAlignment.Right;
}
return HorizontalAlignment.Left;
}
public static void DrawString(this Graphics g, string text, Font font, Color color, Rectangle rect, ContentAlignment alignment, int offsetX = 0, int offsetY = 0) public static void DrawString(this Graphics g, string text, Font font, Color color, Rectangle rect, ContentAlignment alignment, int offsetX = 0, int offsetY = 0)
{ {
if (text.IsNullOrEmpty()) return; if (text.IsNullOrEmpty()) return;

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -22,7 +22,6 @@
* 2023-08-11: v3.4.1 * 2023-08-11: v3.4.1
******************************************************************************/ ******************************************************************************/
using Sunny.UI.Win32;
using System; using System;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.ComponentModel; using System.ComponentModel;
@ -31,6 +30,7 @@ using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using Sunny.UI.Win32;
namespace Sunny.UI namespace Sunny.UI
{ {
@ -149,7 +149,7 @@ namespace Sunny.UI
/// <returns>结果</returns> /// <returns>结果</returns>
public string Read(string section, string key, string Default) public string Read(string section, string key, string Default)
{ {
byte[] buffer = new byte[4096]; byte[] buffer = new byte[4096 * 16];
if (Default == null) if (Default == null)
{ {
Default = ""; Default = "";
@ -299,29 +299,6 @@ namespace Sunny.UI
/// </summary> /// </summary>
public class IniFile : IniBase public class IniFile : IniBase
{ {
/// <summary>
/// 写Byte数组
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, byte[] value)
{
Write(section, key, value.ToHexString());
}
/// <summary>
/// 读Byte数组
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public byte[] ReadBytes(string section, string key, byte[] Default)
{
return Read(section, key, Default.ToHexString()).ToHexBytes();
}
/// <summary> /// <summary>
/// 写Char /// 写Char
/// </summary> /// </summary>

View File

@ -0,0 +1,790 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2023 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.dll can be used for free under the GPL-3.0 license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UIniFileEx.cs
* : INI WinAPI
* : V3.1
* : 2021-10-27
*
* 2021-10-27: V2.2.0
******************************************************************************/
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
namespace Sunny.UI
{
public class IniFileEx
{
private readonly Dictionary<string, NameValueCollection> data = new Dictionary<string, NameValueCollection>();
private static readonly Regex regRemoveEmptyLines =
new Regex
(
@"(\s*;[\d\D]*?\r?\n)+|\r?\n(\s*\r?\n)*",
RegexOptions.Multiline | RegexOptions.Compiled
);
private static readonly Regex regParseIniData =
new Regex
(
@"
(?<IsSection>
^\s*\[(?<SectionName>[^\]]+)?\]\s*$
)
|
(?<IsKeyValue>
^\s*(?<Key>[^(\s*\=\s*)]+)?\s*\=\s*(?<Value>[\d\D]*)$
)",
RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace
);
public IniFileEx(string fileName) : this(fileName, Encoding.Default) { }
public IniFileEx(string fileName, Encoding encoding)
{
FileName = fileName;
Encoding = encoding;
using FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
ReadIniData(fs, encoding);
}
/// <summary>
/// 文件名
/// </summary>
[Description("文件名")]
public string FileName { get; set; } //INI文件名
public Encoding Encoding { get; set; }
private void ReadIniData(Stream stream, Encoding encoding)
{
string lastSection = string.Empty;
data.Add(lastSection, new NameValueCollection());
if (stream != null && encoding != null)
{
using StreamReader reader = new StreamReader(stream, encoding);
string iniData = reader.ReadToEnd();
iniData = regRemoveEmptyLines.Replace(iniData, "\n");
string[] lines = iniData.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in lines)
{
Match m = regParseIniData.Match(s);
if (m.Success)
{
if (m.Groups["IsSection"].Length > 0)
{
string sName = m.Groups["SectionName"].Value.ToLowerInvariant();
if (lastSection != sName)
{
lastSection = sName;
if (!data.ContainsKey(sName))
{
data.Add(sName, new NameValueCollection());
}
}
}
else if (m.Groups["IsKeyValue"].Length > 0)
{
data[lastSection].Add(m.Groups["Key"].Value, m.Groups["Value"].Value);
}
}
}
}
}
public NameValueCollection this[string section]
{
get
{
section = section.ToLowerInvariant();
if (!data.ContainsKey(section))
data.Add(section, new NameValueCollection());
return data[section];
}
}
public string this[string section, string key]
{
get => this[section][key];
set => this[section][key] = value;
}
public object this[string section, string key, Type t]
{
get
{
if (t == null || t == (Type)Type.Missing)
return this[section][key];
return GetValue(section, key, null, t);
}
set
{
if (t == null || t == (Type)Type.Missing)
this[section][key] = string.Empty;
else
SetValue(section, key, value);
}
}
public string[] KeyNames(string section)
{
return this[section].AllKeys;
}
public string[] SectionValues(string section)
{
return this[section].GetValues(0);
}
private object GetValue(string section, string key, object defaultValue, Type t)
{
section = section.ToLowerInvariant();
key = key.ToLowerInvariant();
if (!data.ContainsKey(section)) return defaultValue;
string v = data[section][key];
if (string.IsNullOrEmpty(v)) return defaultValue;
TypeConverter conv = TypeDescriptor.GetConverter(t);
if (!conv.CanConvertFrom(typeof(string))) return defaultValue;
try
{
return conv.ConvertFrom(v);
}
catch
{
return defaultValue;
}
}
private T GetValue<T>(string section, string key, T defaultValue)
{
return (T)GetValue(section, key, defaultValue, typeof(T));
}
private void SetValue(string section, string key, object value)
{
if (value == null)
{
this[section][key] = string.Empty;
}
else
{
TypeConverter conv = TypeDescriptor.GetConverter(value);
if (!conv.CanConvertTo(typeof(string)))
{
this[section][key] = value.ToString();
}
else
{
this[section][key] = (string)conv.ConvertTo(value, typeof(string));
}
}
UpdateFile();
}
public void Write(string section, string key, string value)
{
SetValue(section, key, value);
}
public string Read(string section, string key, string Default)
{
return GetValue(section, key, Default);
}
/// <summary>
/// 读取指定的Section的所有Value到列表中
/// </summary>
/// <param name="section">section</param>
public NameValueCollection GetSectionValues(string section)
{
return this[section];
}
public void UpdateFile()
{
Save();
}
public void Save()
{
Save(FileName, Encoding);
}
public void Save(string fileName, Encoding encoding)
{
using FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
Save(fs, encoding);
}
private void Save(Stream stream, Encoding encoding)
{
using StreamWriter sw = new StreamWriter(stream, encoding);
foreach (var cur in data)
{
if (!string.IsNullOrEmpty(cur.Key))
{
sw.WriteLine("[{0}]", cur.Key);
}
NameValueCollection col = cur.Value;
foreach (string key in col.Keys)
{
if (!string.IsNullOrEmpty(key))
{
string value = col[key];
if (!string.IsNullOrEmpty(value))
sw.WriteLine("{0}={1}", key, value);
}
}
}
sw.Flush();
}
public bool HasSection(string section)
{
return data.ContainsKey(section.ToLowerInvariant());
}
public bool HasKey(string section, string key)
{
return
data.ContainsKey(section) &&
!string.IsNullOrEmpty(data[section][key]);
}
/// <summary>
/// 写结构
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
/// <typeparam name="T">T</typeparam>
public void WriteStruct<T>(string section, string key, T value) where T : struct
{
Write(section, key, value.ToBytes());
}
/// <summary>
/// 读结构
/// </summary>
/// <typeparam name="T">T</typeparam>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public T ReadStruct<T>(string section, string key, T Default) where T : struct
{
//得到结构体的大小
int size = StructEx.Size(Default);
byte[] bytes = Read(section, key, "").ToHexBytes();
return size > bytes.Length ? Default : bytes.ToStruct<T>();
}
/// <summary>
/// 写Byte数组
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, byte[] value)
{
Write(section, key, value.ToHexString());
}
/// <summary>
/// 读Byte数组
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public byte[] ReadBytes(string section, string key, byte[] Default)
{
return Read(section, key, Default.ToHexString()).ToHexBytes();
}
/// <summary>
/// 写Char
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, char value)
{
Write(section, key, value.ToString());
}
/// <summary>
/// 读Char
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public char ReadChar(string section, string key, char Default = ' ')
{
return Read(section, key, Default.ToString()).ToChar(Default);
}
/// <summary>
/// 写Decimal
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, decimal value)
{
Write(section, key, value.ToString(CultureInfo.InvariantCulture));
}
/// <summary>
/// 读Decimal
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public decimal ReadDecimal(string section, string key, decimal Default = 0)
{
return Read(section, key, Default.ToString(CultureInfo.InvariantCulture)).ToDecimal(Default);
}
/// <summary>
/// 写整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, short value)
{
Write(section, key, value.ToString());
}
/// <summary>
/// 读整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public short ReadShort(string section, string key, short Default = 0)
{
return Read(section, key, Default.ToString()).ToShort(Default);
}
/// <summary>
/// 写整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, ushort value)
{
Write(section, key, value.ToString());
}
/// <summary>
/// 读整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public ushort ReadUShort(string section, string key, ushort Default = 0)
{
return Read(section, key, Default.ToString()).ToUShort(Default);
}
/// <summary>
/// 写整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, int value)
{
Write(section, key, value.ToString());
}
/// <summary>
/// 读整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public int ReadInt(string section, string key, int Default = 0)
{
return Read(section, key, Default.ToString()).ToInt(Default);
}
/// <summary>
/// 写整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, uint value)
{
Write(section, key, value.ToString());
}
/// <summary>
/// 读整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public uint ReadUInt(string section, string key, uint Default = 0)
{
return Read(section, key, Default.ToString()).ToUInt(Default);
}
/// <summary>
/// 写整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, ulong value)
{
Write(section, key, value.ToString());
}
/// <summary>
/// 读整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public ulong ReadULong(string section, string key, ulong Default = 0)
{
return Read(section, key, Default.ToString()).ToULong(Default);
}
/// <summary>
/// 写整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, long value)
{
Write(section, key, value.ToString());
}
/// <summary>
/// 读整数
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public long ReadLong(string section, string key, long Default = 0)
{
return Read(section, key, Default.ToString()).ToLong(Default);
}
/// <summary>
/// 写布尔
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, bool value)
{
Write(section, key, value ? bool.TrueString : bool.FalseString);
}
/// <summary>
/// 读布尔
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public bool ReadBool(string section, string key, bool Default = false)
{
string str = Read(section, key, Default.ToString());
if (string.Equals(str, bool.TrueString, StringComparison.CurrentCultureIgnoreCase))
{
return true;
}
if (string.Equals(str, bool.FalseString, StringComparison.CurrentCultureIgnoreCase))
{
return false;
}
return Default;
}
/// <summary>
/// 写Double
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, double value)
{
Write(section, key, value.ToString(CultureInfo.InvariantCulture));
}
/// <summary>
/// 读Double
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public double ReadDouble(string section, string key, double Default = 0)
{
return Read(section, key, Default.ToString(CultureInfo.InvariantCulture)).ToDouble(Default);
}
/// <summary>
/// 写Float
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, float value)
{
Write(section, key, value.ToString(CultureInfo.InvariantCulture));
}
/// <summary>
/// 读Float
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public float ReadFloat(string section, string key, float Default = 0)
{
return Read(section, key, Default.ToString(CultureInfo.InvariantCulture)).ToFloat(Default);
}
/// <summary>
/// 写Byte
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, byte value)
{
Write(section, key, value.ToString());
}
/// <summary>
/// 读Byte
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public byte ReadByte(string section, string key, byte Default = 0)
{
return Read(section, key, Default.ToString()).ToByte(Default);
}
/// <summary>
/// 写SByte
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, sbyte value)
{
Write(section, key, value.ToString());
}
/// <summary>
/// 读Byte
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public sbyte ReadSByte(string section, string key, sbyte Default = 0)
{
return Read(section, key, Default.ToString()).ToSByte(Default);
}
/// <summary>
/// 写DateTime
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, DateTime value)
{
Write(section, key, value.ToString(DateTimeEx.DateTimeFormat));
}
/// <summary>
/// 读DateTime
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public DateTime ReadDateTime(string section, string key, DateTime Default)
{
string str = Read(section, key, Default.ToString(CultureInfo.InvariantCulture));
try
{
return str.ToDateTime(DateTimeEx.DateTimeFormat);
}
catch (Exception)
{
return Default;
}
}
/// <summary>
/// 写Point
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, Point value)
{
Write(section, key, ConvertEx.ObjectToString(value, typeof(Point)));
}
/// <summary>
/// 读Point
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public Point ReadPoint(string section, string key, Point Default)
{
string str = Read(section, key, "");
return (Point)ConvertEx.StringToObject(str, typeof(Point), Default);
}
/// <summary>
/// 写PointF
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, PointF value)
{
Write(section, key, ConvertEx.ObjectToString(value, typeof(PointF)));
}
/// <summary>
/// 读PointF
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public PointF ReadPointF(string section, string key, PointF Default)
{
string str = Read(section, key, "");
return (PointF)ConvertEx.StringToObject(str, typeof(PointF), Default);
}
/// <summary>
/// 写Size
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, Size value)
{
Write(section, key, ConvertEx.ObjectToString(value, typeof(Size)));
}
/// <summary>
/// 读Size
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public Size ReadSize(string section, string key, Size Default)
{
string str = Read(section, key, "");
return (Size)ConvertEx.StringToObject(str, typeof(Size), Default);
}
/// <summary>
/// 写SizeF
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, SizeF value)
{
Write(section, key, ConvertEx.ObjectToString(value, typeof(SizeF)));
}
/// <summary>
/// 读SizeF
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public SizeF ReadSizeF(string section, string key, SizeF Default)
{
string str = Read(section, key, "");
return (SizeF)ConvertEx.StringToObject(str, typeof(SizeF), Default);
}
/// <summary>
/// 写Color
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="value">value</param>
public void Write(string section, string key, Color value)
{
Write(section, key, ConvertEx.ObjectToString(value, typeof(Color)));
}
/// <summary>
/// 读Color
/// </summary>
/// <param name="section">section</param>
/// <param name="key">key</param>
/// <param name="Default">Normal</param>
/// <returns>结果</returns>
public Color ReadColor(string section, string key, Color Default)
{
string str = Read(section, key, "");
return (Color)ConvertEx.StringToObject(str, typeof(Color), Default);
}
}
}

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,360 +0,0 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.Common.dll can be used for free under the MIT license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UIFormHelper.cs
* :
* : V3.1
* : 2020-01-01
*
* 2020-04-19: V2.2.0
* 2021-07-24: V3.0.5
******************************************************************************/
namespace Sunny.UI
{
/// <summary>
/// 多语言字符串定义
/// </summary>
public static class UILocalize
{
/// <summary>
/// 提示
/// </summary>
public static string InfoTitle = "提示";
/// <summary>
/// 正确
/// </summary>
public static string SuccessTitle = "正确";
/// <summary>
/// 警告
/// </summary>
public static string WarningTitle = "警告";
/// <summary>
/// 错误
/// </summary>
public static string ErrorTitle = "错误";
/// <summary>
/// 提示
/// </summary>
public static string AskTitle = "提示";
/// <summary>
/// 输入
/// </summary>
public static string InputTitle = "输入";
/// <summary>
/// 选择
/// </summary>
public static string SelectTitle = "选择";
/// <summary>
/// 全部关闭
/// </summary>
public static string CloseAll = "全部关闭";
/// <summary>
/// 确定
/// </summary>
public static string OK = "确定";
/// <summary>
/// 取消
/// </summary>
public static string Cancel = "取消";
/// <summary>
/// [ 无数据 ]
/// </summary>
public static string GridNoData = "[ 无数据 ]";
/// <summary>
/// 数据加载中,请稍候...
/// </summary>
public static string GridDataLoading = "数据加载中,请稍候...";
/// <summary>
/// 数据源必须为DataTable或者List
/// </summary>
public static string GridDataSourceException = "数据源必须为DataTable或者List";
/// <summary>
/// "系统正在处理中,请稍候..."
/// </summary>
public static string SystemProcessing = "系统正在处理中,请稍候...";
/// <summary>
/// 星期一
/// </summary>
public static string Monday = "一";
/// <summary>
/// 星期二
/// </summary>
public static string Tuesday = "二";
/// <summary>
/// 星期三
/// </summary>
public static string Wednesday = "三";
/// <summary>
/// 星期四
/// </summary>
public static string Thursday = "四";
/// <summary>
/// 星期五
/// </summary>
public static string Friday = "五";
/// <summary>
/// 星期六
/// </summary>
public static string Saturday = "六";
/// <summary>
/// 星期日
/// </summary>
public static string Sunday = "日";
/// <summary>
/// 上一页
/// </summary>
public static string Prev = "上一页";
/// <summary>
/// 下一页
/// </summary>
public static string Next = "下一页";
/// <summary>
/// 第
/// </summary>
public static string SelectPageLeft = "第";
/// <summary>
/// 页
/// </summary>
public static string SelectPageRight = "页";
/// <summary>
/// 一月
/// </summary>
public static string January = "一月";
/// <summary>
/// 二月
/// </summary>
public static string February = "二月";
/// <summary>
/// 三月
/// </summary>
public static string March = "三月";
/// <summary>
/// 四月
/// </summary>
public static string April = "四月";
/// <summary>
/// 五月
/// </summary>
public static string May = "五月";
/// <summary>
/// 六月
/// </summary>
public static string June = "六月";
/// <summary>
/// 七月
/// </summary>
public static string July = "七月";
/// <summary>
/// 八月
/// </summary>
public static string August = "八月";
/// <summary>
/// 九月
/// </summary>
public static string September = "九月";
/// <summary>
/// 十月
/// </summary>
public static string October = "十月";
/// <summary>
/// 十一月
/// </summary>
public static string November = "十一月";
/// <summary>
/// 十二月
/// </summary>
public static string December = "十二月";
/// <summary>
/// 今天
/// </summary>
public static string Today = "今天";
/// <summary>
/// 搜索
/// </summary>
public static string Search = "搜索";
/// <summary>
/// 清除
/// </summary>
public static string Clear = "清除";
public static string Open = "打开";
public static string Save = "保存";
public static string All = "全部";
}
/// <summary>
/// 多语言字符串帮助类
/// </summary>
public static class UILocalizeHelper
{
/// <summary>
/// 设置为英文
/// </summary>
public static void SetEN()
{
UILocalize.InfoTitle = "Info";
UILocalize.SuccessTitle = "Success";
UILocalize.WarningTitle = "Warning";
UILocalize.ErrorTitle = "Error";
UILocalize.AskTitle = "Query";
UILocalize.InputTitle = "Input";
UILocalize.SelectTitle = "Select";
UILocalize.CloseAll = "Close all";
UILocalize.OK = "OK";
UILocalize.Cancel = "Cancel";
UILocalize.GridNoData = "[ No data ]";
UILocalize.GridDataLoading = "Data loading, please wait...";
UILocalize.GridDataSourceException = "The data source must be DataTable or List";
UILocalize.SystemProcessing = "The system is processing, please wait...";
UILocalize.Monday = "MON";
UILocalize.Tuesday = "TUE";
UILocalize.Wednesday = "WED";
UILocalize.Thursday = "THU";
UILocalize.Friday = "FRI";
UILocalize.Saturday = "SAT";
UILocalize.Sunday = "SUN";
UILocalize.Prev = "Prev";
UILocalize.Next = "Next";
UILocalize.SelectPageLeft = "Page";
UILocalize.SelectPageRight = "";
UILocalize.January = "Jan.";
UILocalize.February = "Feb.";
UILocalize.March = "Mar.";
UILocalize.April = "Apr.";
UILocalize.May = "May";
UILocalize.June = "Jun.";
UILocalize.July = "Jul.";
UILocalize.August = "Aug.";
UILocalize.September = "Sep.";
UILocalize.October = "Oct.";
UILocalize.November = "Nov.";
UILocalize.December = "Dec.";
UILocalize.Today = "Today";
UILocalize.Search = "Search";
UILocalize.Clear = "Clear";
UILocalize.Open = "Open";
UILocalize.Save = "Save";
UILocalize.All = "All";
UIStyles.Translate();
}
/// <summary>
/// 设置为中文
/// </summary>
public static void SetCH()
{
UILocalize.InfoTitle = "提示";
UILocalize.SuccessTitle = "正确";
UILocalize.WarningTitle = "警告";
UILocalize.ErrorTitle = "错误";
UILocalize.AskTitle = "提示";
UILocalize.InputTitle = "输入";
UILocalize.SelectTitle = "选择";
UILocalize.CloseAll = "全部关闭";
UILocalize.OK = "确定";
UILocalize.Cancel = "取消";
UILocalize.GridNoData = "[ 无数据 ]";
UILocalize.GridDataLoading = "数据加载中,请稍候...";
UILocalize.GridDataSourceException = "数据源必须为DataTable或者List";
UILocalize.SystemProcessing = "系统正在处理中,请稍候...";
UILocalize.Monday = "一";
UILocalize.Tuesday = "二";
UILocalize.Wednesday = "三";
UILocalize.Thursday = "四";
UILocalize.Friday = "五";
UILocalize.Saturday = "六";
UILocalize.Sunday = "日";
UILocalize.Prev = "上一页";
UILocalize.Next = "下一页";
UILocalize.SelectPageLeft = "第";
UILocalize.SelectPageRight = "页";
UILocalize.January = "一月";
UILocalize.February = "二月";
UILocalize.March = "三月";
UILocalize.April = "四月";
UILocalize.May = "五月";
UILocalize.June = "六月";
UILocalize.July = "七月";
UILocalize.August = "八月";
UILocalize.September = "九月";
UILocalize.October = "十月";
UILocalize.November = "十一月";
UILocalize.December = "十二月";
UILocalize.Today = "今天";
UILocalize.Search = "搜索";
UILocalize.Clear = "清除";
UILocalize.Open = "打开";
UILocalize.Save = "保存";
UILocalize.All = "全部";
UIStyles.Translate();
}
}
}

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

203
SunnyUI/Common/UMapper.cs Normal file
View File

@ -0,0 +1,203 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2023 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.dll can be used for free under the GPL-3.0 license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UMapper.cs
* : StructList和数组
* : V3.1
* : 2021-09-30
*
* 2021-09-30: V3.0.7
******************************************************************************/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace Sunny.UI
{
/// <summary>
/// 轻量级的对象映射框架
/// </summary>
public static class Mapper
{
private static void Execute<T1, T2>(T1 source, T2 dest)
where T1 : class, new()
where T2 : class, new()
{
if (source == null || dest == null)
{
return;
}
var listSource = source.GetType().GetNeedProperties().ToDictionary(prop => prop.Name);
var listDest = dest.GetType().GetNeedProperties().ToDictionary(prop => prop.Name);
foreach (var item in listDest)
{
if (listSource.NotContainsKey(item.Key)) continue;
var sourceInfo = listSource[item.Key];
Type sourceType = sourceInfo.PropertyType;
object sourceValue = sourceInfo.GetValue(source, null);
var destInfo = item.Value;
Type destType = item.Value.PropertyType;
if (!sourceType.Equals(destType)) continue;
if (sourceType.IsValueType)
{
//Console.WriteLine("ValueType: " + item.Key + ", " + sourceType.FullName);
destInfo.SetValue(dest, sourceValue, null);
}
else
{
if (sourceType == typeof(string))
{
//Console.WriteLine("String: " + item.Key + ", " + sourceType.FullName);
destInfo.SetValue(dest, sourceValue, null);
continue;
}
if (sourceType.IsList())
{
//Console.WriteLine("List: " + item.Key + ", " + sourceType.FullName);
Type[] sourceTypes = sourceType.GetGenericArguments();
Type[] destTypes = destType.GetGenericArguments();
if (sourceTypes.Length != 1) continue;
if (destTypes.Length != 1) continue;
if (!sourceTypes[0].Equals(destTypes[0])) continue;
if (sourceValue == null)
{
destInfo.SetValue(dest, null, null);
}
else
{
Type typeDataList = typeof(List<>).MakeGenericType(destTypes[0]);
MethodInfo AddInfo = typeDataList.GetMethod("Add", BindingFlags.Public | BindingFlags.Instance);
if (AddInfo == null) continue;
if (sourceTypes[0].IsValueType || sourceTypes[0] == typeof(string))
{
object listvalue = typeDataList.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, new object[] { });
IEnumerable sourceList = sourceValue as IEnumerable;
foreach (var listItem in sourceList)
{
AddInfo.Invoke(listvalue, new[] { listItem });
}
destInfo.SetValue(dest, listvalue, null);
}
else
{
//暂时不考虑
}
}
continue;
}
if (sourceType.IsArray)
{
//Console.WriteLine("Array: " + item.Key + ", " + sourceType.FullName);
if (sourceValue == null)
{
destInfo.SetValue(dest, null, null);
}
else
{
ICollection sourceList = sourceValue as ICollection;
Type type = sourceType.GetElementType();
var array = Array.CreateInstance(type, sourceList.Count);
int index = 0;
foreach (var listItem in sourceList)
{
array.SetValue(listItem, index++);
}
destInfo.SetValue(dest, array, null);
}
continue;
}
if (sourceType.IsDictionary())
{
continue;
}
//类没有无参构造函数的话,创建有问题
//if (sourceType.IsClass)
//{
// if (sourceValue == null)
// {
// destInfo.SetValue(dest, null, null);
// }
// else
// {
// object obj = Activator.CreateInstance(sourceType, null);
// obj.MapperFrom(sourceValue);
// destInfo.SetValue(dest, obj, null);
// }
//
// continue;
//}
}
}
}
/// <summary>
/// T1映射到T2
/// </summary>
/// <typeparam name="T1">T1</typeparam>
/// <typeparam name="T2">T2</typeparam>
/// <param name="source">源</param>
/// <param name="dest">目标</param>
public static void MapperTo<T1, T2>(this T1 source, T2 dest)
where T1 : class, new()
where T2 : class, new()
{
Execute(source, dest);
}
/// <summary>
/// T1从T2映射
/// </summary>
/// <typeparam name="T1">T1</typeparam>
/// <typeparam name="T2">T2</typeparam>
/// <param name="source">源</param>
/// <param name="dest">目标</param>
public static void MapperFrom<T1, T2>(this T1 dest, T2 source)
where T1 : class, new()
where T2 : class, new()
{
Execute(source, dest);
}
/// <summary>
/// 获取数组的类类型
/// </summary>
/// <param name="t">类型</param>
/// <returns>类类型</returns>
public static Type GetArrayElementType(this Type t)
{
if (!t.IsArray) return null;
string name = t.FullName.Replace("[]", string.Empty);
return t.Assembly.GetType(name);
}
}
}

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -22,9 +22,9 @@
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.IO; using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Windows.Forms;
#pragma warning disable 1591 #pragma warning disable 1591
@ -32,7 +32,7 @@ namespace Sunny.UI
{ {
public class Thunder : IDisposable public class Thunder : IDisposable
{ {
private readonly Timer timer; private readonly System.Windows.Forms.Timer timer;
private bool Exit; private bool Exit;
public delegate void OnTaskInfoChange(object sender, ThunderTask task); public delegate void OnTaskInfoChange(object sender, ThunderTask task);
@ -52,7 +52,7 @@ namespace Sunny.UI
public Thunder() public Thunder()
{ {
InitSuccess = ThunderDll.Init(); InitSuccess = ThunderDll.Init();
timer = new Timer(); timer = new System.Windows.Forms.Timer();
timer.Interval = 1000; timer.Interval = 1000;
timer.Tick += Timer_Tick; timer.Tick += Timer_Tick;
timer.Start(); timer.Start();
@ -512,7 +512,7 @@ namespace Sunny.UI
public override string ToString() public override string ToString()
{ {
return Status.DisplayText() + ",已完成:" + (Percent * 100.0f).ToString("F2") + "%,速度:" + Speed + "KB/s"; return Status.Description() + ",已完成:" + (Percent * 100.0f).ToString("F2") + "%,速度:" + Speed + "KB/s";
} }
} }
@ -524,43 +524,43 @@ namespace Sunny.UI
/// <summary> /// <summary>
/// 无 /// 无
/// </summary> /// </summary>
[DisplayText("无")] [Description("无")]
NOITEM = 0, NOITEM = 0,
/// <summary> /// <summary>
/// 错误 /// 错误
/// </summary> /// </summary>
[DisplayText("错误")] [Description("错误")]
TSC_ERROR, TSC_ERROR,
/// <summary> /// <summary>
/// 暂停 /// 暂停
/// </summary> /// </summary>
[DisplayText("暂停")] [Description("暂停")]
TSC_PAUSE, TSC_PAUSE,
/// <summary> /// <summary>
/// 下载 /// 下载
/// </summary> /// </summary>
[DisplayText("下载中")] [Description("下载中")]
TSC_DOWNLOAD, TSC_DOWNLOAD,
/// <summary> /// <summary>
/// 完成 /// 完成
/// </summary> /// </summary>
[DisplayText("完成")] [Description("完成")]
TSC_COMPLETE, TSC_COMPLETE,
/// <summary> /// <summary>
/// 停止开始 /// 停止开始
/// </summary> /// </summary>
[DisplayText("已开始")] [Description("已开始")]
TSC_STARTENDING, TSC_STARTENDING,
/// <summary> /// <summary>
/// 停止完成 /// 停止完成
/// </summary> /// </summary>
[DisplayText("已停止")] [Description("已停止")]
TSC_STOPENDING TSC_STOPENDING
} }

View File

@ -1,34 +0,0 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.Common.dll can be used for free under the MIT license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UTranslate.cs
* :
* : V3.1
* : 2021-07-23
*
* 2021-07-23: V3.0.5
******************************************************************************/
namespace Sunny.UI
{
/// <summary>
/// 多语翻译接口
/// </summary>
public interface ITranslate
{
/// <summary>
/// 多语翻译接口
/// </summary>
void Translate();
}
}

View File

@ -0,0 +1,163 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2023 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.Common.dll can be used for free under the MIT license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UXmlConfig.cs
* : XML
* : V3.1
* : 2020-01-01
*
* 2020-01-01: V2.2.0
******************************************************************************/
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
namespace Sunny.UI
{
/// <summary>
/// XML 配置文件类
/// </summary>
/// <typeparam name="TConfig">类型</typeparam>
public class XmlConfig<TConfig> : BaseConfig<TConfig> where TConfig : XmlConfig<TConfig>, new()
{
#region
/// <summary>
/// 当前可执行文件路径,末尾包括\
/// </summary>
/// <returns>结果</returns>
private static string CurrentDir()
{
return Environment.CurrentDirectory.DealPath();
}
/// <summary>加载指定配置文件</summary>
/// <param name="filename">文件名</param>
/// <returns>结果</returns>
public override bool Load(string filename)
{
if (filename.IsNullOrWhiteSpace())
{
filename = CurrentDir() + ConfigFile;
}
if (filename.IsNullOrWhiteSpace())
{
throw new ApplicationException($"未指定{typeof(TConfig).Name}的配置文件路径!");
}
if (!File.Exists(filename))
{
return false;
}
try
{
ConcurrentDictionary<string, Ident> idents = ConfigHelper.InitIdents(current);
XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlElement root = doc.DocumentElement; //获取根节点
foreach (Ident ident in idents.Values)
{
if (root != null)
{
var elements = root.GetElementsByTagName(ident.Key);
if (elements.Count == 1)
{
if (ident.IsList)
{
ident.Values.Clear();
foreach (XmlNode node in elements[0].ChildNodes)
{
ident.Values.Add(node.InnerText);
}
}
else
{
ident.Value = elements[0].InnerText;
}
}
}
}
ConfigHelper.LoadConfigValue(current, idents);
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
/// <summary>保存到配置文件中去</summary>
/// <param name="filename">文件名</param>
public override void Save(string filename)
{
if (filename.IsNullOrWhiteSpace())
{
filename = CurrentDir() + ConfigFile;
}
if (filename.IsNullOrWhiteSpace())
{
throw new ApplicationException($"未指定{typeof(TConfig).Name}的配置文件路径!");
}
ConcurrentDictionary<string, Ident> idents = ConfigHelper.InitIdents(current);
ConfigHelper.SaveConfigValue(Current, idents);
List<string> strs = new List<string> { "<?xml version=" + "\"" + "1.0" + "\"" + " encoding=" + "\"" + "utf-8" + "\"" + "?> ", "<!--" + Description + "--> " };
strs.Add("<" + GetType().Name + ">");
SortedList<int, Ident> slist = new SortedList<int, Ident>();
foreach (var ident in idents.Values)
{
slist.Add(ident.Index, ident);
}
foreach (var ident in slist.Values)
{
if (!ident.Description.IsNullOrEmpty())
{
strs.Add(" <!--" + ident.Description + "-->");
}
if (!ident.IsList)
{
strs.Add(" <" + ident.Key + ">" + ident.Value + "</" + ident.Key + ">");
}
else
{
strs.Add(" <" + ident.Key + ">");
foreach (string value in ident.Values)
{
strs.Add(" <Value>" + value + "</Value>");
}
strs.Add(" </" + ident.Key + ">");
}
}
strs.Add("</" + GetType().Name + ">");
File.WriteAllLines(filename, strs.ToArray(), Encoding.UTF8);
}
#endregion
}
}

View File

@ -27,8 +27,8 @@ namespace Sunny.UI
public void Translate() public void Translate()
{ {
btnOK.Text = UILocalize.OK; btnOK.Text = UIStyles.CurrentResources.OK;
btnCancel.Text = UILocalize.Cancel; btnCancel.Text = UIStyles.CurrentResources.Cancel;
} }
private LabelRotate m_colorSample; private LabelRotate m_colorSample;
@ -49,441 +49,459 @@ namespace Sunny.UI
private void InitializeComponent() private void InitializeComponent()
{ {
this.m_colorTable = new Sunny.UI.UIColorTable(); m_colorTable = new UIColorTable();
this.m_colorSample = new Sunny.UI.LabelRotate(); m_colorSample = new LabelRotate();
this.edtA = new Sunny.UI.UITextBox(); edtA = new UITextBox();
this.edtR = new Sunny.UI.UITextBox(); edtR = new UITextBox();
this.edtG = new Sunny.UI.UITextBox(); edtG = new UITextBox();
this.edtB = new Sunny.UI.UITextBox(); edtB = new UITextBox();
this.lblA = new Sunny.UI.UILabel(); lblA = new UILabel();
this.lblR = new Sunny.UI.UILabel(); lblR = new UILabel();
this.lblG = new Sunny.UI.UILabel(); lblG = new UILabel();
this.lblB = new Sunny.UI.UILabel(); lblB = new UILabel();
this.m_colorWheel = new Sunny.UI.UIColorWheel(); m_colorWheel = new UIColorWheel();
this.m_colorBar = new Sunny.UI.HSLColorSlider(); m_colorBar = new HSLColorSlider();
this.m_opacitySlider = new Sunny.UI.ColorSlider(); m_opacitySlider = new ColorSlider();
this.btnOK = new Sunny.UI.UISymbolButton(); btnOK = new UISymbolButton();
this.btnCancel = new Sunny.UI.UISymbolButton(); btnCancel = new UISymbolButton();
this.SuspendLayout(); SuspendLayout();
// //
// m_colorTable // m_colorTable
// //
this.m_colorTable.BackColor = System.Drawing.Color.Transparent; m_colorTable.BackColor = Color.Transparent;
this.m_colorTable.Colors = new System.Drawing.Color[] { m_colorTable.Colors = new Color[]
System.Drawing.Color.Black, {
System.Drawing.Color.DarkGreen, Color.Black,
System.Drawing.Color.DarkSlateGray, Color.DarkGreen,
System.Drawing.Color.Purple, Color.DarkSlateGray,
System.Drawing.Color.Maroon, Color.Purple,
System.Drawing.Color.Teal, Color.Maroon,
System.Drawing.Color.Green, Color.Teal,
System.Drawing.Color.Olive, Color.Green,
System.Drawing.Color.Navy, Color.Olive,
System.Drawing.Color.Indigo, Color.Navy,
System.Drawing.Color.MidnightBlue, Color.Indigo,
System.Drawing.Color.DarkRed, Color.MidnightBlue,
System.Drawing.Color.DarkMagenta, Color.DarkRed,
System.Drawing.Color.DarkBlue, Color.DarkMagenta,
System.Drawing.Color.DarkCyan, Color.DarkBlue,
System.Drawing.Color.DarkOliveGreen, Color.DarkCyan,
System.Drawing.Color.SaddleBrown, Color.DarkOliveGreen,
System.Drawing.Color.ForestGreen, Color.SaddleBrown,
System.Drawing.Color.OliveDrab, Color.ForestGreen,
System.Drawing.Color.SeaGreen, Color.OliveDrab,
System.Drawing.Color.DarkGoldenrod, Color.SeaGreen,
System.Drawing.Color.DarkSlateBlue, Color.DarkGoldenrod,
System.Drawing.Color.MediumBlue, Color.DarkSlateBlue,
System.Drawing.Color.Sienna, Color.MediumBlue,
System.Drawing.Color.Brown, Color.Sienna,
System.Drawing.Color.DarkTurquoise, Color.Brown,
System.Drawing.Color.DimGray, Color.DarkTurquoise,
System.Drawing.Color.LightSeaGreen, Color.DimGray,
System.Drawing.Color.DarkViolet, Color.LightSeaGreen,
System.Drawing.Color.Firebrick, Color.DarkViolet,
System.Drawing.Color.MediumVioletRed, Color.Firebrick,
System.Drawing.Color.MediumSeaGreen, Color.MediumVioletRed,
System.Drawing.Color.Crimson, Color.MediumSeaGreen,
System.Drawing.Color.Chocolate, Color.Crimson,
System.Drawing.Color.MediumSpringGreen, Color.Chocolate,
System.Drawing.Color.Goldenrod, Color.MediumSpringGreen,
System.Drawing.Color.SteelBlue, Color.Goldenrod,
System.Drawing.Color.LawnGreen, Color.SteelBlue,
System.Drawing.Color.DarkOrchid, Color.LawnGreen,
System.Drawing.Color.Orange, Color.DarkOrchid,
System.Drawing.Color.LimeGreen, Color.Orange,
System.Drawing.Color.Yellow, Color.LimeGreen,
System.Drawing.Color.Gold, Color.Yellow,
System.Drawing.Color.Red, Color.Gold,
System.Drawing.Color.Magenta, Color.Red,
System.Drawing.Color.Lime, Color.Magenta,
System.Drawing.Color.SpringGreen, Color.Lime,
System.Drawing.Color.YellowGreen, Color.SpringGreen,
System.Drawing.Color.Chartreuse, Color.YellowGreen,
System.Drawing.Color.DeepSkyBlue, Color.Chartreuse,
System.Drawing.Color.Aqua, Color.DeepSkyBlue,
System.Drawing.Color.OrangeRed, Color.Aqua,
System.Drawing.Color.Blue, Color.OrangeRed,
System.Drawing.Color.DarkOrange, Color.Blue,
System.Drawing.Color.CadetBlue, Color.DarkOrange,
System.Drawing.Color.Cyan, Color.CadetBlue,
System.Drawing.Color.Fuchsia, Color.Cyan,
System.Drawing.Color.Gray, Color.Fuchsia,
System.Drawing.Color.SlateGray, Color.Gray,
System.Drawing.Color.Peru, Color.SlateGray,
System.Drawing.Color.BlueViolet, Color.Peru,
System.Drawing.Color.LightSlateGray, Color.BlueViolet,
System.Drawing.Color.DeepPink, Color.LightSlateGray,
System.Drawing.Color.MediumTurquoise, Color.DeepPink,
System.Drawing.Color.DodgerBlue, Color.MediumTurquoise,
System.Drawing.Color.Turquoise, Color.DodgerBlue,
System.Drawing.Color.RoyalBlue, Color.Turquoise,
System.Drawing.Color.SlateBlue, Color.RoyalBlue,
System.Drawing.Color.MediumOrchid, Color.SlateBlue,
System.Drawing.Color.DarkKhaki, Color.MediumOrchid,
System.Drawing.Color.IndianRed, Color.DarkKhaki,
System.Drawing.Color.GreenYellow, Color.IndianRed,
System.Drawing.Color.MediumAquamarine, Color.GreenYellow,
System.Drawing.Color.Tomato, Color.MediumAquamarine,
System.Drawing.Color.DarkSeaGreen, Color.Tomato,
System.Drawing.Color.Orchid, Color.DarkSeaGreen,
System.Drawing.Color.RosyBrown, Color.Orchid,
System.Drawing.Color.PaleVioletRed, Color.RosyBrown,
System.Drawing.Color.MediumPurple, Color.PaleVioletRed,
System.Drawing.Color.Coral, Color.MediumPurple,
System.Drawing.Color.CornflowerBlue, Color.Coral,
System.Drawing.Color.DarkGray, Color.CornflowerBlue,
System.Drawing.Color.SandyBrown, Color.DarkGray,
System.Drawing.Color.MediumSlateBlue, Color.SandyBrown,
System.Drawing.Color.Tan, Color.MediumSlateBlue,
System.Drawing.Color.DarkSalmon, Color.Tan,
System.Drawing.Color.BurlyWood, Color.DarkSalmon,
System.Drawing.Color.HotPink, Color.BurlyWood,
System.Drawing.Color.Salmon, Color.HotPink,
System.Drawing.Color.Violet, Color.Salmon,
System.Drawing.Color.LightCoral, Color.Violet,
System.Drawing.Color.SkyBlue, Color.LightCoral,
System.Drawing.Color.LightSalmon, Color.SkyBlue,
System.Drawing.Color.Khaki, Color.LightSalmon,
System.Drawing.Color.Plum, Color.Khaki,
System.Drawing.Color.LightGreen, Color.Plum,
System.Drawing.Color.Aquamarine, Color.LightGreen,
System.Drawing.Color.Silver, Color.Aquamarine,
System.Drawing.Color.LightSkyBlue, Color.Silver,
System.Drawing.Color.LightSteelBlue, Color.LightSkyBlue,
System.Drawing.Color.LightBlue, Color.LightSteelBlue,
System.Drawing.Color.PaleGreen, Color.LightBlue,
System.Drawing.Color.PowderBlue, Color.PaleGreen,
System.Drawing.Color.Thistle, Color.PowderBlue,
System.Drawing.Color.PaleGoldenrod, Color.Thistle,
System.Drawing.Color.PaleTurquoise, Color.PaleGoldenrod,
System.Drawing.Color.LightGray, Color.PaleTurquoise,
System.Drawing.Color.Wheat, Color.LightGray,
System.Drawing.Color.NavajoWhite, Color.Wheat,
System.Drawing.Color.Moccasin, Color.NavajoWhite,
System.Drawing.Color.LightPink, Color.Moccasin,
System.Drawing.Color.PeachPuff, Color.LightPink,
System.Drawing.Color.Gainsboro, Color.PeachPuff,
System.Drawing.Color.Pink, Color.Gainsboro,
System.Drawing.Color.Bisque, Color.Pink,
System.Drawing.Color.LightGoldenrodYellow, Color.Bisque,
System.Drawing.Color.LemonChiffon, Color.LightGoldenrodYellow,
System.Drawing.Color.BlanchedAlmond, Color.LemonChiffon,
System.Drawing.Color.Beige, Color.BlanchedAlmond,
System.Drawing.Color.AntiqueWhite, Color.Beige,
System.Drawing.Color.PapayaWhip, Color.AntiqueWhite,
System.Drawing.Color.Cornsilk, Color.PapayaWhip,
System.Drawing.Color.LightYellow, Color.Cornsilk,
System.Drawing.Color.LightCyan, Color.LightYellow,
System.Drawing.Color.Lavender, Color.LightCyan,
System.Drawing.Color.Linen, Color.Lavender,
System.Drawing.Color.MistyRose, Color.Linen,
System.Drawing.Color.OldLace, Color.MistyRose,
System.Drawing.Color.WhiteSmoke, Color.OldLace,
System.Drawing.Color.SeaShell, Color.WhiteSmoke,
System.Drawing.Color.Azure, Color.SeaShell,
System.Drawing.Color.Honeydew, Color.Azure,
System.Drawing.Color.Ivory, Color.Honeydew,
System.Drawing.Color.LavenderBlush, Color.Ivory,
System.Drawing.Color.FloralWhite, Color.LavenderBlush,
System.Drawing.Color.AliceBlue, Color.FloralWhite,
System.Drawing.Color.MintCream, Color.AliceBlue,
System.Drawing.Color.GhostWhite, Color.MintCream,
System.Drawing.Color.Snow, Color.GhostWhite,
System.Drawing.Color.White}; Color.Snow,
this.m_colorTable.Cols = 16; Color.White
this.m_colorTable.FieldSize = new System.Drawing.Size(12, 12); };
this.m_colorTable.FrameColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); m_colorTable.Cols = 16;
this.m_colorTable.Location = new System.Drawing.Point(10, 8); m_colorTable.FieldSize = new Size(12, 12);
this.m_colorTable.Name = "m_colorTable"; m_colorTable.FrameColor = Color.FromArgb(80, 160, 255);
this.m_colorTable.Padding = new System.Windows.Forms.Padding(8); m_colorTable.Location = new Point(10, 8);
this.m_colorTable.RotatePointAlignment = System.Drawing.ContentAlignment.MiddleCenter; m_colorTable.Name = "m_colorTable";
this.m_colorTable.SelectedItem = System.Drawing.Color.Black; m_colorTable.Padding = new System.Windows.Forms.Padding(8);
this.m_colorTable.Size = new System.Drawing.Size(253, 148); m_colorTable.RotatePointAlignment = ContentAlignment.MiddleCenter;
this.m_colorTable.Style = Sunny.UI.UIStyle.Custom; m_colorTable.SelectedItem = Color.Black;
this.m_colorTable.StyleCustomMode = false; m_colorTable.Size = new Size(253, 148);
this.m_colorTable.TabIndex = 0; m_colorTable.Style = UIStyle.Custom;
this.m_colorTable.TagString = null; m_colorTable.TabIndex = 0;
this.m_colorTable.Text = "colorTable1"; m_colorTable.Text = "colorTable1";
this.m_colorTable.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; m_colorTable.TextAlign = ContentAlignment.MiddleLeft;
this.m_colorTable.TextAngle = 0F; m_colorTable.TextAngle = 0F;
this.m_colorTable.SelectedIndexChanged += new System.EventHandler(this.m_colorTable_SelectedIndexChanged); m_colorTable.SelectedIndexChanged += m_colorTable_SelectedIndexChanged;
// //
// m_colorSample // m_colorSample
// //
this.m_colorSample.FrameColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); m_colorSample.FrameColor = Color.FromArgb(80, 160, 255);
this.m_colorSample.Location = new System.Drawing.Point(10, 163); m_colorSample.Location = new Point(10, 163);
this.m_colorSample.Name = "m_colorSample"; m_colorSample.Name = "m_colorSample";
this.m_colorSample.RotatePointAlignment = System.Drawing.ContentAlignment.MiddleCenter; m_colorSample.RotatePointAlignment = ContentAlignment.MiddleCenter;
this.m_colorSample.Size = new System.Drawing.Size(253, 26); m_colorSample.Size = new Size(253, 26);
this.m_colorSample.Style = Sunny.UI.UIStyle.Custom; m_colorSample.Style = UIStyle.Custom;
this.m_colorSample.StyleCustomMode = false; m_colorSample.TabIndex = 1;
this.m_colorSample.TabIndex = 1; m_colorSample.TabStop = false;
this.m_colorSample.TabStop = false; m_colorSample.TextAlign = ContentAlignment.MiddleLeft;
this.m_colorSample.TagString = null; m_colorSample.TextAngle = 0F;
this.m_colorSample.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; m_colorSample.Paint += m_colorSample_Paint;
this.m_colorSample.TextAngle = 0F; //
this.m_colorSample.Paint += new System.Windows.Forms.PaintEventHandler(this.m_colorSample_Paint);
//
// edtA // edtA
// //
this.edtA.Cursor = System.Windows.Forms.Cursors.IBeam; edtA.Cursor = System.Windows.Forms.Cursors.IBeam;
this.edtA.FillColor = System.Drawing.Color.White; edtA.Font = new Font("宋体", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
this.edtA.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); edtA.Location = new Point(29, 197);
this.edtA.Location = new System.Drawing.Point(29, 197); edtA.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.edtA.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); edtA.Maximum = 255D;
this.edtA.Maximum = 255D; edtA.Minimum = 0D;
this.edtA.Minimum = 0D; edtA.MinimumSize = new Size(1, 16);
this.edtA.Name = "edtA"; edtA.Name = "edtA";
this.edtA.Padding = new System.Windows.Forms.Padding(5); edtA.Padding = new System.Windows.Forms.Padding(5);
this.edtA.Size = new System.Drawing.Size(41, 26); edtA.ShowText = false;
this.edtA.Style = Sunny.UI.UIStyle.Custom; edtA.Size = new Size(41, 26);
this.edtA.TabIndex = 2; edtA.Style = UIStyle.Custom;
this.edtA.Text = "0"; edtA.TabIndex = 2;
this.edtA.Type = Sunny.UI.UITextBox.UIEditType.Integer; edtA.Text = "0";
// edtA.TextAlignment = ContentAlignment.MiddleLeft;
edtA.Type = UITextBox.UIEditType.Integer;
edtA.Watermark = "";
edtA.LostFocus += edtA_TextChanged;
//
// edtR // edtR
// //
this.edtR.Cursor = System.Windows.Forms.Cursors.IBeam; edtR.Cursor = System.Windows.Forms.Cursors.IBeam;
this.edtR.FillColor = System.Drawing.Color.White; edtR.Font = new Font("宋体", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
this.edtR.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); edtR.Location = new Point(93, 197);
this.edtR.Location = new System.Drawing.Point(93, 197); edtR.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.edtR.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); edtR.Maximum = 255D;
this.edtR.Maximum = 255D; edtR.Minimum = 0D;
this.edtR.Minimum = 0D; edtR.MinimumSize = new Size(1, 16);
this.edtR.Name = "edtR"; edtR.Name = "edtR";
this.edtR.Padding = new System.Windows.Forms.Padding(5); edtR.Padding = new System.Windows.Forms.Padding(5);
this.edtR.Size = new System.Drawing.Size(41, 26); edtR.ShowText = false;
this.edtR.Style = Sunny.UI.UIStyle.Custom; edtR.Size = new Size(41, 26);
this.edtR.TabIndex = 3; edtR.Style = UIStyle.Custom;
this.edtR.Text = "0"; edtR.TabIndex = 3;
this.edtR.Type = Sunny.UI.UITextBox.UIEditType.Integer; edtR.Text = "0";
// edtR.TextAlignment = ContentAlignment.MiddleLeft;
edtR.Type = UITextBox.UIEditType.Integer;
edtR.Watermark = "";
edtR.LostFocus += edtR_TextChanged;
//
// edtG // edtG
// //
this.edtG.Cursor = System.Windows.Forms.Cursors.IBeam; edtG.Cursor = System.Windows.Forms.Cursors.IBeam;
this.edtG.FillColor = System.Drawing.Color.White; edtG.Font = new Font("宋体", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
this.edtG.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); edtG.Location = new Point(158, 197);
this.edtG.Location = new System.Drawing.Point(158, 197); edtG.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.edtG.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); edtG.Maximum = 255D;
this.edtG.Maximum = 255D; edtG.Minimum = 0D;
this.edtG.Minimum = 0D; edtG.MinimumSize = new Size(1, 16);
this.edtG.Name = "edtG"; edtG.Name = "edtG";
this.edtG.Padding = new System.Windows.Forms.Padding(5); edtG.Padding = new System.Windows.Forms.Padding(5);
this.edtG.Size = new System.Drawing.Size(41, 26); edtG.ShowText = false;
this.edtG.Style = Sunny.UI.UIStyle.Custom; edtG.Size = new Size(41, 26);
this.edtG.TabIndex = 4; edtG.Style = UIStyle.Custom;
this.edtG.Text = "0"; edtG.TabIndex = 4;
this.edtG.Type = Sunny.UI.UITextBox.UIEditType.Integer; edtG.Text = "0";
// edtG.TextAlignment = ContentAlignment.MiddleLeft;
edtG.Type = UITextBox.UIEditType.Integer;
edtG.Watermark = "";
edtG.LostFocus += edtG_TextChanged;
//
// edtB // edtB
// //
this.edtB.Cursor = System.Windows.Forms.Cursors.IBeam; edtB.Cursor = System.Windows.Forms.Cursors.IBeam;
this.edtB.FillColor = System.Drawing.Color.White; edtB.Font = new Font("宋体", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
this.edtB.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); edtB.Location = new Point(222, 197);
this.edtB.Location = new System.Drawing.Point(222, 197); edtB.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.edtB.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); edtB.Maximum = 255D;
this.edtB.Maximum = 255D; edtB.Minimum = 0D;
this.edtB.Minimum = 0D; edtB.MinimumSize = new Size(1, 16);
this.edtB.Name = "edtB"; edtB.Name = "edtB";
this.edtB.Padding = new System.Windows.Forms.Padding(5); edtB.Padding = new System.Windows.Forms.Padding(5);
this.edtB.Size = new System.Drawing.Size(41, 26); edtB.ShowText = false;
this.edtB.Style = Sunny.UI.UIStyle.Custom; edtB.Size = new Size(41, 26);
this.edtB.TabIndex = 5; edtB.Style = UIStyle.Custom;
this.edtB.Text = "0"; edtB.TabIndex = 5;
this.edtB.Type = Sunny.UI.UITextBox.UIEditType.Integer; edtB.Text = "0";
// edtB.TextAlignment = ContentAlignment.MiddleLeft;
edtB.Type = UITextBox.UIEditType.Integer;
edtB.Watermark = "";
edtB.LostFocus += edtB_TextChanged;
//
// lblA // lblA
// //
this.lblA.AutoSize = true; lblA.AutoSize = true;
this.lblA.BackColor = System.Drawing.Color.Transparent; lblA.BackColor = Color.Transparent;
this.lblA.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); lblA.Font = new Font("宋体", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
this.lblA.Location = new System.Drawing.Point(9, 200); lblA.ForeColor = Color.FromArgb(48, 48, 48);
this.lblA.Name = "lblA"; lblA.Location = new Point(9, 200);
this.lblA.Size = new System.Drawing.Size(19, 20); lblA.Name = "lblA";
this.lblA.Style = Sunny.UI.UIStyle.Custom; lblA.Size = new Size(14, 14);
this.lblA.TabIndex = 6; lblA.Style = UIStyle.Custom;
this.lblA.Text = "A"; lblA.TabIndex = 6;
this.lblA.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; lblA.Text = "A";
// lblA.TextAlign = ContentAlignment.MiddleLeft;
//
// lblR // lblR
// //
this.lblR.AutoSize = true; lblR.AutoSize = true;
this.lblR.BackColor = System.Drawing.Color.Transparent; lblR.BackColor = Color.Transparent;
this.lblR.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); lblR.Font = new Font("宋体", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
this.lblR.Location = new System.Drawing.Point(74, 200); lblR.ForeColor = Color.FromArgb(48, 48, 48);
this.lblR.Name = "lblR"; lblR.Location = new Point(74, 200);
this.lblR.Size = new System.Drawing.Size(18, 20); lblR.Name = "lblR";
this.lblR.Style = Sunny.UI.UIStyle.Custom; lblR.Size = new Size(14, 14);
this.lblR.TabIndex = 7; lblR.Style = UIStyle.Custom;
this.lblR.Text = "R"; lblR.TabIndex = 7;
this.lblR.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; lblR.Text = "R";
// lblR.TextAlign = ContentAlignment.MiddleLeft;
//
// lblG // lblG
// //
this.lblG.AutoSize = true; lblG.AutoSize = true;
this.lblG.BackColor = System.Drawing.Color.Transparent; lblG.BackColor = Color.Transparent;
this.lblG.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); lblG.Font = new Font("宋体", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
this.lblG.Location = new System.Drawing.Point(138, 200); lblG.ForeColor = Color.FromArgb(48, 48, 48);
this.lblG.Name = "lblG"; lblG.Location = new Point(138, 200);
this.lblG.Size = new System.Drawing.Size(19, 20); lblG.Name = "lblG";
this.lblG.Style = Sunny.UI.UIStyle.Custom; lblG.Size = new Size(14, 14);
this.lblG.TabIndex = 8; lblG.Style = UIStyle.Custom;
this.lblG.Text = "G"; lblG.TabIndex = 8;
this.lblG.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; lblG.Text = "G";
// lblG.TextAlign = ContentAlignment.MiddleLeft;
//
// lblB // lblB
// //
this.lblB.AutoSize = true; lblB.AutoSize = true;
this.lblB.BackColor = System.Drawing.Color.Transparent; lblB.BackColor = Color.Transparent;
this.lblB.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); lblB.Font = new Font("宋体", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
this.lblB.Location = new System.Drawing.Point(203, 200); lblB.ForeColor = Color.FromArgb(48, 48, 48);
this.lblB.Name = "lblB"; lblB.Location = new Point(203, 200);
this.lblB.Size = new System.Drawing.Size(18, 20); lblB.Name = "lblB";
this.lblB.Style = Sunny.UI.UIStyle.Custom; lblB.Size = new Size(14, 14);
this.lblB.TabIndex = 9; lblB.Style = UIStyle.Custom;
this.lblB.Text = "B"; lblB.TabIndex = 9;
this.lblB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; lblB.Text = "B";
// lblB.TextAlign = ContentAlignment.MiddleLeft;
//
// m_colorWheel // m_colorWheel
// //
this.m_colorWheel.BackColor = System.Drawing.Color.Transparent; m_colorWheel.BackColor = Color.Transparent;
this.m_colorWheel.FrameColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); m_colorWheel.FrameColor = Color.FromArgb(80, 160, 255);
this.m_colorWheel.Location = new System.Drawing.Point(269, 8); m_colorWheel.Location = new Point(269, 8);
this.m_colorWheel.Name = "m_colorWheel"; m_colorWheel.Name = "m_colorWheel";
this.m_colorWheel.SelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(254)))), ((int)(((byte)(235)))), ((int)(((byte)(205))))); m_colorWheel.SelectedColor = Color.FromArgb(254, 235, 205);
this.m_colorWheel.Size = new System.Drawing.Size(148, 148); m_colorWheel.Size = new Size(148, 148);
this.m_colorWheel.Style = Sunny.UI.UIStyle.Custom; m_colorWheel.Style = UIStyle.Custom;
this.m_colorWheel.StyleCustomMode = false; m_colorWheel.TabIndex = 10;
this.m_colorWheel.TabIndex = 10; m_colorWheel.Text = "colorWheel1";
this.m_colorWheel.TagString = null; m_colorWheel.SelectedColorChanged += m_colorWheel_SelectedColorChanged;
this.m_colorWheel.Text = "colorWheel1"; //
this.m_colorWheel.SelectedColorChanged += new System.EventHandler(this.m_colorWheel_SelectedColorChanged);
//
// m_colorBar // m_colorBar
// //
this.m_colorBar.BackColor = System.Drawing.Color.Transparent; m_colorBar.BackColor = Color.Transparent;
this.m_colorBar.BarPadding = new System.Windows.Forms.Padding(12, 5, 32, 10); m_colorBar.BarPadding = new System.Windows.Forms.Padding(12, 5, 32, 10);
this.m_colorBar.Color1 = System.Drawing.Color.Black; m_colorBar.Color1 = Color.Black;
this.m_colorBar.Color2 = System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(127)))), ((int)(((byte)(127))))); m_colorBar.Color2 = Color.FromArgb(127, 127, 127);
this.m_colorBar.Color3 = System.Drawing.Color.White; m_colorBar.Color3 = Color.White;
this.m_colorBar.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); m_colorBar.Font = new Font("宋体", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
this.m_colorBar.FrameColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); m_colorBar.FrameColor = Color.FromArgb(80, 160, 255);
this.m_colorBar.Location = new System.Drawing.Point(422, 8); m_colorBar.Location = new Point(422, 8);
this.m_colorBar.Name = "m_colorBar"; m_colorBar.Name = "m_colorBar";
this.m_colorBar.NumberOfColors = Sunny.UI.ColorSlider.eNumberOfColors.Use3Colors; m_colorBar.NumberOfColors = ColorSlider.eNumberOfColors.Use3Colors;
this.m_colorBar.Orientation = System.Windows.Forms.Orientation.Vertical; m_colorBar.Orientation = System.Windows.Forms.Orientation.Vertical;
this.m_colorBar.Padding = new System.Windows.Forms.Padding(0, 0, 1, 0); m_colorBar.Padding = new System.Windows.Forms.Padding(0, 0, 1, 0);
this.m_colorBar.Percent = 0F; m_colorBar.Percent = 0F;
this.m_colorBar.RotatePointAlignment = System.Drawing.ContentAlignment.MiddleRight; m_colorBar.RotatePointAlignment = ContentAlignment.MiddleRight;
this.m_colorBar.Size = new System.Drawing.Size(45, 148); m_colorBar.Size = new Size(45, 148);
this.m_colorBar.Style = Sunny.UI.UIStyle.Custom; m_colorBar.Style = UIStyle.Custom;
this.m_colorBar.StyleCustomMode = false; m_colorBar.TabIndex = 11;
this.m_colorBar.TabIndex = 11; m_colorBar.Text = "Lightness";
this.m_colorBar.TagString = null; m_colorBar.TextAlign = ContentAlignment.BottomCenter;
this.m_colorBar.Text = "Lightness"; m_colorBar.TextAngle = 270F;
this.m_colorBar.TextAlign = System.Drawing.ContentAlignment.BottomCenter; m_colorBar.ValueOrientation = ColorSlider.eValueOrientation.MaxToMin;
this.m_colorBar.TextAngle = 270F; m_colorBar.SelectedValueChanged += m_colorBar_SelectedValueChanged;
this.m_colorBar.ValueOrientation = Sunny.UI.ColorSlider.eValueOrientation.MaxToMin; //
this.m_colorBar.SelectedValueChanged += new System.EventHandler(this.m_colorBar_SelectedValueChanged);
//
// m_opacitySlider // m_opacitySlider
// //
this.m_opacitySlider.BackColor = System.Drawing.Color.Transparent; m_opacitySlider.BackColor = Color.Transparent;
this.m_opacitySlider.BarPadding = new System.Windows.Forms.Padding(60, 12, 80, 25); m_opacitySlider.BarPadding = new System.Windows.Forms.Padding(60, 12, 80, 25);
this.m_opacitySlider.Color1 = System.Drawing.Color.White; m_opacitySlider.Color1 = Color.White;
this.m_opacitySlider.Color2 = System.Drawing.Color.Black; m_opacitySlider.Color2 = Color.Black;
this.m_opacitySlider.Color3 = System.Drawing.Color.Black; m_opacitySlider.Color3 = Color.Black;
this.m_opacitySlider.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); m_opacitySlider.Font = new Font("宋体", 9F, FontStyle.Regular, GraphicsUnit.Point, 0);
this.m_opacitySlider.ForeColor = System.Drawing.Color.Black; m_opacitySlider.ForeColor = Color.Black;
this.m_opacitySlider.FrameColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); m_opacitySlider.FrameColor = Color.FromArgb(80, 160, 255);
this.m_opacitySlider.Location = new System.Drawing.Point(269, 163); m_opacitySlider.Location = new Point(269, 163);
this.m_opacitySlider.Name = "m_opacitySlider"; m_opacitySlider.Name = "m_opacitySlider";
this.m_opacitySlider.NumberOfColors = Sunny.UI.ColorSlider.eNumberOfColors.Use2Colors; m_opacitySlider.NumberOfColors = ColorSlider.eNumberOfColors.Use2Colors;
this.m_opacitySlider.Orientation = System.Windows.Forms.Orientation.Horizontal; m_opacitySlider.Orientation = System.Windows.Forms.Orientation.Horizontal;
this.m_opacitySlider.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0); m_opacitySlider.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0);
this.m_opacitySlider.Percent = 1F; m_opacitySlider.Percent = 1F;
this.m_opacitySlider.RotatePointAlignment = System.Drawing.ContentAlignment.MiddleCenter; m_opacitySlider.RotatePointAlignment = ContentAlignment.MiddleCenter;
this.m_opacitySlider.Size = new System.Drawing.Size(198, 26); m_opacitySlider.Size = new Size(198, 26);
this.m_opacitySlider.Style = Sunny.UI.UIStyle.Custom; m_opacitySlider.Style = UIStyle.Custom;
this.m_opacitySlider.StyleCustomMode = false; m_opacitySlider.TabIndex = 1;
this.m_opacitySlider.TabIndex = 1; m_opacitySlider.Text = "Opacity";
this.m_opacitySlider.TagString = null; m_opacitySlider.TextAlign = ContentAlignment.MiddleLeft;
this.m_opacitySlider.Text = "Opacity"; m_opacitySlider.TextAngle = 0F;
this.m_opacitySlider.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; m_opacitySlider.ValueOrientation = ColorSlider.eValueOrientation.MinToMax;
this.m_opacitySlider.TextAngle = 0F; m_opacitySlider.SelectedValueChanged += m_opacitySlider_SelectedValueChanged;
this.m_opacitySlider.ValueOrientation = Sunny.UI.ColorSlider.eValueOrientation.MinToMax; //
this.m_opacitySlider.SelectedValueChanged += new System.EventHandler(this.m_opacitySlider_SelectedValueChanged);
//
// btnOK // btnOK
// //
this.btnOK.Cursor = System.Windows.Forms.Cursors.Hand; btnOK.Cursor = System.Windows.Forms.Cursors.Hand;
this.btnOK.Font = new System.Drawing.Font("宋体", 12F); btnOK.Font = new Font("宋体", 12F);
this.btnOK.Location = new System.Drawing.Point(269, 197); btnOK.Location = new Point(269, 197);
this.btnOK.Name = "btnOK"; btnOK.MinimumSize = new Size(1, 1);
this.btnOK.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(95, 26); btnOK.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
this.btnOK.Style = Sunny.UI.UIStyle.Custom; btnOK.Size = new Size(95, 26);
this.btnOK.TabIndex = 12; btnOK.Style = UIStyle.Custom;
this.btnOK.Text = "确定"; btnOK.SymbolOffset = new Point(0, 1);
this.btnOK.Click += new System.EventHandler(this.btnOK_Click); btnOK.TabIndex = 12;
// btnOK.Text = "确定";
btnOK.TipsFont = new Font("宋体", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
btnOK.Click += btnOK_Click;
//
// btnCancel // btnCancel
// //
this.btnCancel.Cursor = System.Windows.Forms.Cursors.Hand; btnCancel.Cursor = System.Windows.Forms.Cursors.Hand;
this.btnCancel.Font = new System.Drawing.Font("宋体", 12F); btnCancel.Font = new Font("宋体", 12F);
this.btnCancel.Location = new System.Drawing.Point(372, 197); btnCancel.Location = new Point(372, 197);
this.btnCancel.Name = "btnCancel"; btnCancel.MinimumSize = new Size(1, 1);
this.btnCancel.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(95, 26); btnCancel.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
this.btnCancel.Style = Sunny.UI.UIStyle.Custom; btnCancel.Size = new Size(95, 26);
this.btnCancel.Symbol = 61453; btnCancel.Style = UIStyle.Custom;
this.btnCancel.TabIndex = 13; btnCancel.Symbol = 361453;
this.btnCancel.Text = "取消"; btnCancel.SymbolOffset = new Point(0, 1);
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); btnCancel.TabIndex = 13;
// btnCancel.Text = "取消";
btnCancel.TipsFont = new Font("宋体", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
btnCancel.Click += btnCancel_Click;
//
// UIColorItem // UIColorItem
// //
this.Controls.Add(this.btnCancel); Controls.Add(btnCancel);
this.Controls.Add(this.btnOK); Controls.Add(btnOK);
this.Controls.Add(this.m_opacitySlider); Controls.Add(m_opacitySlider);
this.Controls.Add(this.m_colorBar); Controls.Add(m_colorBar);
this.Controls.Add(this.m_colorWheel); Controls.Add(m_colorWheel);
this.Controls.Add(this.lblB); Controls.Add(lblB);
this.Controls.Add(this.lblG); Controls.Add(lblG);
this.Controls.Add(this.lblR); Controls.Add(lblR);
this.Controls.Add(this.lblA); Controls.Add(lblA);
this.Controls.Add(this.edtB); Controls.Add(edtB);
this.Controls.Add(this.edtG); Controls.Add(edtG);
this.Controls.Add(this.edtR); Controls.Add(edtR);
this.Controls.Add(this.edtA); Controls.Add(edtA);
this.Controls.Add(this.m_colorSample); Controls.Add(m_colorSample);
this.Controls.Add(this.m_colorTable); Controls.Add(m_colorTable);
this.FillColor = System.Drawing.Color.White; FillColor = Color.White;
this.Name = "UIColorItem"; Name = "UIColorItem";
this.Size = new System.Drawing.Size(476, 233); Size = new Size(476, 233);
this.Style = Sunny.UI.UIStyle.Custom; Style = UIStyle.Custom;
this.ResumeLayout(false); ResumeLayout(false);
this.PerformLayout(); PerformLayout();
} }
private void m_colorTable_SelectedIndexChanged(object sender, EventArgs e) private void m_colorTable_SelectedIndexChanged(object sender, EventArgs e)
@ -524,6 +542,19 @@ namespace Sunny.UI
m_colorWheel.SetLightness(m_colorBar.SelectedHSLColor.Lightness); m_colorWheel.SetLightness(m_colorBar.SelectedHSLColor.Lightness);
} }
private void UpdateInfo()
{
Color c = Color.FromArgb((int)Math.Floor(255f * m_opacity), m_selectedColor);
string info = string.Format("{0} aRGB({1}, {2}, {3}, {4})", m_colorWheel.SelectedHSLColor.ToString(), c.A, c.R, c.G, c.B);
updateBox = true;
edtA.IntValue = c.A;
edtR.IntValue = c.R;
edtG.IntValue = c.G;
edtB.IntValue = c.B;
//m_infoLabel.Text = info;
updateBox = false;
}
private void m_opacitySlider_SelectedValueChanged(object sender, EventArgs e) private void m_opacitySlider_SelectedValueChanged(object sender, EventArgs e)
{ {
m_opacity = Math.Max(0, m_opacitySlider.Percent); m_opacity = Math.Max(0, m_opacitySlider.Percent);
@ -532,17 +563,6 @@ namespace Sunny.UI
UpdateInfo(); UpdateInfo();
} }
private void UpdateInfo()
{
Color c = Color.FromArgb((int)Math.Floor(255f * m_opacity), m_selectedColor);
string info = string.Format("{0} aRGB({1}, {2}, {3}, {4})", m_colorWheel.SelectedHSLColor.ToString(), c.A, c.R, c.G, c.B);
edtA.IntValue = c.A;
edtR.IntValue = c.R;
edtG.IntValue = c.G;
edtB.IntValue = c.B;
//m_infoLabel.Text = info;
}
private void m_colorWheel_SelectedColorChanged(object sender, EventArgs e) private void m_colorWheel_SelectedColorChanged(object sender, EventArgs e)
{ {
Color selcol = m_colorWheel.SelectedColor; Color selcol = m_colorWheel.SelectedColor;
@ -558,6 +578,8 @@ namespace Sunny.UI
UpdateInfo(); UpdateInfo();
} }
private bool updateBox = false;
private void btnCancel_Click(object sender, EventArgs e) private void btnCancel_Click(object sender, EventArgs e)
{ {
Close(); Close();
@ -609,5 +631,30 @@ namespace Sunny.UI
edtB.SetStyleColor(uiColor); edtB.SetStyleColor(uiColor);
lblA.ForeColor = lblR.ForeColor = lblG.ForeColor = lblB.ForeColor = uiColor.PanelForeColor; lblA.ForeColor = lblR.ForeColor = lblG.ForeColor = lblB.ForeColor = uiColor.PanelForeColor;
} }
private void edtR_TextChanged(object sender, EventArgs e)
{
if (updateBox) return;
SelectedColor = Color.FromArgb(SelectedColor.A, edtR.IntValue, SelectedColor.G, SelectedColor.B);
}
private void edtG_TextChanged(object sender, EventArgs e)
{
if (updateBox) return;
SelectedColor = Color.FromArgb(SelectedColor.A, SelectedColor.R, edtG.IntValue, SelectedColor.B);
}
private void edtB_TextChanged(object sender, EventArgs e)
{
if (updateBox) return;
SelectedColor = Color.FromArgb(SelectedColor.A, SelectedColor.R, SelectedColor.G, edtB.IntValue);
}
private void edtA_TextChanged(object sender, EventArgs e)
{
if (updateBox) return;
SelectedColor = Color.FromArgb(edtA.IntValue, SelectedColor);
UpdateInfo();
}
} }
} }

View File

@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader> <resheader name="version">2.0</resheader>
@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment> <comment>This is a comment</comment>
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->

View File

@ -28,38 +28,38 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
this.listBox = new Sunny.UI.UIListBox(); listBox = new UIListBox();
this.SuspendLayout(); SuspendLayout();
// //
// listBox // listBox
// //
this.listBox.BackColor = System.Drawing.Color.Transparent; listBox.BackColor = System.Drawing.Color.Transparent;
this.listBox.Dock = System.Windows.Forms.DockStyle.Fill; listBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.listBox.FillColor = System.Drawing.Color.White; listBox.FillColor = System.Drawing.Color.White;
this.listBox.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); listBox.Font = new System.Drawing.Font("宋体", 12F);
this.listBox.FormatString = ""; listBox.HoverColor = System.Drawing.Color.FromArgb(155, 200, 255);
this.listBox.ItemSelectForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); listBox.ItemSelectForeColor = System.Drawing.Color.FromArgb(235, 243, 255);
this.listBox.Location = new System.Drawing.Point(0, 0); listBox.Location = new System.Drawing.Point(0, 0);
this.listBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); listBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.listBox.MinimumSize = new System.Drawing.Size(1, 1); listBox.MinimumSize = new System.Drawing.Size(1, 1);
this.listBox.Name = "listBox"; listBox.Name = "listBox";
this.listBox.Padding = new System.Windows.Forms.Padding(2); listBox.Padding = new System.Windows.Forms.Padding(2);
this.listBox.Radius = 0; listBox.Radius = 0;
this.listBox.Size = new System.Drawing.Size(184, 210); listBox.ShowText = false;
this.listBox.TabIndex = 3; listBox.Size = new System.Drawing.Size(184, 210);
this.listBox.Text = null; listBox.TabIndex = 3;
this.listBox.Click += new System.EventHandler(this.ListBox_Click); listBox.Text = null;
this.listBox.SelectedIndexChanged += new System.EventHandler(this.listBox_SelectedIndexChanged); listBox.KeyDown += listBox_KeyDown;
this.listBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listBox_KeyDown); listBox.Click += ListBox_Click;
listBox.SelectedIndexChanged += listBox_SelectedIndexChanged;
// //
// UIComboBoxItem // UIComboBoxItem
// //
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.listBox); Controls.Add(listBox);
this.Name = "UIComboBoxItem"; Name = "UIComboBoxItem";
this.Size = new System.Drawing.Size(184, 210); Size = new System.Drawing.Size(184, 210);
this.ResumeLayout(false); ResumeLayout(false);
} }
#endregion #endregion

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -20,7 +20,6 @@
******************************************************************************/ ******************************************************************************/
using System; using System;
using System.Drawing;
namespace Sunny.UI namespace Sunny.UI
{ {
@ -53,24 +52,6 @@ namespace Sunny.UI
public event EventHandler BeforeListClick; public event EventHandler BeforeListClick;
/// <summary>
/// 设置边框颜色
/// </summary>
/// <param name="color">颜色</param>
public override void SetRectColor(Color color)
{
//listBox.ItemSelectBackColor = color;
}
/// <summary>
/// 设置填充颜色
/// </summary>
/// <param name="color">颜色</param>
public override void SetFillColor(Color color)
{
//ListBox.ItemSelectForeColor = color;
}
private void listBox_SelectedIndexChanged(object sender, EventArgs e) private void listBox_SelectedIndexChanged(object sender, EventArgs e)
{ {
DoValueChanged(this, ListBox.SelectedValue); DoValueChanged(this, ListBox.SelectedValue);
@ -83,5 +64,11 @@ namespace Sunny.UI
Close(); Close();
} }
} }
public override void SetStyleColor(UIBaseStyle uiColor)
{
base.SetStyleColor(uiColor);
listBox.SetStyleColor(uiColor);
}
} }
} }

View File

@ -1,4 +1,64 @@
<root> <?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -30,7 +30,7 @@ using System.Windows.Forms;
namespace Sunny.UI namespace Sunny.UI
{ {
public class UIComboDataGridViewItem : UIDropDownItem, ITranslate internal class UIComboDataGridViewItem : UIDropDownItem, ITranslate
{ {
private UIPanel panel; private UIPanel panel;
private UISymbolButton btnCancel; private UISymbolButton btnCancel;
@ -84,10 +84,10 @@ namespace Sunny.UI
public void Translate() public void Translate()
{ {
btnOK.Text = UILocalize.OK; btnOK.Text = UIStyles.CurrentResources.OK;
btnCancel.Text = UILocalize.Cancel; btnCancel.Text = UIStyles.CurrentResources.Cancel;
btnClear.Text = UILocalize.Clear; btnClear.Text = UIStyles.CurrentResources.Clear;
btnSearch.Text = UILocalize.Search; btnSearch.Text = UIStyles.CurrentResources.Search;
} }
public bool ShowButtons public bool ShowButtons
@ -102,11 +102,11 @@ namespace Sunny.UI
private void InitializeComponent() private void InitializeComponent()
{ {
DataGridViewCellStyle dataGridViewCellStyle1 = new DataGridViewCellStyle(); DataGridViewCellStyle dataGridViewCellStyle11 = new DataGridViewCellStyle();
DataGridViewCellStyle dataGridViewCellStyle2 = new DataGridViewCellStyle(); DataGridViewCellStyle dataGridViewCellStyle12 = new DataGridViewCellStyle();
DataGridViewCellStyle dataGridViewCellStyle3 = new DataGridViewCellStyle(); DataGridViewCellStyle dataGridViewCellStyle13 = new DataGridViewCellStyle();
DataGridViewCellStyle dataGridViewCellStyle4 = new DataGridViewCellStyle(); DataGridViewCellStyle dataGridViewCellStyle14 = new DataGridViewCellStyle();
DataGridViewCellStyle dataGridViewCellStyle5 = new DataGridViewCellStyle(); DataGridViewCellStyle dataGridViewCellStyle15 = new DataGridViewCellStyle();
panel = new UIPanel(); panel = new UIPanel();
btnCancel = new UISymbolButton(); btnCancel = new UISymbolButton();
btnOK = new UISymbolButton(); btnOK = new UISymbolButton();
@ -159,9 +159,11 @@ namespace Sunny.UI
btnCancel.Size = new System.Drawing.Size(80, 29); btnCancel.Size = new System.Drawing.Size(80, 29);
btnCancel.Style = UIStyle.Custom; btnCancel.Style = UIStyle.Custom;
btnCancel.StyleCustomMode = true; btnCancel.StyleCustomMode = true;
btnCancel.Symbol = 61453; btnCancel.Symbol = 361453;
btnCancel.SymbolOffset = new System.Drawing.Point(0, 1);
btnCancel.TabIndex = 1; btnCancel.TabIndex = 1;
btnCancel.Text = "取消"; btnCancel.Text = "取消";
btnCancel.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134);
btnCancel.Click += btnCancel_Click; btnCancel.Click += btnCancel_Click;
// //
// btnOK // btnOK
@ -173,33 +175,35 @@ namespace Sunny.UI
btnOK.MinimumSize = new System.Drawing.Size(1, 1); btnOK.MinimumSize = new System.Drawing.Size(1, 1);
btnOK.Name = "btnOK"; btnOK.Name = "btnOK";
btnOK.Size = new System.Drawing.Size(80, 29); btnOK.Size = new System.Drawing.Size(80, 29);
btnOK.SymbolOffset = new System.Drawing.Point(0, 1);
btnOK.TabIndex = 0; btnOK.TabIndex = 0;
btnOK.Text = "确定"; btnOK.Text = "确定";
btnOK.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134);
btnOK.Click += btnOK_Click; btnOK.Click += btnOK_Click;
// //
// dataGridView // dataGridView
// //
dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(243, 249, 255); dataGridViewCellStyle11.BackColor = System.Drawing.Color.FromArgb(243, 249, 255);
dataGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; dataGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle11;
dataGridView.BackgroundColor = System.Drawing.Color.FromArgb(243, 249, 255); dataGridView.BackgroundColor = System.Drawing.Color.FromArgb(243, 249, 255);
dataGridView.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; dataGridView.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
dataGridViewCellStyle2.Alignment = DataGridViewContentAlignment.MiddleCenter; dataGridViewCellStyle12.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(80, 160, 255); dataGridViewCellStyle12.BackColor = System.Drawing.Color.FromArgb(80, 160, 255);
dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 12F); dataGridViewCellStyle12.Font = new System.Drawing.Font("宋体", 12F);
dataGridViewCellStyle2.ForeColor = System.Drawing.Color.White; dataGridViewCellStyle12.ForeColor = System.Drawing.Color.White;
dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.FromArgb(80, 160, 255); dataGridViewCellStyle12.SelectionBackColor = System.Drawing.Color.FromArgb(80, 160, 255);
dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; dataGridViewCellStyle12.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle2.WrapMode = DataGridViewTriState.True; dataGridViewCellStyle12.WrapMode = DataGridViewTriState.True;
dataGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; dataGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle12;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewCellStyle3.Alignment = DataGridViewContentAlignment.MiddleLeft; dataGridViewCellStyle13.Alignment = DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; dataGridViewCellStyle13.BackColor = System.Drawing.Color.White;
dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 12F); dataGridViewCellStyle13.Font = new System.Drawing.Font("宋体", 12F);
dataGridViewCellStyle3.ForeColor = System.Drawing.Color.FromArgb(48, 48, 48); dataGridViewCellStyle13.ForeColor = System.Drawing.Color.FromArgb(48, 48, 48);
dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.FromArgb(220, 236, 255); dataGridViewCellStyle13.SelectionBackColor = System.Drawing.Color.FromArgb(220, 236, 255);
dataGridViewCellStyle3.SelectionForeColor = System.Drawing.Color.FromArgb(48, 48, 48); dataGridViewCellStyle13.SelectionForeColor = System.Drawing.Color.FromArgb(48, 48, 48);
dataGridViewCellStyle3.WrapMode = DataGridViewTriState.False; dataGridViewCellStyle13.WrapMode = DataGridViewTriState.False;
dataGridView.DefaultCellStyle = dataGridViewCellStyle3; dataGridView.DefaultCellStyle = dataGridViewCellStyle13;
dataGridView.Dock = DockStyle.Fill; dataGridView.Dock = DockStyle.Fill;
dataGridView.EnableHeadersVisualStyles = false; dataGridView.EnableHeadersVisualStyles = false;
dataGridView.Font = new System.Drawing.Font("宋体", 12F); dataGridView.Font = new System.Drawing.Font("宋体", 12F);
@ -207,19 +211,19 @@ namespace Sunny.UI
dataGridView.Location = new System.Drawing.Point(0, 44); dataGridView.Location = new System.Drawing.Point(0, 44);
dataGridView.MultiSelect = false; dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView"; dataGridView.Name = "dataGridView";
dataGridViewCellStyle4.Alignment = DataGridViewContentAlignment.MiddleLeft; dataGridViewCellStyle14.Alignment = DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle4.BackColor = System.Drawing.Color.FromArgb(243, 249, 255); dataGridViewCellStyle14.BackColor = System.Drawing.Color.FromArgb(243, 249, 255);
dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 12F); dataGridViewCellStyle14.Font = new System.Drawing.Font("宋体", 12F);
dataGridViewCellStyle4.ForeColor = System.Drawing.Color.FromArgb(48, 48, 48); dataGridViewCellStyle14.ForeColor = System.Drawing.Color.FromArgb(48, 48, 48);
dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.FromArgb(80, 160, 255); dataGridViewCellStyle14.SelectionBackColor = System.Drawing.Color.FromArgb(80, 160, 255);
dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.FromArgb(48, 48, 48); dataGridViewCellStyle14.SelectionForeColor = System.Drawing.Color.FromArgb(48, 48, 48);
dataGridViewCellStyle4.WrapMode = DataGridViewTriState.True; dataGridViewCellStyle14.WrapMode = DataGridViewTriState.True;
dataGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle4; dataGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle14;
dataGridViewCellStyle5.BackColor = System.Drawing.Color.White; dataGridViewCellStyle15.BackColor = System.Drawing.Color.White;
dataGridViewCellStyle5.ForeColor = System.Drawing.Color.FromArgb(48, 48, 48); dataGridViewCellStyle15.ForeColor = System.Drawing.Color.FromArgb(48, 48, 48);
dataGridViewCellStyle5.SelectionBackColor = System.Drawing.Color.FromArgb(220, 236, 255); dataGridViewCellStyle15.SelectionBackColor = System.Drawing.Color.FromArgb(220, 236, 255);
dataGridViewCellStyle5.SelectionForeColor = System.Drawing.Color.FromArgb(48, 48, 48); dataGridViewCellStyle15.SelectionForeColor = System.Drawing.Color.FromArgb(48, 48, 48);
dataGridView.RowsDefaultCellStyle = dataGridViewCellStyle5; dataGridView.RowsDefaultCellStyle = dataGridViewCellStyle15;
dataGridView.SelectedIndex = -1; dataGridView.SelectedIndex = -1;
dataGridView.Size = new System.Drawing.Size(569, 245); dataGridView.Size = new System.Drawing.Size(569, 245);
dataGridView.TabIndex = 3; dataGridView.TabIndex = 3;
@ -252,10 +256,12 @@ namespace Sunny.UI
btnClear.MinimumSize = new System.Drawing.Size(1, 1); btnClear.MinimumSize = new System.Drawing.Size(1, 1);
btnClear.Name = "btnClear"; btnClear.Name = "btnClear";
btnClear.Size = new System.Drawing.Size(80, 29); btnClear.Size = new System.Drawing.Size(80, 29);
btnClear.Symbol = 61666; btnClear.Symbol = 361666;
btnClear.SymbolOffset = new System.Drawing.Point(0, 1);
btnClear.SymbolSize = 22; btnClear.SymbolSize = 22;
btnClear.TabIndex = 2; btnClear.TabIndex = 2;
btnClear.Text = "清除"; btnClear.Text = "清除";
btnClear.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134);
btnClear.Click += btnClear_Click; btnClear.Click += btnClear_Click;
// //
// btnSearch // btnSearch
@ -267,9 +273,11 @@ namespace Sunny.UI
btnSearch.MinimumSize = new System.Drawing.Size(1, 1); btnSearch.MinimumSize = new System.Drawing.Size(1, 1);
btnSearch.Name = "btnSearch"; btnSearch.Name = "btnSearch";
btnSearch.Size = new System.Drawing.Size(80, 29); btnSearch.Size = new System.Drawing.Size(80, 29);
btnSearch.Symbol = 61442; btnSearch.Symbol = 361442;
btnSearch.SymbolOffset = new System.Drawing.Point(0, 1);
btnSearch.TabIndex = 1; btnSearch.TabIndex = 1;
btnSearch.Text = "搜索"; btnSearch.Text = "搜索";
btnSearch.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134);
btnSearch.Click += btnSearch_Click; btnSearch.Click += btnSearch_Click;
// //
// edtFilter // edtFilter

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
@ -48,7 +48,7 @@
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter

View File

@ -2,7 +2,7 @@
namespace Sunny.UI namespace Sunny.UI
{ {
public class UIComboTreeViewItem : UIDropDownItem, ITranslate internal class UIComboTreeViewItem : UIDropDownItem, ITranslate
{ {
private UIPanel panel; private UIPanel panel;
private UISymbolButton btnCancel; private UISymbolButton btnCancel;
@ -52,9 +52,9 @@ namespace Sunny.UI
public void Translate() public void Translate()
{ {
btnOK.Text = UILocalize.OK; btnOK.Text = UIStyles.CurrentResources.OK;
btnCancel.Text = UILocalize.Cancel; btnCancel.Text = UIStyles.CurrentResources.Cancel;
uiCheckBox1.Text = UILocalize.All; uiCheckBox1.Text = UIStyles.CurrentResources.All;
} }
private void InitializeComponent() private void InitializeComponent()
@ -78,6 +78,7 @@ namespace Sunny.UI
treeView.MinimumSize = new System.Drawing.Size(1, 1); treeView.MinimumSize = new System.Drawing.Size(1, 1);
treeView.Name = "treeView"; treeView.Name = "treeView";
treeView.RadiusSides = UICornerRadiusSides.None; treeView.RadiusSides = UICornerRadiusSides.None;
treeView.ScrollBarStyleInherited = false;
treeView.ShowText = false; treeView.ShowText = false;
treeView.Size = new System.Drawing.Size(250, 176); treeView.Size = new System.Drawing.Size(250, 176);
treeView.TabIndex = 0; treeView.TabIndex = 0;
@ -129,6 +130,7 @@ namespace Sunny.UI
btnCancel.Size = new System.Drawing.Size(80, 29); btnCancel.Size = new System.Drawing.Size(80, 29);
btnCancel.StyleCustomMode = true; btnCancel.StyleCustomMode = true;
btnCancel.Symbol = 361453; btnCancel.Symbol = 361453;
btnCancel.SymbolOffset = new System.Drawing.Point(0, 1);
btnCancel.SymbolSize = 22; btnCancel.SymbolSize = 22;
btnCancel.TabIndex = 1; btnCancel.TabIndex = 1;
btnCancel.Text = "取消"; btnCancel.Text = "取消";
@ -144,6 +146,7 @@ namespace Sunny.UI
btnOK.MinimumSize = new System.Drawing.Size(1, 1); btnOK.MinimumSize = new System.Drawing.Size(1, 1);
btnOK.Name = "btnOK"; btnOK.Name = "btnOK";
btnOK.Size = new System.Drawing.Size(80, 29); btnOK.Size = new System.Drawing.Size(80, 29);
btnOK.SymbolOffset = new System.Drawing.Point(0, 1);
btnOK.SymbolSize = 22; btnOK.SymbolSize = 22;
btnOK.TabIndex = 0; btnOK.TabIndex = 0;
btnOK.Text = "确定"; btnOK.Text = "确定";

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
@ -48,7 +48,7 @@
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -270,7 +270,7 @@ namespace Sunny.UI
tabPage3.Controls.Add(p3); tabPage3.Controls.Add(p3);
tabPage3.Location = new Point(0, 40); tabPage3.Location = new Point(0, 40);
tabPage3.Name = "tabPage3"; tabPage3.Name = "tabPage3";
tabPage3.Size = new Size(461, 277); tabPage3.Size = new Size(200, 60);
tabPage3.TabIndex = 2; tabPage3.TabIndex = 2;
tabPage3.Text = "tabPage3"; tabPage3.Text = "tabPage3";
tabPage3.UseVisualStyleBackColor = true; tabPage3.UseVisualStyleBackColor = true;
@ -285,7 +285,7 @@ namespace Sunny.UI
p3.MinimumSize = new Size(1, 1); p3.MinimumSize = new Size(1, 1);
p3.Name = "p3"; p3.Name = "p3";
p3.RadiusSides = UICornerRadiusSides.None; p3.RadiusSides = UICornerRadiusSides.None;
p3.Size = new Size(461, 277); p3.Size = new Size(200, 60);
p3.Style = UIStyle.Custom; p3.Style = UIStyle.Custom;
p3.TabIndex = 2; p3.TabIndex = 2;
p3.Text = null; p3.Text = null;
@ -382,18 +382,18 @@ namespace Sunny.UI
public void Translate() public void Translate()
{ {
months.Clear(); months.Clear();
months.Add(UILocalize.January); months.Add(UIStyles.CurrentResources.January);
months.Add(UILocalize.February); months.Add(UIStyles.CurrentResources.February);
months.Add(UILocalize.March); months.Add(UIStyles.CurrentResources.March);
months.Add(UILocalize.April); months.Add(UIStyles.CurrentResources.April);
months.Add(UILocalize.May); months.Add(UIStyles.CurrentResources.May);
months.Add(UILocalize.June); months.Add(UIStyles.CurrentResources.June);
months.Add(UILocalize.July); months.Add(UIStyles.CurrentResources.July);
months.Add(UILocalize.August); months.Add(UIStyles.CurrentResources.August);
months.Add(UILocalize.September); months.Add(UIStyles.CurrentResources.September);
months.Add(UILocalize.October); months.Add(UIStyles.CurrentResources.October);
months.Add(UILocalize.November); months.Add(UIStyles.CurrentResources.November);
months.Add(UILocalize.December); months.Add(UIStyles.CurrentResources.December);
} }
private void TopPanel_Click(object sender, EventArgs e) private void TopPanel_Click(object sender, EventArgs e)
@ -788,7 +788,7 @@ namespace Sunny.UI
int width = p3.Width / 7; int width = p3.Width / 7;
int height = (p3.Height - 30 * SizeMultiple) / 6; int height = (p3.Height - 30 * SizeMultiple) / 6;
using Font font = SizeMultiple == 1 ? this.Font : new Font(this.Font.FontFamily, this.Font.Size * 1.5f); using Font font = SizeMultiple == 1 ? this.Font : new Font(this.Font.FontFamily, this.Font.Size * 1.5f);
string[] weeks = { UILocalize.Sunday, UILocalize.Monday, UILocalize.Tuesday, UILocalize.Wednesday, UILocalize.Thursday, UILocalize.Friday, UILocalize.Saturday }; string[] weeks = { UIStyles.CurrentResources.Sunday, UIStyles.CurrentResources.Monday, UIStyles.CurrentResources.Tuesday, UIStyles.CurrentResources.Wednesday, UIStyles.CurrentResources.Thursday, UIStyles.CurrentResources.Friday, UIStyles.CurrentResources.Saturday };
for (int i = 0; i < weeks.Length; i++) for (int i = 0; i < weeks.Length; i++)
{ {
e.Graphics.DrawString(weeks[i], font, ForeColor, new Rectangle(width * i, 4 * SizeMultiple, width, 19 * SizeMultiple), ContentAlignment.MiddleCenter); e.Graphics.DrawString(weeks[i], font, ForeColor, new Rectangle(width * i, 4 * SizeMultiple, width, 19 * SizeMultiple), ContentAlignment.MiddleCenter);
@ -826,8 +826,8 @@ namespace Sunny.UI
{ {
using Font SubFont = this.Font.DPIScaleFont(SizeMultiple == 1 ? 10.5f : 15.75f); using Font SubFont = this.Font.DPIScaleFont(SizeMultiple == 1 ? 10.5f : 15.75f);
e.Graphics.FillRectangle(p3.FillColor, p3.Width - width * 4 + 1, p3.Height - height + 1, width * 4 - 2, height - 2); e.Graphics.FillRectangle(p3.FillColor, p3.Width - width * 4 + 1, p3.Height - height + 1, width * 4 - 2, height - 2);
e.Graphics.DrawString(UILocalize.Today + " " + DateTime.Now.DateString(), SubFont, isToday ? b3.SymbolColor : Color.DarkGray, new Rectangle(p3.Width - width * 4, p3.Height - height - 1, Width, height), ContentAlignment.MiddleLeft); e.Graphics.DrawString(UIStyles.CurrentResources.Today + " " + DateTime.Now.DateString(), SubFont, isToday ? b3.SymbolColor : Color.DarkGray, new Rectangle(p3.Width - width * 4, p3.Height - height - 1, Width, height), ContentAlignment.MiddleLeft);
SizeF sf = TextRenderer.MeasureText(UILocalize.Today, SubFont); SizeF sf = TextRenderer.MeasureText(UIStyles.CurrentResources.Today, SubFont);
e.Graphics.DrawRectangle(b3.SymbolColor, new Rectangle(p3.Width - width * 4 + 1, p3.Height - height + 1, (int)sf.Width - 2, height - 4)); e.Graphics.DrawRectangle(b3.SymbolColor, new Rectangle(p3.Width - width * 4 + 1, p3.Height - height + 1, (int)sf.Width - 2, height - 4));
} }
} }

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
@ -48,7 +48,7 @@
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -780,21 +780,21 @@ namespace Sunny.UI
public void Translate() public void Translate()
{ {
months.Clear(); months.Clear();
months.Add(UILocalize.January); months.Add(UIStyles.CurrentResources.January);
months.Add(UILocalize.February); months.Add(UIStyles.CurrentResources.February);
months.Add(UILocalize.March); months.Add(UIStyles.CurrentResources.March);
months.Add(UILocalize.April); months.Add(UIStyles.CurrentResources.April);
months.Add(UILocalize.May); months.Add(UIStyles.CurrentResources.May);
months.Add(UILocalize.June); months.Add(UIStyles.CurrentResources.June);
months.Add(UILocalize.July); months.Add(UIStyles.CurrentResources.July);
months.Add(UILocalize.August); months.Add(UIStyles.CurrentResources.August);
months.Add(UILocalize.September); months.Add(UIStyles.CurrentResources.September);
months.Add(UILocalize.October); months.Add(UIStyles.CurrentResources.October);
months.Add(UILocalize.November); months.Add(UIStyles.CurrentResources.November);
months.Add(UILocalize.December); months.Add(UIStyles.CurrentResources.December);
btnOK.Text = UILocalize.OK; btnOK.Text = UIStyles.CurrentResources.OK;
btnCancel.Text = UILocalize.Cancel; btnCancel.Text = UIStyles.CurrentResources.Cancel;
} }
private int activeDay = -1; private int activeDay = -1;
@ -834,7 +834,6 @@ namespace Sunny.UI
set set
{ {
date = value; date = value;
TabControl.SelectPage(2);
Year = date.Year; Year = date.Year;
Month = date.Month; Month = date.Month;
SetYearMonth(Year, Month); SetYearMonth(Year, Month);
@ -1267,7 +1266,7 @@ namespace Sunny.UI
int width = p3.Width / 7; int width = p3.Width / 7;
int height = (p3.Height - 30 * SizeMultiple) / 6; int height = (p3.Height - 30 * SizeMultiple) / 6;
using Font font = SizeMultiple == 1 ? this.Font : new Font(this.Font.FontFamily, this.Font.Size * 1.5f); using Font font = SizeMultiple == 1 ? this.Font : new Font(this.Font.FontFamily, this.Font.Size * 1.5f);
string[] weeks = { UILocalize.Sunday, UILocalize.Monday, UILocalize.Tuesday, UILocalize.Wednesday, UILocalize.Thursday, UILocalize.Friday, UILocalize.Saturday }; string[] weeks = { UIStyles.CurrentResources.Sunday, UIStyles.CurrentResources.Monday, UIStyles.CurrentResources.Tuesday, UIStyles.CurrentResources.Wednesday, UIStyles.CurrentResources.Thursday, UIStyles.CurrentResources.Friday, UIStyles.CurrentResources.Saturday };
for (int i = 0; i < weeks.Length; i++) for (int i = 0; i < weeks.Length; i++)
{ {
e.Graphics.DrawString(weeks[i], font, ForeColor, new Rectangle(width * i, 4 * SizeMultiple, width, 19 * SizeMultiple), ContentAlignment.MiddleCenter); e.Graphics.DrawString(weeks[i], font, ForeColor, new Rectangle(width * i, 4 * SizeMultiple, width, 19 * SizeMultiple), ContentAlignment.MiddleCenter);
@ -1303,8 +1302,8 @@ namespace Sunny.UI
{ {
using Font SubFont = this.Font.DPIScaleFont(SizeMultiple == 1 ? 10.5f : 15.75f); using Font SubFont = this.Font.DPIScaleFont(SizeMultiple == 1 ? 10.5f : 15.75f);
e.Graphics.FillRectangle(p3.FillColor, p3.Width - width * 4 + 1, p3.Height - height + 1, width * 4 - 2, height - 2); e.Graphics.FillRectangle(p3.FillColor, p3.Width - width * 4 + 1, p3.Height - height + 1, width * 4 - 2, height - 2);
e.Graphics.DrawString(UILocalize.Today + " " + DateTime.Now.DateString(), SubFont, isToday ? b3.SymbolColor : Color.DarkGray, new Rectangle(p3.Width - width * 4, p3.Height - height - 1, Width, height), ContentAlignment.MiddleLeft); e.Graphics.DrawString(UIStyles.CurrentResources.Today + " " + DateTime.Now.DateString(), SubFont, isToday ? b3.SymbolColor : Color.DarkGray, new Rectangle(p3.Width - width * 4, p3.Height - height - 1, Width, height), ContentAlignment.MiddleLeft);
SizeF sf = TextRenderer.MeasureText(UILocalize.Today, SubFont); SizeF sf = TextRenderer.MeasureText(UIStyles.CurrentResources.Today, SubFont);
e.Graphics.DrawRectangle(b3.SymbolColor, new Rectangle(p3.Width - width * 4 + 1, p3.Height - height + 1, (int)sf.Width - 2, height - 4)); e.Graphics.DrawRectangle(b3.SymbolColor, new Rectangle(p3.Width - width * 4 + 1, p3.Height - height + 1, (int)sf.Width - 2, height - 4));
} }
} }

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -89,6 +89,12 @@ namespace Sunny.UI
} }
} }
/// <summary>
/// 主题样式
/// </summary>
[DefaultValue(UIStyle.Inherited), Description("下拉框主题样式"), Category("SunnyUI")]
public UIStyle StyleDropDown { get; set; } = UIStyle.Inherited;
public override void SetDPIScale() public override void SetDPIScale()
{ {
base.SetDPIScale(); base.SetDPIScale();

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -3,7 +3,7 @@ using System.Drawing;
namespace Sunny.UI namespace Sunny.UI
{ {
public sealed class UINumPadItem : UIDropDownItem internal sealed class UINumPadItem : UIDropDownItem
{ {
public UINumPadItem() public UINumPadItem()
{ {

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -403,8 +403,8 @@ namespace Sunny.UI
public void Translate() public void Translate()
{ {
btnOK.Text = UILocalize.OK; btnOK.Text = UIStyles.CurrentResources.OK;
btnCancel.Text = UILocalize.Cancel; btnCancel.Text = UIStyles.CurrentResources.Cancel;
} }
public override void SetDPIScale() public override void SetDPIScale()

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,7 +1,7 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI * Gitee: https://gitee.com/yhuse/SunnyUI
@ -9,13 +9,13 @@
* *
* SunnyUI can be used for free under the GPL-3.0 license. * SunnyUI can be used for free under the GPL-3.0 license.
* If you use this code, please keep this note. * If you use this code, please keep this note.
* 使 * 使
****************************************************************************** ******************************************************************************
* : UIAnalogMeter.cs * : UIAnalogMeter.cs
* : * :
* : Luca Bonotto * : Luca Bonotto
* : CPOL * : CPOL
* : https://www.codeproject.com/Articles/24945/Analog-Meter * : https://www.codeproject.com/Articles/24945/Analog-Meter
******************************************************************************/ ******************************************************************************/
/* /*
@ -42,6 +42,7 @@ namespace Sunny.UI
[ToolboxItem(true)] [ToolboxItem(true)]
[DefaultEvent("ValueChanged")] [DefaultEvent("ValueChanged")]
[DefaultProperty("Value")] [DefaultProperty("Value")]
[Description("仪表控件")]
public class UIAnalogMeter : UIControl public class UIAnalogMeter : UIControl
{ {
#region Enumerator #region Enumerator
@ -320,9 +321,9 @@ namespace Sunny.UI
#region Events delegates #region Events delegates
/// <summary> /// <summary>
/// 重载控件尺寸变更 /// 重载控件尺寸变更
/// </summary> /// </summary>
/// <param name="e">参数</param> /// <param name="e">参数</param>
protected override void OnSizeChanged(EventArgs e) protected override void OnSizeChanged(EventArgs e)
{ {
base.OnSizeChanged(e); base.OnSizeChanged(e);
@ -333,9 +334,9 @@ namespace Sunny.UI
} }
/// <summary> /// <summary>
/// 重载绘图 /// 重载绘图
/// </summary> /// </summary>
/// <param name="e">绘图参数</param> /// <param name="e">绘图参数</param>
protected override void OnPaint(PaintEventArgs e) protected override void OnPaint(PaintEventArgs e)
{ {
if (Width <= 0 || Height <= 0) return; if (Width <= 0 || Height <= 0) return;

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse

View File

@ -1,6 +1,6 @@
/****************************************************************************** /******************************************************************************
* SunnyUI * SunnyUI
* CopyRight (C) 2012-2024 ShenYongHua(). * CopyRight (C) 2012-2025 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com * QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
* *
* Blog: https://www.cnblogs.com/yhuse * Blog: https://www.cnblogs.com/yhuse
@ -37,6 +37,7 @@ namespace Sunny.UI
[DefaultEvent("Click")] [DefaultEvent("Click")]
[DefaultProperty("Symbol")] [DefaultProperty("Symbol")]
[ToolboxItem(true)] [ToolboxItem(true)]
[Description("头像控件")]
public sealed class UIAvatar : UIControl, ISymbol, IZoomScale public sealed class UIAvatar : UIControl, ISymbol, IZoomScale
{ {
/// <summary> /// <summary>

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

Some files were not shown because too many files have changed in this diff Show More