diff --git a/Bin/SunnyUI.dll b/Bin/SunnyUI.dll
deleted file mode 100644
index 6116ec36..00000000
Binary files a/Bin/SunnyUI.dll and /dev/null differ
diff --git a/Bin/net40/SunnyUI.Common.dll b/Bin/net40/SunnyUI.Common.dll
new file mode 100644
index 00000000..c2fe506d
Binary files /dev/null and b/Bin/net40/SunnyUI.Common.dll differ
diff --git a/Bin/net40/SunnyUI.dll b/Bin/net40/SunnyUI.dll
new file mode 100644
index 00000000..bb9ccde8
Binary files /dev/null and b/Bin/net40/SunnyUI.dll differ
diff --git a/Bin/net40demo/SunnyUI.Common.dll b/Bin/net40demo/SunnyUI.Common.dll
new file mode 100644
index 00000000..c2fe506d
Binary files /dev/null and b/Bin/net40demo/SunnyUI.Common.dll differ
diff --git a/Bin/SunnyUI.Demo.exe b/Bin/net40demo/SunnyUI.Demo.exe
similarity index 65%
rename from Bin/SunnyUI.Demo.exe
rename to Bin/net40demo/SunnyUI.Demo.exe
index 597e4cfe..cd3f18f6 100644
Binary files a/Bin/SunnyUI.Demo.exe and b/Bin/net40demo/SunnyUI.Demo.exe differ
diff --git a/Bin/net40demo/SunnyUI.dll b/Bin/net40demo/SunnyUI.dll
new file mode 100644
index 00000000..db32e39b
Binary files /dev/null and b/Bin/net40demo/SunnyUI.dll differ
diff --git a/Bin/net5.0-demo/net5.0-windows/SunnyUI.Common.dll b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Common.dll
new file mode 100644
index 00000000..282a6864
Binary files /dev/null and b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Common.dll differ
diff --git a/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.deps.json b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.deps.json
new file mode 100644
index 00000000..125be8d1
--- /dev/null
+++ b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.deps.json
@@ -0,0 +1,59 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v5.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v5.0": {
+ "SunnyUI.Net5.Demo/3.0.0": {
+ "dependencies": {
+ "SunnyUI": "3.0.0"
+ },
+ "runtime": {
+ "SunnyUI.Net5.Demo.dll": {}
+ }
+ },
+ "SunnyUI/3.0.0": {
+ "dependencies": {
+ "SunnyUI.Common": "3.0.0"
+ },
+ "runtime": {
+ "lib/net5.0-windows7.0/SunnyUI.dll": {
+ "assemblyVersion": "3.0.0.0",
+ "fileVersion": "3.0.0.0"
+ }
+ }
+ },
+ "SunnyUI.Common/3.0.0": {
+ "runtime": {
+ "lib/net5.0/SunnyUI.Common.dll": {
+ "assemblyVersion": "3.0.0.0",
+ "fileVersion": "3.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "SunnyUI.Net5.Demo/3.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "SunnyUI/3.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-evxpOlq6cuG+Dv2sYm5Ssc22acA1HwGLRBg8wTPYHqeaKhwtlgPfXG10ZOsNUIHyBK4ZVfawUtm7iDQUEcU0Ew==",
+ "path": "sunnyui/3.0.0",
+ "hashPath": "sunnyui.3.0.0.nupkg.sha512"
+ },
+ "SunnyUI.Common/3.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ICXSap1LGOZtUH8bUTOEdRbukplX7c2LgqQfD4xbtfu6+/wz13KZxoZUDEq27K/GggfaISRqBUXGHZSxJtANGQ==",
+ "path": "sunnyui.common/3.0.0",
+ "hashPath": "sunnyui.common.3.0.0.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.dll b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.dll
new file mode 100644
index 00000000..f66a94ed
Binary files /dev/null and b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.dll differ
diff --git a/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.exe b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.exe
new file mode 100644
index 00000000..62a08fb3
Binary files /dev/null and b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.exe differ
diff --git a/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.runtimeconfig.dev.json b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.runtimeconfig.dev.json
new file mode 100644
index 00000000..376e9695
--- /dev/null
+++ b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.runtimeconfig.dev.json
@@ -0,0 +1,9 @@
+{
+ "runtimeOptions": {
+ "additionalProbingPaths": [
+ "C:\\Users\\Administrator\\.dotnet\\store\\|arch|\\|tfm|",
+ "C:\\Users\\Administrator\\.nuget\\packages",
+ "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.runtimeconfig.json b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.runtimeconfig.json
new file mode 100644
index 00000000..dae617c0
--- /dev/null
+++ b/Bin/net5.0-demo/net5.0-windows/SunnyUI.Net5.Demo.runtimeconfig.json
@@ -0,0 +1,9 @@
+{
+ "runtimeOptions": {
+ "tfm": "net5.0",
+ "framework": {
+ "name": "Microsoft.WindowsDesktop.App",
+ "version": "5.0.0"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Bin/net5.0-demo/net5.0-windows/SunnyUI.dll b/Bin/net5.0-demo/net5.0-windows/SunnyUI.dll
new file mode 100644
index 00000000..3cf221de
Binary files /dev/null and b/Bin/net5.0-demo/net5.0-windows/SunnyUI.dll differ
diff --git a/Bin/net5.0-demo/net5.0-windows/ref/SunnyUI.Net5.Demo.dll b/Bin/net5.0-demo/net5.0-windows/ref/SunnyUI.Net5.Demo.dll
new file mode 100644
index 00000000..a8f3ac43
Binary files /dev/null and b/Bin/net5.0-demo/net5.0-windows/ref/SunnyUI.Net5.Demo.dll differ
diff --git a/Bin/net5.0-windows/SunnyUI.deps.json b/Bin/net5.0-windows/SunnyUI.deps.json
new file mode 100644
index 00000000..60c66244
--- /dev/null
+++ b/Bin/net5.0-windows/SunnyUI.deps.json
@@ -0,0 +1,41 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v5.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v5.0": {
+ "SunnyUI/3.0.0": {
+ "dependencies": {
+ "SunnyUI.Common": "3.0.0"
+ },
+ "runtime": {
+ "SunnyUI.dll": {}
+ }
+ },
+ "SunnyUI.Common/3.0.0": {
+ "runtime": {
+ "lib/net5.0/SunnyUI.Common.dll": {
+ "assemblyVersion": "3.0.0.0",
+ "fileVersion": "3.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "SunnyUI/3.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "SunnyUI.Common/3.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ICXSap1LGOZtUH8bUTOEdRbukplX7c2LgqQfD4xbtfu6+/wz13KZxoZUDEq27K/GggfaISRqBUXGHZSxJtANGQ==",
+ "path": "sunnyui.common/3.0.0",
+ "hashPath": "sunnyui.common.3.0.0.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Bin/net5.0-windows/SunnyUI.dll b/Bin/net5.0-windows/SunnyUI.dll
new file mode 100644
index 00000000..53cb9383
Binary files /dev/null and b/Bin/net5.0-windows/SunnyUI.dll differ
diff --git a/Bin/net5.0-windows/ref/SunnyUI.dll b/Bin/net5.0-windows/ref/SunnyUI.dll
new file mode 100644
index 00000000..37d21c1e
Binary files /dev/null and b/Bin/net5.0-windows/ref/SunnyUI.dll differ
diff --git a/Bin/netcoreapp3.1/SunnyUI.deps.json b/Bin/netcoreapp3.1/SunnyUI.deps.json
new file mode 100644
index 00000000..b3e05ad4
--- /dev/null
+++ b/Bin/netcoreapp3.1/SunnyUI.deps.json
@@ -0,0 +1,41 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v3.1",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v3.1": {
+ "SunnyUI/3.0.0": {
+ "dependencies": {
+ "SunnyUI.Common": "3.0.0"
+ },
+ "runtime": {
+ "SunnyUI.dll": {}
+ }
+ },
+ "SunnyUI.Common/3.0.0": {
+ "runtime": {
+ "lib/netcoreapp3.1/SunnyUI.Common.dll": {
+ "assemblyVersion": "3.0.0.0",
+ "fileVersion": "3.0.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "SunnyUI/3.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "SunnyUI.Common/3.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ICXSap1LGOZtUH8bUTOEdRbukplX7c2LgqQfD4xbtfu6+/wz13KZxoZUDEq27K/GggfaISRqBUXGHZSxJtANGQ==",
+ "path": "sunnyui.common/3.0.0",
+ "hashPath": "sunnyui.common.3.0.0.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Bin/netcoreapp3.1/SunnyUI.dll b/Bin/netcoreapp3.1/SunnyUI.dll
new file mode 100644
index 00000000..cec8e1ed
Binary files /dev/null and b/Bin/netcoreapp3.1/SunnyUI.dll differ
diff --git a/SunnyUI.Demo/Program.cs b/SunnyUI.Demo/Program.cs
index 5b2bc4e0..8fadc715 100644
--- a/SunnyUI.Demo/Program.cs
+++ b/SunnyUI.Demo/Program.cs
@@ -3,17 +3,17 @@ using System.Windows.Forms;
namespace Sunny.UI.Demo
{
- internal static class Program
+ static class Program
{
///
/// 应用程序的主入口点。
///
[STAThread]
- private static void Main()
+ static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FMain());
}
}
-}
\ No newline at end of file
+}
diff --git a/SunnyUI.Demo/Properties/AssemblyInfo.cs b/SunnyUI.Demo/Properties/AssemblyInfo.cs
index 054225ee..9b06d420 100644
--- a/SunnyUI.Demo/Properties/AssemblyInfo.cs
+++ b/SunnyUI.Demo/Properties/AssemblyInfo.cs
@@ -1,15 +1,16 @@
using System.Reflection;
+using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
-[assembly: AssemblyTitle("Sunny.UI.Demo")]
+[assembly: AssemblyTitle("SunnyUI.Demo")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Sunny.UI.Demo")]
-[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyCompany("SunnyUI.Net")]
+[assembly: AssemblyProduct("SunnyUI.Demo")]
+[assembly: AssemblyCopyright("Copyright ©SunnyUI.Net 2012-2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -19,9 +20,9 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
-[assembly: Guid("17f96b36-7cae-4692-8b1f-b802482ecd09")]
+[assembly: Guid("17F96B36-7CAE-4692-8B1F-B802482ECD09")]
-// 程序集的版本信息由下列四个值组成:
+// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
@@ -31,5 +32,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
\ No newline at end of file
+[assembly: AssemblyVersion("3.0.0.0")]
+[assembly: AssemblyFileVersion("3.0.0.0")]
diff --git a/SunnyUI.Demo/Properties/Resources.Designer.cs b/SunnyUI.Demo/Properties/Resources.Designer.cs
index 88639d3e..abece634 100644
--- a/SunnyUI.Demo/Properties/Resources.Designer.cs
+++ b/SunnyUI.Demo/Properties/Resources.Designer.cs
@@ -47,8 +47,8 @@ namespace Sunny.UI.Demo.Properties {
}
///
- /// 重写当前线程的 CurrentUICulture 属性
- /// 重写当前线程的 CurrentUICulture 属性。
+ /// 重写当前线程的 CurrentUICulture 属性,对
+ /// 使用此强类型资源类的所有资源查找执行重写。
///
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
diff --git a/SunnyUI.Demo/Properties/Settings.Designer.cs b/SunnyUI.Demo/Properties/Settings.Designer.cs
index dc98ff7c..060e8035 100644
--- a/SunnyUI.Demo/Properties/Settings.Designer.cs
+++ b/SunnyUI.Demo/Properties/Settings.Designer.cs
@@ -12,7 +12,7 @@ namespace Sunny.UI.Demo.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.5.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
diff --git a/SunnyUI.Demo/Properties/Settings.settings b/SunnyUI.Demo/Properties/Settings.settings
index 292b6157..39645652 100644
--- a/SunnyUI.Demo/Properties/Settings.settings
+++ b/SunnyUI.Demo/Properties/Settings.settings
@@ -1,7 +1,7 @@
-
+
-
+
diff --git a/SunnyUI.Demo/SunnyUI.Demo.csproj b/SunnyUI.Demo/SunnyUI.Demo.csproj
index ce5804fb..b97c4c14 100644
--- a/SunnyUI.Demo/SunnyUI.Demo.csproj
+++ b/SunnyUI.Demo/SunnyUI.Demo.csproj
@@ -4,7 +4,7 @@
Debug
AnyCPU
- {17F96B36-7CAE-4692-8B1F-B802482ECD09}
+ {6AE19B87-C2AA-4C56-BC26-1C343F30FF58}
WinExe
Sunny.UI.Demo
SunnyUI.Demo
@@ -17,7 +17,7 @@
true
full
false
- ..\Bin\
+ ..\Bin\net40demo\
DEBUG;TRACE
prompt
4
@@ -25,8 +25,8 @@
AnyCPU
pdbonly
- false
- ..\Bin\
+ true
+ ..\Bin\net40demo\
TRACE
prompt
4
@@ -34,14 +34,22 @@
SunnyUI.ico
-
-
- False
- ..\Bin\SunnyUI.dll
+
+ ..\packages\SunnyUI.3.0.0\lib\net40\SunnyUI.dll
+
+
+ ..\packages\SunnyUI.Common.3.0.0\lib\net40\SunnyUI.Common.dll
+
+
+
+
+
+
+
@@ -71,6 +79,12 @@
FLineChart.cs
+
+ Form
+
+
+ FPieChart.cs
+
Form
@@ -89,12 +103,30 @@
FCheckBox.cs
+
+ Form
+
+
+ FCombobox.cs
+
+
+ Form
+
+
+ FContextMenuStrip.cs
+
Form
FDataGridView.cs
+
+ Form
+
+
+ FFlowLayoutPanel.cs
+
Form
@@ -107,119 +139,17 @@
FLine.cs
-
- Form
-
-
- FMeter.cs
-
-
- Form
-
-
- FPieChart.cs
-
-
- Form
-
-
- FTextBox.cs
-
Form
FListBox.cs
-
+
Form
-
- FContextMenuStrip.cs
-
-
- Form
-
-
- FCombobox.cs
-
-
- Form
-
-
- FFlowLayoutPanel.cs
-
-
- Form
-
-
- FLogin.cs
-
-
- Form
-
-
- FEdit.cs
-
-
- Form
-
-
- FEditor.cs
-
-
- Form
-
-
- FAsideHeaderMainFooter.cs
-
-
- Form
-
-
- FAsideHeaderMain.cs
-
-
- Form
-
-
- FAsideMain.cs
-
-
- Form
-
-
- FHeaderAsideMainFooter.cs
-
-
- Form
-
-
- FHeaderAsideMain.cs
-
-
- Form
-
-
- FHeaderMain.cs
-
-
- Form
-
-
- FMain.cs
-
-
- Form
-
-
- FFrames.cs
-
-
- Form
-
-
- FDialogs.cs
+
+ FMeter.cs
Form
@@ -227,6 +157,12 @@
FNavigation.cs
+
+ Form
+
+
+ FOther.cs
+
Form
@@ -239,6 +175,24 @@
FRadioButton.cs
+
+ Form
+
+
+ FScrollBar.cs
+
+
+ Form
+
+
+ FTabControl.cs
+
+
+ Form
+
+
+ FTextBox.cs
+
Form
@@ -251,17 +205,77 @@
FTreeView.cs
-
+
Form
-
- FOther.cs
+
+ FMain.cs
-
+
Form
-
- FTabControl.cs
+
+ FDialogs.cs
+
+
+ Form
+
+
+ FEdit.cs
+
+
+ Form
+
+
+ FEditor.cs
+
+
+ Form
+
+
+ FFrames.cs
+
+
+ Form
+
+
+ FLogin.cs
+
+
+ Form
+
+
+ FAsideHeaderMain.cs
+
+
+ Form
+
+
+ FAsideHeaderMainFooter.cs
+
+
+ Form
+
+
+ FAsideMain.cs
+
+
+ Form
+
+
+ FHeaderAsideMain.cs
+
+
+ Form
+
+
+ FHeaderAsideMainFooter.cs
+
+
+ Form
+
+
+ FHeaderMain.cs
Form
@@ -305,12 +319,6 @@
FTitlePage3.cs
-
- Form
-
-
- FScrollBar.cs
-
@@ -334,21 +342,15 @@
FCombobox.cs
-
- FMeter.cs
-
-
- FScrollBar.cs
-
-
- FTabControl.cs
-
-
- FTextBox.cs
+
+ FContextMenuStrip.cs
FDataGridView.cs
+
+ FFlowLayoutPanel.cs
+
FLabel.cs
@@ -358,63 +360,69 @@
FListBox.cs
-
- FContextMenuStrip.cs
-
-
- FFlowLayoutPanel.cs
-
-
- FLogin.cs
-
-
- FEdit.cs
-
-
- FEditor.cs
-
-
- FAsideHeaderMainFooter.cs
-
-
- FAsideHeaderMain.cs
-
-
- FAsideMain.cs
-
-
- FHeaderAsideMainFooter.cs
-
-
- FMain.cs
-
-
- FFrames.cs
-
-
- FDialogs.cs
+
+ FMeter.cs
FNavigation.cs
+
+ FOther.cs
+
FPanel.cs
FRadioButton.cs
+
+ FScrollBar.cs
+
+
+ FTabControl.cs
+
+
+ FTextBox.cs
+
FTransfer.cs
FTreeView.cs
-
- FOther.cs
+
+ FMain.cs
+
+
+ FDialogs.cs
+
+
+ FEdit.cs
+
+
+ FEditor.cs
+
+
+ FFrames.cs
+
+
+ FLogin.cs
+
+
+ FAsideHeaderMain.cs
+
+
+ FAsideHeaderMainFooter.cs
+
+
+ FAsideMain.cs
FHeaderAsideMain.cs
+
+ FHeaderAsideMainFooter.cs
+
FHeaderMain.cs
@@ -438,22 +446,22 @@
FTitlePage3.cs
- Designer
ResXFileCodeGenerator
- Designer
Resources.Designer.cs
+ Designer
+
+ True
+ Resources.resx
+ True
+
+
SettingsSingleFileGenerator
Settings.Designer.cs
-
- True
- True
- Resources.resx
-
True
Settings.settings
@@ -461,59 +469,160 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
diff --git a/SunnyUI.Demo/packages.config b/SunnyUI.Demo/packages.config
new file mode 100644
index 00000000..1f205d4f
--- /dev/null
+++ b/SunnyUI.Demo/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Charts/FBarChart.Designer.cs b/SunnyUI.Net5.Demo/Charts/FBarChart.Designer.cs
new file mode 100644
index 00000000..3663b5d0
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FBarChart.Designer.cs
@@ -0,0 +1,152 @@
+namespace Sunny.UI.Demo.Charts
+{
+ partial class FBarChart
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.BarChart = new Sunny.UI.UIBarChart();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiSymbolButton1 = new Sunny.UI.UISymbolButton();
+ this.uiImageButton3 = new Sunny.UI.UIImageButton();
+ this.uiImageButton2 = new Sunny.UI.UIImageButton();
+ this.uiImageButton1 = new Sunny.UI.UIImageButton();
+ this.PagePanel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiSymbolButton1);
+ this.PagePanel.Controls.Add(this.uiImageButton3);
+ this.PagePanel.Controls.Add(this.uiImageButton2);
+ this.PagePanel.Controls.Add(this.uiImageButton1);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.BarChart);
+ this.PagePanel.Size = new System.Drawing.Size(800, 528);
+ //
+ // BarChart
+ //
+ this.BarChart.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))));
+ this.BarChart.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.BarChart.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(54)))), ((int)(((byte)(54)))), ((int)(((byte)(54)))));
+ this.BarChart.Location = new System.Drawing.Point(30, 48);
+ this.BarChart.Name = "BarChart";
+ this.BarChart.Size = new System.Drawing.Size(670, 400);
+ this.BarChart.TabIndex = 0;
+ this.BarChart.Text = "uiBarChart1";
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 20;
+ this.uiLine1.Text = "UIBarChart";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiSymbolButton1
+ //
+ this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton1.Location = new System.Drawing.Point(348, 466);
+ this.uiSymbolButton1.Name = "uiSymbolButton1";
+ this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton1.Size = new System.Drawing.Size(100, 27);
+ this.uiSymbolButton1.Symbol = 61952;
+ this.uiSymbolButton1.TabIndex = 28;
+ this.uiSymbolButton1.Text = "数据";
+ this.uiSymbolButton1.Click += new System.EventHandler(this.uiSymbolButton1_Click);
+ //
+ // uiImageButton3
+ //
+ this.uiImageButton3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton3.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDarkStyle;
+ this.uiImageButton3.Location = new System.Drawing.Point(242, 466);
+ this.uiImageButton3.Name = "uiImageButton3";
+ this.uiImageButton3.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton3.TabIndex = 27;
+ this.uiImageButton3.TabStop = false;
+ this.uiImageButton3.Text = " Dark";
+ this.uiImageButton3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton3.Click += new System.EventHandler(this.uiImageButton3_Click);
+ //
+ // uiImageButton2
+ //
+ this.uiImageButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton2.Image = global::Sunny.UI.Demo.Properties.Resources.ChartPlainStyle;
+ this.uiImageButton2.Location = new System.Drawing.Point(136, 466);
+ this.uiImageButton2.Name = "uiImageButton2";
+ this.uiImageButton2.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton2.TabIndex = 26;
+ this.uiImageButton2.TabStop = false;
+ this.uiImageButton2.Text = " Plain";
+ this.uiImageButton2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton2.Click += new System.EventHandler(this.uiImageButton2_Click);
+ //
+ // uiImageButton1
+ //
+ this.uiImageButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton1.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDefaultStyle;
+ this.uiImageButton1.Location = new System.Drawing.Point(30, 466);
+ this.uiImageButton1.Name = "uiImageButton1";
+ this.uiImageButton1.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton1.TabIndex = 25;
+ this.uiImageButton1.TabStop = false;
+ this.uiImageButton1.Text = " Default";
+ this.uiImageButton1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton1.Click += new System.EventHandler(this.uiImageButton1_Click);
+ //
+ // FBarChart
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 563);
+ this.Name = "FBarChart";
+ this.Symbol = 61568;
+ this.Text = "BarChart";
+ this.PagePanel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UIBarChart BarChart;
+ private UILine uiLine1;
+ private UISymbolButton uiSymbolButton1;
+ private UIImageButton uiImageButton3;
+ private UIImageButton uiImageButton2;
+ private UIImageButton uiImageButton1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Charts/FBarChart.cs b/SunnyUI.Net5.Demo/Charts/FBarChart.cs
new file mode 100644
index 00000000..656f32f7
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FBarChart.cs
@@ -0,0 +1,78 @@
+using System.Drawing;
+
+namespace Sunny.UI.Demo.Charts
+{
+ public partial class FBarChart : UITitlePage
+ {
+ public FBarChart()
+ {
+ InitializeComponent();
+ }
+
+ private void uiSymbolButton1_Click(object sender, System.EventArgs e)
+ {
+ UIBarOption option = new UIBarOption();
+ option.Title = new UITitle();
+ option.Title.Text = "SunnyUI";
+ option.Title.SubText = "BarChart";
+
+ //设置Legend
+ option.Legend = new UILegend();
+ option.Legend.Orient = UIOrient.Horizontal;
+ option.Legend.Top = UITopAlignment.Top;
+ option.Legend.Left = UILeftAlignment.Left;
+ option.Legend.AddData("Bar1");
+ option.Legend.AddData("Bar2");
+
+ var series = new UIBarSeries();
+ series.Name = "Bar1";
+ series.AddData(1.1);
+ series.AddData(1.1);
+ series.AddData(1.1);
+ series.AddData(1.1);
+ series.AddData(1.1);
+ option.Series.Add(series);
+
+ series = new UIBarSeries();
+ series.Name = "Bar2";
+ series.AddData(1.1);
+ series.AddData(1.1);
+ series.AddData(1.1);
+ series.AddData(1.1);
+ series.AddData(1.1);
+ option.Series.Add(series);
+
+ option.XAxis.Data.Add("Mon");
+ option.XAxis.Data.Add("Tue");
+ option.XAxis.Data.Add("Wed");
+ option.XAxis.Data.Add("Thu");
+ option.XAxis.Data.Add("Fri");
+
+ option.ToolTip.Visible = true;
+ option.YAxis.Scale = true;
+
+ option.XAxis.Name = "日期";
+ option.YAxis.Name = "数值";
+
+ option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Red, Name = "上限", Value = 12 });
+ option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Gold, Name = "下限", Value = -20 });
+
+ BarChart.SetOption(option);
+ }
+
+ private void uiImageButton1_Click(object sender, System.EventArgs e)
+ {
+ BarChart.ChartStyleType = UIChartStyleType.Default;
+ }
+
+ private void uiImageButton2_Click(object sender, System.EventArgs e)
+ {
+ BarChart.ChartStyleType = UIChartStyleType.Plain;
+ }
+
+ private void uiImageButton3_Click(object sender, System.EventArgs e)
+ {
+ BarChart.ChartStyleType = UIChartStyleType.Dark;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Charts/FBarChartEx.Designer.cs b/SunnyUI.Net5.Demo/Charts/FBarChartEx.Designer.cs
new file mode 100644
index 00000000..8f857bb4
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FBarChartEx.Designer.cs
@@ -0,0 +1,173 @@
+namespace Sunny.UI.Demo
+{
+ partial class FBarChartEx
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiSymbolButton1 = new Sunny.UI.UISymbolButton();
+ this.uiImageButton3 = new Sunny.UI.UIImageButton();
+ this.uiImageButton2 = new Sunny.UI.UIImageButton();
+ this.uiImageButton1 = new Sunny.UI.UIImageButton();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.BarChart = new Sunny.UI.UIBarChartEx();
+ this.uiSymbolButton2 = new Sunny.UI.UISymbolButton();
+ this.PagePanel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiSymbolButton2);
+ this.PagePanel.Controls.Add(this.uiSymbolButton1);
+ this.PagePanel.Controls.Add(this.uiImageButton3);
+ this.PagePanel.Controls.Add(this.uiImageButton2);
+ this.PagePanel.Controls.Add(this.uiImageButton1);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.BarChart);
+ this.PagePanel.Size = new System.Drawing.Size(886, 508);
+ //
+ // uiSymbolButton1
+ //
+ this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton1.Location = new System.Drawing.Point(348, 466);
+ this.uiSymbolButton1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton1.Name = "uiSymbolButton1";
+ this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton1.Size = new System.Drawing.Size(100, 27);
+ this.uiSymbolButton1.Symbol = 61568;
+ this.uiSymbolButton1.TabIndex = 34;
+ this.uiSymbolButton1.Text = "数据";
+ this.uiSymbolButton1.Click += new System.EventHandler(this.uiSymbolButton1_Click);
+ //
+ // uiImageButton3
+ //
+ this.uiImageButton3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton3.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDarkStyle;
+ this.uiImageButton3.Location = new System.Drawing.Point(242, 466);
+ this.uiImageButton3.Name = "uiImageButton3";
+ this.uiImageButton3.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton3.TabIndex = 33;
+ this.uiImageButton3.TabStop = false;
+ this.uiImageButton3.Text = " Dark";
+ this.uiImageButton3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton3.Click += new System.EventHandler(this.uiImageButton3_Click);
+ //
+ // uiImageButton2
+ //
+ this.uiImageButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton2.Image = global::Sunny.UI.Demo.Properties.Resources.ChartPlainStyle;
+ this.uiImageButton2.Location = new System.Drawing.Point(136, 466);
+ this.uiImageButton2.Name = "uiImageButton2";
+ this.uiImageButton2.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton2.TabIndex = 32;
+ this.uiImageButton2.TabStop = false;
+ this.uiImageButton2.Text = " Plain";
+ this.uiImageButton2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton2.Click += new System.EventHandler(this.uiImageButton2_Click);
+ //
+ // uiImageButton1
+ //
+ this.uiImageButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton1.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDefaultStyle;
+ this.uiImageButton1.Location = new System.Drawing.Point(30, 466);
+ this.uiImageButton1.Name = "uiImageButton1";
+ this.uiImageButton1.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton1.TabIndex = 31;
+ this.uiImageButton1.TabStop = false;
+ this.uiImageButton1.Text = " Default";
+ this.uiImageButton1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton1.Click += new System.EventHandler(this.uiImageButton1_Click);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 30;
+ this.uiLine1.Text = "UIBarChartEx";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // BarChart
+ //
+ this.BarChart.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))));
+ this.BarChart.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.BarChart.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(54)))), ((int)(((byte)(54)))), ((int)(((byte)(54)))));
+ this.BarChart.Location = new System.Drawing.Point(30, 48);
+ this.BarChart.MinimumSize = new System.Drawing.Size(1, 1);
+ this.BarChart.Name = "BarChart";
+ this.BarChart.Size = new System.Drawing.Size(670, 400);
+ this.BarChart.TabIndex = 35;
+ this.BarChart.Text = "uiBarChartEx1";
+ //
+ // uiSymbolButton2
+ //
+ this.uiSymbolButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton2.Location = new System.Drawing.Point(456, 466);
+ this.uiSymbolButton2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton2.Name = "uiSymbolButton2";
+ this.uiSymbolButton2.Size = new System.Drawing.Size(100, 27);
+ this.uiSymbolButton2.Symbol = 61568;
+ this.uiSymbolButton2.TabIndex = 36;
+ this.uiSymbolButton2.Text = "数据";
+ this.uiSymbolButton2.Click += new System.EventHandler(this.uiSymbolButton2_Click);
+ //
+ // FBarChartEx
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(886, 543);
+ this.Name = "FBarChartEx";
+ this.Symbol = 61568;
+ this.Text = "BarChartEx";
+ this.PagePanel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UISymbolButton uiSymbolButton1;
+ private UIImageButton uiImageButton3;
+ private UIImageButton uiImageButton2;
+ private UIImageButton uiImageButton1;
+ private UILine uiLine1;
+ private UIBarChartEx BarChart;
+ private UISymbolButton uiSymbolButton2;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Charts/FBarChartEx.cs b/SunnyUI.Net5.Demo/Charts/FBarChartEx.cs
new file mode 100644
index 00000000..130cf964
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FBarChartEx.cs
@@ -0,0 +1,153 @@
+using System.Drawing;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FBarChartEx : UITitlePage
+ {
+ public FBarChartEx()
+ {
+ InitializeComponent();
+ }
+
+ private void uiImageButton1_Click(object sender, System.EventArgs e)
+ {
+ BarChart.ChartStyleType = UIChartStyleType.Default;
+ }
+
+ private void uiImageButton2_Click(object sender, System.EventArgs e)
+ {
+ BarChart.ChartStyleType = UIChartStyleType.Plain;
+ }
+
+ private void uiImageButton3_Click(object sender, System.EventArgs e)
+ {
+ BarChart.ChartStyleType = UIChartStyleType.Dark;
+ }
+
+ private void uiSymbolButton1_Click(object sender, System.EventArgs e)
+ {
+ UIBarOption option = new UIBarOption();
+
+ option.Grid.Bottom = 65;
+
+ option.Title = new UITitle();
+ option.Title.Text = "SunnyUI";
+ option.Title.SubText = "BarChartEx";
+
+ //设置Legend
+ option.Legend = new UILegend();
+ option.Legend.Orient = UIOrient.Horizontal;
+ option.Legend.Top = UITopAlignment.Top;
+ option.Legend.Left = UILeftAlignment.Left;
+ option.Legend.AddData("Bar1");
+ option.Legend.AddData("Bar2");
+ option.Legend.AddData("Bar3");
+
+ var series = new UIBarSeries();
+ series.Name = "Bar1";
+ series.ShowBarName = true;
+ series.ShowValue = true;
+ series.AddData("通道1", 1.1);
+ series.AddData("通道2", 1.5);
+ option.Series.Add(series);
+
+ series = new UIBarSeries();
+ series.Name = "Bar2";
+ series.ShowBarName = true;
+ series.ShowValue = true;
+ series.AddData("通道1", 2.2);
+ series.AddData("通道2", 2.8);
+ series.AddData("通道3", 2.5);
+ option.Series.Add(series);
+
+ series = new UIBarSeries();
+ series.Name = "Bar3";
+ series.ShowBarName = true;
+ series.ShowValue = true;
+ series.AddData("通道1", 0.7);
+ option.Series.Add(series);
+
+ option.XAxis.Data.Add("Mon");
+ option.XAxis.Data.Add("Tue");
+ option.XAxis.Data.Add("Wed");
+ option.XAxis.Data.Add("Thu");
+ option.XAxis.Data.Add("Fri");
+
+ option.ToolTip.Visible = true;
+ option.YAxis.Scale = true;
+
+ option.XAxis.Name = "";
+ option.YAxis.Name = "数值";
+
+ option.XAxis.AxisTick.Distance = 14;
+ option.XAxis.AxisLabel.Angle = 90;
+
+ option.FixedSeriesCount = 3;
+ option.AutoSizeBars = true;
+ option.AutoSizeBarsCompact = true;
+ option.AutoSizeBarsCompactValue = 0.8f;
+
+ option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Red, Name = "上限", Value = 12 });
+ option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Gold, Name = "下限", Value = -20 });
+
+ option.ToolTip.AxisPointer.Type = UIAxisPointerType.Shadow;
+ BarChart.SetOption(option);
+ }
+
+ private void uiSymbolButton2_Click(object sender, System.EventArgs e)
+ {
+ UIBarOption option = new UIBarOption();
+ option.Title = new UITitle();
+ option.Title.Text = "SunnyUI";
+ option.Title.SubText = "BarChartEx";
+
+ //设置Legend
+ option.Legend = new UILegend();
+ option.Legend.Orient = UIOrient.Horizontal;
+ option.Legend.Top = UITopAlignment.Top;
+ option.Legend.Left = UILeftAlignment.Left;
+ option.Legend.AddData("Bar1");
+ option.Legend.AddData("Bar2");
+ option.Legend.AddData("Bar3");
+
+ var series = new UIBarSeries();
+ series.ShowValue = true;
+ series.ShowValueFontSize = 6f;
+ series.MaxWidth = 22;
+ series.Name = "Bar1";
+ series.AddData(1);
+ option.Series.Add(series);
+
+ series = new UIBarSeries();
+ series.ShowValue = true;
+ series.ShowValueFontSize = 10.5f;
+ series.MaxWidth = 22;
+ series.Name = "Bar2";
+ series.AddData(2);
+ series.AddData(3);
+ option.Series.Add(series);
+
+ series = new UIBarSeries();
+ series.ShowValue = true;
+ series.ShowValueFontSize = 16f;
+ series.MaxWidth = 22;
+ series.Name = "Bar3";
+ series.AddData(4);
+ series.AddData(5);
+ series.AddData(6);
+ option.Series.Add(series);
+
+ option.XAxis.Data.Add("Mon");
+ option.XAxis.Data.Add("Tue");
+ option.XAxis.Data.Add("Wed");
+ option.XAxis.Data.Add("Thu");
+ option.XAxis.Data.Add("Fri");
+
+ option.ToolTip = new UIBarToolTip();
+ option.ToolTip.AxisPointer.Type = UIAxisPointerType.Shadow;
+ option.AutoSizeBarsCompact = true;
+ option.AutoSizeBarsCompactValue = 0.1f;
+ BarChart.SetOption(option);
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Charts/FBarChartEx.resx b/SunnyUI.Net5.Demo/Charts/FBarChartEx.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FBarChartEx.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Charts/FDoughnutChart.Designer.cs b/SunnyUI.Net5.Demo/Charts/FDoughnutChart.Designer.cs
new file mode 100644
index 00000000..a0209c22
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FDoughnutChart.Designer.cs
@@ -0,0 +1,152 @@
+namespace Sunny.UI.Demo.Charts
+{
+ partial class FDoughnutChart
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.DoughnutChart = new Sunny.UI.UIDoughnutChart();
+ this.uiSymbolButton1 = new Sunny.UI.UISymbolButton();
+ this.uiImageButton3 = new Sunny.UI.UIImageButton();
+ this.uiImageButton2 = new Sunny.UI.UIImageButton();
+ this.uiImageButton1 = new Sunny.UI.UIImageButton();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.PagePanel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiSymbolButton1);
+ this.PagePanel.Controls.Add(this.uiImageButton3);
+ this.PagePanel.Controls.Add(this.uiImageButton2);
+ this.PagePanel.Controls.Add(this.uiImageButton1);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.DoughnutChart);
+ this.PagePanel.Size = new System.Drawing.Size(800, 523);
+ //
+ // DoughnutChart
+ //
+ this.DoughnutChart.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))));
+ this.DoughnutChart.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.DoughnutChart.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(54)))), ((int)(((byte)(54)))), ((int)(((byte)(54)))));
+ this.DoughnutChart.Location = new System.Drawing.Point(30, 48);
+ this.DoughnutChart.Name = "DoughnutChart";
+ this.DoughnutChart.Size = new System.Drawing.Size(670, 400);
+ this.DoughnutChart.TabIndex = 0;
+ this.DoughnutChart.Text = "uiDoughnutChart1";
+ //
+ // uiSymbolButton1
+ //
+ this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton1.Location = new System.Drawing.Point(348, 466);
+ this.uiSymbolButton1.Name = "uiSymbolButton1";
+ this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton1.Size = new System.Drawing.Size(100, 27);
+ this.uiSymbolButton1.Symbol = 61952;
+ this.uiSymbolButton1.TabIndex = 33;
+ this.uiSymbolButton1.Text = "数据";
+ this.uiSymbolButton1.Click += new System.EventHandler(this.uiSymbolButton1_Click);
+ //
+ // uiImageButton3
+ //
+ this.uiImageButton3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton3.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDarkStyle;
+ this.uiImageButton3.Location = new System.Drawing.Point(242, 466);
+ this.uiImageButton3.Name = "uiImageButton3";
+ this.uiImageButton3.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton3.TabIndex = 32;
+ this.uiImageButton3.TabStop = false;
+ this.uiImageButton3.Text = " Dark";
+ this.uiImageButton3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton3.Click += new System.EventHandler(this.uiImageButton3_Click);
+ //
+ // uiImageButton2
+ //
+ this.uiImageButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton2.Image = global::Sunny.UI.Demo.Properties.Resources.ChartPlainStyle;
+ this.uiImageButton2.Location = new System.Drawing.Point(136, 466);
+ this.uiImageButton2.Name = "uiImageButton2";
+ this.uiImageButton2.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton2.TabIndex = 31;
+ this.uiImageButton2.TabStop = false;
+ this.uiImageButton2.Text = " Plain";
+ this.uiImageButton2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton2.Click += new System.EventHandler(this.uiImageButton2_Click);
+ //
+ // uiImageButton1
+ //
+ this.uiImageButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton1.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDefaultStyle;
+ this.uiImageButton1.Location = new System.Drawing.Point(30, 466);
+ this.uiImageButton1.Name = "uiImageButton1";
+ this.uiImageButton1.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton1.TabIndex = 30;
+ this.uiImageButton1.TabStop = false;
+ this.uiImageButton1.Text = " Default";
+ this.uiImageButton1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton1.Click += new System.EventHandler(this.uiImageButton1_Click);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 29;
+ this.uiLine1.Text = "UIDoughnutChart";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FDoughnutChart
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 558);
+ this.Name = "FDoughnutChart";
+ this.Symbol = 62056;
+ this.Text = "DoughnutChart";
+ this.PagePanel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UIDoughnutChart DoughnutChart;
+ private UISymbolButton uiSymbolButton1;
+ private UIImageButton uiImageButton3;
+ private UIImageButton uiImageButton2;
+ private UIImageButton uiImageButton1;
+ private UILine uiLine1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Charts/FDoughnutChart.cs b/SunnyUI.Net5.Demo/Charts/FDoughnutChart.cs
new file mode 100644
index 00000000..e80f447d
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FDoughnutChart.cs
@@ -0,0 +1,77 @@
+namespace Sunny.UI.Demo.Charts
+{
+ public partial class FDoughnutChart : UITitlePage
+ {
+ public FDoughnutChart()
+ {
+ InitializeComponent();
+ }
+
+ private void uiSymbolButton1_Click(object sender, System.EventArgs e)
+ {
+ var option = new UIDoughnutOption();
+
+ //设置Title
+ option.Title = new UITitle();
+ option.Title.Text = "SunnyUI";
+ option.Title.SubText = "Star";
+ option.Title.Left = UILeftAlignment.Center;
+
+ //设置ToolTip
+ option.ToolTip.Visible = true;
+
+ //设置Legend
+ option.Legend = new UILegend();
+ option.Legend.Orient = UIOrient.Vertical;
+ option.Legend.Top = UITopAlignment.Top;
+ option.Legend.Left = UILeftAlignment.Left;
+
+ option.Legend.AddData("2020-05-19");
+ option.Legend.AddData("2020-05-20");
+ option.Legend.AddData("2020-05-21");
+ option.Legend.AddData("2020-05-22");
+ option.Legend.AddData("2020-05-23");
+ option.Legend.AddData("2020-05-24");
+ option.Legend.AddData("2020-05-25");
+
+ //设置Series
+ var series = new UIDoughnutSeries();
+ series.Name = "Star count";
+ series.Center = new UICenter(50, 55);
+ series.Radius.Inner = 40;
+ series.Radius.Outer = 70;
+ series.Label.Show = true;
+ series.Label.Position = UIPieSeriesLabelPosition.Center;
+
+ //增加数据
+ series.AddData("2020-05-19", 38);
+ series.AddData("2020-05-20", 21);
+ series.AddData("2020-05-21", 11);
+ series.AddData("2020-05-22", 52);
+ series.AddData("2020-05-23", 23);
+ series.AddData("2020-05-24", 26);
+ series.AddData("2020-05-25", 27);
+
+ //增加Series
+ option.Series.Add(series);
+
+ //设置Option
+ DoughnutChart.SetOption(option);
+ }
+
+ private void uiImageButton1_Click(object sender, System.EventArgs e)
+ {
+ DoughnutChart.ChartStyleType = UIChartStyleType.Default;
+ }
+
+ private void uiImageButton2_Click(object sender, System.EventArgs e)
+ {
+ DoughnutChart.ChartStyleType = UIChartStyleType.Plain;
+ }
+
+ private void uiImageButton3_Click(object sender, System.EventArgs e)
+ {
+ DoughnutChart.ChartStyleType = UIChartStyleType.Dark;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Charts/FLineChart.Designer.cs b/SunnyUI.Net5.Demo/Charts/FLineChart.Designer.cs
new file mode 100644
index 00000000..d0e3cc76
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FLineChart.Designer.cs
@@ -0,0 +1,158 @@
+namespace Sunny.UI.Demo.Charts
+{
+ partial class FLineChart
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiSymbolButton1 = new Sunny.UI.UISymbolButton();
+ this.uiImageButton3 = new Sunny.UI.UIImageButton();
+ this.uiImageButton2 = new Sunny.UI.UIImageButton();
+ this.uiImageButton1 = new Sunny.UI.UIImageButton();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.LineChart = new Sunny.UI.UILineChart();
+ this.PagePanel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiSymbolButton1);
+ this.PagePanel.Controls.Add(this.uiImageButton3);
+ this.PagePanel.Controls.Add(this.uiImageButton2);
+ this.PagePanel.Controls.Add(this.uiImageButton1);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.LineChart);
+ this.PagePanel.Size = new System.Drawing.Size(800, 539);
+ //
+ // uiSymbolButton1
+ //
+ this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton1.Location = new System.Drawing.Point(348, 466);
+ this.uiSymbolButton1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton1.Name = "uiSymbolButton1";
+ this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton1.Size = new System.Drawing.Size(100, 27);
+ this.uiSymbolButton1.Symbol = 61952;
+ this.uiSymbolButton1.TabIndex = 34;
+ this.uiSymbolButton1.Text = "数据";
+ this.uiSymbolButton1.Click += new System.EventHandler(this.uiSymbolButton1_Click);
+ //
+ // uiImageButton3
+ //
+ this.uiImageButton3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton3.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDarkStyle;
+ this.uiImageButton3.Location = new System.Drawing.Point(242, 466);
+ this.uiImageButton3.Name = "uiImageButton3";
+ this.uiImageButton3.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton3.TabIndex = 33;
+ this.uiImageButton3.TabStop = false;
+ this.uiImageButton3.Text = " Dark";
+ this.uiImageButton3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton3.Click += new System.EventHandler(this.uiImageButton3_Click);
+ //
+ // uiImageButton2
+ //
+ this.uiImageButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton2.Image = global::Sunny.UI.Demo.Properties.Resources.ChartPlainStyle;
+ this.uiImageButton2.Location = new System.Drawing.Point(136, 466);
+ this.uiImageButton2.Name = "uiImageButton2";
+ this.uiImageButton2.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton2.TabIndex = 32;
+ this.uiImageButton2.TabStop = false;
+ this.uiImageButton2.Text = " Plain";
+ this.uiImageButton2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton2.Click += new System.EventHandler(this.uiImageButton2_Click);
+ //
+ // uiImageButton1
+ //
+ this.uiImageButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton1.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDefaultStyle;
+ this.uiImageButton1.Location = new System.Drawing.Point(30, 466);
+ this.uiImageButton1.Name = "uiImageButton1";
+ this.uiImageButton1.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton1.TabIndex = 31;
+ this.uiImageButton1.TabStop = false;
+ this.uiImageButton1.Text = " Default";
+ this.uiImageButton1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton1.Click += new System.EventHandler(this.uiImageButton1_Click);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 30;
+ this.uiLine1.Text = "UILineChart";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // LineChart
+ //
+ this.LineChart.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))));
+ this.LineChart.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.LineChart.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(54)))), ((int)(((byte)(54)))), ((int)(((byte)(54)))));
+ this.LineChart.Location = new System.Drawing.Point(30, 48);
+ this.LineChart.MinimumSize = new System.Drawing.Size(1, 1);
+ this.LineChart.Name = "LineChart";
+ this.LineChart.Size = new System.Drawing.Size(670, 400);
+ this.LineChart.TabIndex = 35;
+ this.LineChart.Text = "uiLineChart1";
+ this.LineChart.PointValue += new Sunny.UI.UILineChart.OnPointValue(this.LineChart_PointValue);
+ //
+ // FLineChart
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 574);
+ this.Name = "FLineChart";
+ this.Symbol = 61953;
+ this.Text = "LineChart";
+ this.PagePanel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UISymbolButton uiSymbolButton1;
+ private UIImageButton uiImageButton3;
+ private UIImageButton uiImageButton2;
+ private UIImageButton uiImageButton1;
+ private UILine uiLine1;
+ private UILineChart LineChart;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Charts/FLineChart.cs b/SunnyUI.Net5.Demo/Charts/FLineChart.cs
new file mode 100644
index 00000000..c720e6aa
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FLineChart.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Drawing;
+using System.Text;
+
+namespace Sunny.UI.Demo.Charts
+{
+ public partial class FLineChart : UITitlePage
+ {
+ public FLineChart()
+ {
+ InitializeComponent();
+ }
+
+ private void uiSymbolButton1_Click(object sender, EventArgs e)
+ {
+ UILineOption option = new UILineOption();
+ option.ToolTip.Visible = true;
+ option.Title = new UITitle();
+ option.Title.Text = "SunnyUI";
+ option.Title.SubText = "LineChart";
+
+ option.XAxisType = UIAxisType.DateTime;
+
+ var series = option.AddSeries(new UILineSeries("Line1"));
+ DateTime dt = new DateTime(2020, 10, 4);
+ series.Add(dt.AddHours(0), 1.2);
+ series.Add(dt.AddHours(1), 2.2);
+ series.Add(dt.AddHours(2), 3.2);
+ series.Add(dt.AddHours(3), 4.2);
+ series.Add(dt.AddHours(4), 3.2);
+ series.Add(dt.AddHours(5), 2.2);
+ series.Symbol = UILinePointSymbol.Square;
+ series.SymbolSize = 4;
+ series.SymbolLineWidth = 2;
+ series.SymbolColor = Color.Red;
+
+ series = option.AddSeries(new UILineSeries("Line2", Color.Lime));
+ series.Add(dt.AddHours(3), 3.3);
+ series.Add(dt.AddHours(4), 2.3);
+ series.Add(dt.AddHours(5), 2.3);
+ series.Add(dt.AddHours(6), 1.3);
+ series.Add(dt.AddHours(7), 2.3);
+ series.Add(dt.AddHours(8), 4.3);
+ series.Symbol = UILinePointSymbol.Star;
+ series.SymbolSize = 4;
+ series.SymbolLineWidth = 2;
+ series.SymbolColor = Color.Red;
+ series.Smooth = true;
+
+ option.GreaterWarningArea = new UILineWarningArea(3.5);
+ option.LessWarningArea = new UILineWarningArea(2.2, Color.Gold);
+
+ option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Red, Name = "上限", Value = 3.5 });
+ option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Gold, Name = "下限", Value = 2.2 });
+
+ option.XAxis.Name = "日期";
+ option.YAxis.Name = "数值";
+ option.XAxis.AxisLabel.DateTimeFormat = DateTimeEx.DateTimeFormat;
+
+ option.XAxisScaleLines.Add(new UIScaleLine() { Color = Color.Red, Name = dt.AddHours(3).DateTimeString(), Value = new DateTimeInt64(dt.AddHours(3)) });
+ option.XAxisScaleLines.Add(new UIScaleLine() { Color = Color.Red, Name = dt.AddHours(6).DateTimeString(), Value = new DateTimeInt64(dt.AddHours(6)) });
+
+ LineChart.SetOption(option);
+ }
+
+ private void uiImageButton1_Click(object sender, EventArgs e)
+ {
+ LineChart.ChartStyleType = UIChartStyleType.Default;
+ }
+
+ private void uiImageButton2_Click(object sender, EventArgs e)
+ {
+ LineChart.ChartStyleType = UIChartStyleType.Plain;
+ }
+
+ private void uiImageButton3_Click(object sender, EventArgs e)
+ {
+ LineChart.ChartStyleType = UIChartStyleType.Dark;
+ }
+
+ private void LineChart_PointValue(object sender, UILineSelectPoint[] points)
+ {
+ StringBuilder sb = new StringBuilder();
+ foreach (var point in points)
+ {
+ sb.Append(point.Name + ", " + point.Index + ", " + point.X + ", " + point.Y);
+ }
+
+ Console.WriteLine(sb.ToString());
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Charts/FLineChart.resx b/SunnyUI.Net5.Demo/Charts/FLineChart.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FLineChart.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Charts/FPieChart.Designer.cs b/SunnyUI.Net5.Demo/Charts/FPieChart.Designer.cs
new file mode 100644
index 00000000..d614c06f
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FPieChart.Designer.cs
@@ -0,0 +1,159 @@
+namespace Sunny.UI.Demo.Controls
+{
+ partial class FPieChart
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.PieChart = new Sunny.UI.UIPieChart();
+ this.uiSymbolButton1 = new Sunny.UI.UISymbolButton();
+ this.uiImageButton3 = new Sunny.UI.UIImageButton();
+ this.uiImageButton2 = new Sunny.UI.UIImageButton();
+ this.uiImageButton1 = new Sunny.UI.UIImageButton();
+ this.PagePanel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiSymbolButton1);
+ this.PagePanel.Controls.Add(this.uiImageButton3);
+ this.PagePanel.Controls.Add(this.uiImageButton2);
+ this.PagePanel.Controls.Add(this.uiImageButton1);
+ this.PagePanel.Controls.Add(this.PieChart);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Size = new System.Drawing.Size(828, 517);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 19;
+ this.uiLine1.Text = "UIPieChart";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // PieChart
+ //
+ this.PieChart.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))));
+ this.PieChart.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.PieChart.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(54)))), ((int)(((byte)(54)))), ((int)(((byte)(54)))));
+ this.PieChart.LegendFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.PieChart.Location = new System.Drawing.Point(30, 48);
+ this.PieChart.MinimumSize = new System.Drawing.Size(1, 1);
+ this.PieChart.Name = "PieChart";
+ this.PieChart.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None;
+ this.PieChart.Size = new System.Drawing.Size(670, 400);
+ this.PieChart.SubFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.PieChart.TabIndex = 20;
+ this.PieChart.Text = "uiPieChart1";
+ //
+ // uiSymbolButton1
+ //
+ this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton1.Location = new System.Drawing.Point(348, 466);
+ this.uiSymbolButton1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton1.Name = "uiSymbolButton1";
+ this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton1.Size = new System.Drawing.Size(100, 27);
+ this.uiSymbolButton1.Symbol = 61952;
+ this.uiSymbolButton1.TabIndex = 24;
+ this.uiSymbolButton1.Text = "数据";
+ this.uiSymbolButton1.Click += new System.EventHandler(this.uiSymbolButton1_Click);
+ //
+ // uiImageButton3
+ //
+ this.uiImageButton3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton3.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDarkStyle;
+ this.uiImageButton3.Location = new System.Drawing.Point(242, 466);
+ this.uiImageButton3.Name = "uiImageButton3";
+ this.uiImageButton3.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton3.TabIndex = 23;
+ this.uiImageButton3.TabStop = false;
+ this.uiImageButton3.Text = " Dark";
+ this.uiImageButton3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton3.Click += new System.EventHandler(this.uiImageButton3_Click);
+ //
+ // uiImageButton2
+ //
+ this.uiImageButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton2.Image = global::Sunny.UI.Demo.Properties.Resources.ChartPlainStyle;
+ this.uiImageButton2.Location = new System.Drawing.Point(136, 466);
+ this.uiImageButton2.Name = "uiImageButton2";
+ this.uiImageButton2.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton2.TabIndex = 22;
+ this.uiImageButton2.TabStop = false;
+ this.uiImageButton2.Text = " Plain";
+ this.uiImageButton2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton2.Click += new System.EventHandler(this.uiImageButton2_Click);
+ //
+ // uiImageButton1
+ //
+ this.uiImageButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton1.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDefaultStyle;
+ this.uiImageButton1.Location = new System.Drawing.Point(30, 466);
+ this.uiImageButton1.Name = "uiImageButton1";
+ this.uiImageButton1.Size = new System.Drawing.Size(100, 27);
+ this.uiImageButton1.TabIndex = 21;
+ this.uiImageButton1.TabStop = false;
+ this.uiImageButton1.Text = " Default";
+ this.uiImageButton1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiImageButton1.Click += new System.EventHandler(this.uiImageButton1_Click);
+ //
+ // FPieChart
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(828, 552);
+ this.Name = "FPieChart";
+ this.Symbol = 61952;
+ this.Text = "PieChart";
+ this.PagePanel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ private UILine uiLine1;
+ private UIPieChart PieChart;
+ private UIImageButton uiImageButton1;
+ private UIImageButton uiImageButton3;
+ private UIImageButton uiImageButton2;
+ private UISymbolButton uiSymbolButton1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Charts/FPieChart.cs b/SunnyUI.Net5.Demo/Charts/FPieChart.cs
new file mode 100644
index 00000000..93b5d661
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FPieChart.cs
@@ -0,0 +1,75 @@
+namespace Sunny.UI.Demo.Controls
+{
+ public partial class FPieChart : UITitlePage
+ {
+ public FPieChart()
+ {
+ InitializeComponent();
+ }
+
+ private void uiImageButton1_Click(object sender, System.EventArgs e)
+ {
+ PieChart.ChartStyleType = UIChartStyleType.Default;
+ }
+
+ private void uiImageButton2_Click(object sender, System.EventArgs e)
+ {
+ PieChart.ChartStyleType = UIChartStyleType.Plain;
+ }
+
+ private void uiImageButton3_Click(object sender, System.EventArgs e)
+ {
+ PieChart.ChartStyleType = UIChartStyleType.Dark;
+ }
+
+ private void uiSymbolButton1_Click(object sender, System.EventArgs e)
+ {
+ var option = new UIPieOption();
+
+ //设置Title
+ option.Title = new UITitle();
+ option.Title.Text = "SunnyUI";
+ option.Title.SubText = "Star";
+ option.Title.Left = UILeftAlignment.Center;
+
+ //设置ToolTip
+ option.ToolTip.Visible = true;
+
+ //设置Legend
+ option.Legend = new UILegend();
+ option.Legend.Orient = UIOrient.Vertical;
+ option.Legend.Top = UITopAlignment.Top;
+ option.Legend.Left = UILeftAlignment.Left;
+
+ option.Legend.AddData("2020-05-19");
+ option.Legend.AddData("2020-05-20");
+ option.Legend.AddData("2020-05-21");
+ option.Legend.AddData("2020-05-22");
+ option.Legend.AddData("2020-05-23");
+ option.Legend.AddData("2020-05-24");
+ option.Legend.AddData("2020-05-25");
+
+ //设置Series
+ var series = new UIPieSeries();
+ series.Name = "Star count";
+ series.Center = new UICenter(50, 55);
+ series.Radius = 70;
+ series.Label.Show = true;
+
+ //增加数据
+ series.AddData("2020-05-19", 38);
+ series.AddData("2020-05-20", 21);
+ series.AddData("2020-05-21", 11);
+ series.AddData("2020-05-22", 52);
+ series.AddData("2020-05-23", 23);
+ series.AddData("2020-05-24", 26);
+ series.AddData("2020-05-25", 27);
+
+ //增加Series
+ option.Series.Add(series);
+
+ //设置Option
+ PieChart.SetOption(option);
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Charts/FPieChart.resx b/SunnyUI.Net5.Demo/Charts/FPieChart.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Charts/FPieChart.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FAvatar.Designer.cs b/SunnyUI.Net5.Demo/Controls/FAvatar.Designer.cs
new file mode 100644
index 00000000..f42eb690
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FAvatar.Designer.cs
@@ -0,0 +1,230 @@
+namespace Sunny.UI.Demo
+{
+ partial class FAvatar
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiAvatar1 = new Sunny.UI.UIAvatar();
+ this.uiAvatar2 = new Sunny.UI.UIAvatar();
+ this.uiAvatar3 = new Sunny.UI.UIAvatar();
+ this.uiAvatar4 = new Sunny.UI.UIAvatar();
+ this.uiLabel1 = new Sunny.UI.UILabel();
+ this.uiLabel2 = new Sunny.UI.UILabel();
+ this.uiLabel3 = new Sunny.UI.UILabel();
+ this.uiLabel4 = new Sunny.UI.UILabel();
+ this.uiContextMenuStrip1 = new Sunny.UI.UIContextMenuStrip();
+ this.设置ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.更改密码ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
+ this.退出ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.PagePanel.SuspendLayout();
+ this.uiContextMenuStrip1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiLabel4);
+ this.PagePanel.Controls.Add(this.uiLabel3);
+ this.PagePanel.Controls.Add(this.uiLabel2);
+ this.PagePanel.Controls.Add(this.uiLabel1);
+ this.PagePanel.Controls.Add(this.uiAvatar4);
+ this.PagePanel.Controls.Add(this.uiAvatar3);
+ this.PagePanel.Controls.Add(this.uiAvatar2);
+ this.PagePanel.Controls.Add(this.uiAvatar1);
+ this.PagePanel.Text = "";
+ //
+ // uiAvatar1
+ //
+ this.uiAvatar1.AvatarSize = 55;
+ this.uiAvatar1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiAvatar1.Location = new System.Drawing.Point(102, 50);
+ this.uiAvatar1.Name = "uiAvatar1";
+ this.uiAvatar1.Size = new System.Drawing.Size(60, 60);
+ this.uiAvatar1.SymbolSize = 48;
+ this.uiAvatar1.TabIndex = 0;
+ this.uiAvatar1.Text = "uiAvatar1";
+ //
+ // uiAvatar2
+ //
+ this.uiAvatar2.AvatarSize = 55;
+ this.uiAvatar2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiAvatar2.Icon = Sunny.UI.UIAvatar.UIIcon.Image;
+ this.uiAvatar2.Image = global::Sunny.UI.Demo.Properties.Resources.SunnyUISmall;
+ this.uiAvatar2.Location = new System.Drawing.Point(30, 50);
+ this.uiAvatar2.Name = "uiAvatar2";
+ this.uiAvatar2.Size = new System.Drawing.Size(60, 60);
+ this.uiAvatar2.TabIndex = 1;
+ this.uiAvatar2.Text = "uiAvatar2";
+ //
+ // uiAvatar3
+ //
+ this.uiAvatar3.AvatarSize = 55;
+ this.uiAvatar3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiAvatar3.Icon = Sunny.UI.UIAvatar.UIIcon.Text;
+ this.uiAvatar3.Location = new System.Drawing.Point(174, 50);
+ this.uiAvatar3.Name = "uiAvatar3";
+ this.uiAvatar3.Size = new System.Drawing.Size(60, 60);
+ this.uiAvatar3.TabIndex = 2;
+ this.uiAvatar3.Text = "Avatar";
+ //
+ // uiAvatar4
+ //
+ this.uiAvatar4.AvatarSize = 55;
+ this.uiAvatar4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiAvatar4.Location = new System.Drawing.Point(362, 50);
+ this.uiAvatar4.Name = "uiAvatar4";
+ this.uiAvatar4.Size = new System.Drawing.Size(60, 60);
+ this.uiAvatar4.Symbol = 61715;
+ this.uiAvatar4.TabIndex = 3;
+ this.uiAvatar4.Text = "uiAvatar4";
+ this.uiAvatar4.Click += new System.EventHandler(this.uiAvatar4_Click);
+ //
+ // uiLabel1
+ //
+ this.uiLabel1.AutoSize = true;
+ this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel1.Location = new System.Drawing.Point(39, 117);
+ this.uiLabel1.Name = "uiLabel1";
+ this.uiLabel1.Size = new System.Drawing.Size(42, 21);
+ this.uiLabel1.TabIndex = 4;
+ this.uiLabel1.Text = "图片";
+ this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLabel2
+ //
+ this.uiLabel2.AutoSize = true;
+ this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel2.Location = new System.Drawing.Point(111, 117);
+ this.uiLabel2.Name = "uiLabel2";
+ this.uiLabel2.Size = new System.Drawing.Size(42, 21);
+ this.uiLabel2.TabIndex = 5;
+ this.uiLabel2.Text = "图标";
+ this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLabel3
+ //
+ this.uiLabel3.AutoSize = true;
+ this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel3.Location = new System.Drawing.Point(183, 117);
+ this.uiLabel3.Name = "uiLabel3";
+ this.uiLabel3.Size = new System.Drawing.Size(42, 21);
+ this.uiLabel3.TabIndex = 6;
+ this.uiLabel3.Text = "文字";
+ this.uiLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLabel4
+ //
+ this.uiLabel4.AutoSize = true;
+ this.uiLabel4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel4.Location = new System.Drawing.Point(355, 117);
+ this.uiLabel4.Name = "uiLabel4";
+ this.uiLabel4.Size = new System.Drawing.Size(74, 21);
+ this.uiLabel4.TabIndex = 7;
+ this.uiLabel4.Text = "左键菜单";
+ this.uiLabel4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiContextMenuStrip1
+ //
+ this.uiContextMenuStrip1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiContextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.设置ToolStripMenuItem,
+ this.更改密码ToolStripMenuItem,
+ this.toolStripMenuItem1,
+ this.退出ToolStripMenuItem});
+ this.uiContextMenuStrip1.Name = "uiContextMenuStrip1";
+ this.uiContextMenuStrip1.Size = new System.Drawing.Size(113, 88);
+ //
+ // 设置ToolStripMenuItem
+ //
+ this.设置ToolStripMenuItem.Name = "设置ToolStripMenuItem";
+ this.设置ToolStripMenuItem.Size = new System.Drawing.Size(112, 26);
+ this.设置ToolStripMenuItem.Text = "设置";
+ //
+ // 更改密码ToolStripMenuItem
+ //
+ this.更改密码ToolStripMenuItem.Name = "更改密码ToolStripMenuItem";
+ this.更改密码ToolStripMenuItem.Size = new System.Drawing.Size(112, 26);
+ this.更改密码ToolStripMenuItem.Text = "密码";
+ //
+ // toolStripMenuItem1
+ //
+ this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+ this.toolStripMenuItem1.Size = new System.Drawing.Size(109, 6);
+ //
+ // 退出ToolStripMenuItem
+ //
+ this.退出ToolStripMenuItem.Name = "退出ToolStripMenuItem";
+ this.退出ToolStripMenuItem.Size = new System.Drawing.Size(112, 26);
+ this.退出ToolStripMenuItem.Text = "退出";
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 19;
+ this.uiLine1.Text = "UIAvatar";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FAvatar
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "FAvatar";
+ this.Symbol = 61447;
+ this.Text = "Avatar";
+ this.Controls.SetChildIndex(this.PagePanel, 0);
+ this.PagePanel.ResumeLayout(false);
+ this.PagePanel.PerformLayout();
+ this.uiContextMenuStrip1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UILabel uiLabel4;
+ private UILabel uiLabel3;
+ private UILabel uiLabel2;
+ private UILabel uiLabel1;
+ private UIAvatar uiAvatar4;
+ private UIAvatar uiAvatar3;
+ private UIAvatar uiAvatar2;
+ private UIAvatar uiAvatar1;
+ private UIContextMenuStrip uiContextMenuStrip1;
+ private System.Windows.Forms.ToolStripMenuItem 设置ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem 更改密码ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
+ private System.Windows.Forms.ToolStripMenuItem 退出ToolStripMenuItem;
+ private UILine uiLine1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FAvatar.cs b/SunnyUI.Net5.Demo/Controls/FAvatar.cs
new file mode 100644
index 00000000..5e89019e
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FAvatar.cs
@@ -0,0 +1,17 @@
+using System;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FAvatar : UITitlePage
+ {
+ public FAvatar()
+ {
+ InitializeComponent();
+ }
+
+ private void uiAvatar4_Click(object sender, EventArgs e)
+ {
+ uiContextMenuStrip1.Show(uiAvatar4, 0, uiAvatar4.Height);
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FAvatar.resx b/SunnyUI.Net5.Demo/Controls/FAvatar.resx
new file mode 100644
index 00000000..93ecf1d7
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FAvatar.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FButton.Designer.cs b/SunnyUI.Net5.Demo/Controls/FButton.Designer.cs
new file mode 100644
index 00000000..9f00d48d
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FButton.Designer.cs
@@ -0,0 +1,1238 @@
+namespace Sunny.UI.Demo
+{
+ partial class FButton
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.uiButton1 = new Sunny.UI.UIButton();
+ this.uiButton2 = new Sunny.UI.UIButton();
+ this.uiButton3 = new Sunny.UI.UIButton();
+ this.uiButton4 = new Sunny.UI.UIButton();
+ this.uiButton5 = new Sunny.UI.UIButton();
+ this.uiButton6 = new Sunny.UI.UIButton();
+ this.uiButton7 = new Sunny.UI.UIButton();
+ this.uiButton8 = new Sunny.UI.UIButton();
+ this.uiButton9 = new Sunny.UI.UIButton();
+ this.uiButton10 = new Sunny.UI.UIButton();
+ this.uiButton11 = new Sunny.UI.UIButton();
+ this.uiButton12 = new Sunny.UI.UIButton();
+ this.uiButton13 = new Sunny.UI.UIButton();
+ this.uiButton14 = new Sunny.UI.UIButton();
+ this.uiButton15 = new Sunny.UI.UIButton();
+ this.uiButton16 = new Sunny.UI.UIButton();
+ this.uiButton17 = new Sunny.UI.UIButton();
+ this.uiButton18 = new Sunny.UI.UIButton();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.uiSymbolButton3 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton4 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton5 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton6 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton7 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton8 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton9 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton10 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton11 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton12 = new Sunny.UI.UISymbolButton();
+ this.uiLine3 = new Sunny.UI.UILine();
+ this.uiSymbolButton13 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton14 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton15 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton16 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton17 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton18 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton19 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton20 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton21 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton22 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton23 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton24 = new Sunny.UI.UISymbolButton();
+ this.uiSwitch1 = new Sunny.UI.UISwitch();
+ this.uiLine4 = new Sunny.UI.UILine();
+ this.uiSwitch2 = new Sunny.UI.UISwitch();
+ this.uiLine5 = new Sunny.UI.UILine();
+ this.uiToolTip1 = new Sunny.UI.UIToolTip(this.components);
+ this.uiSymbolButton1 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton2 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton25 = new Sunny.UI.UISymbolButton();
+ this.uiImageButton4 = new Sunny.UI.UIImageButton();
+ this.uiImageButton3 = new Sunny.UI.UIImageButton();
+ this.uiImageButton2 = new Sunny.UI.UIImageButton();
+ this.uiImageButton1 = new Sunny.UI.UIImageButton();
+ this.uiSymbolButton26 = new Sunny.UI.UISymbolButton();
+ this.uiSwitch3 = new Sunny.UI.UISwitch();
+ this.uiSwitch4 = new Sunny.UI.UISwitch();
+ this.PagePanel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton4)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiSwitch3);
+ this.PagePanel.Controls.Add(this.uiSwitch4);
+ this.PagePanel.Controls.Add(this.uiSymbolButton26);
+ this.PagePanel.Controls.Add(this.uiSymbolButton25);
+ this.PagePanel.Controls.Add(this.uiImageButton4);
+ this.PagePanel.Controls.Add(this.uiImageButton3);
+ this.PagePanel.Controls.Add(this.uiImageButton2);
+ this.PagePanel.Controls.Add(this.uiImageButton1);
+ this.PagePanel.Controls.Add(this.uiLine5);
+ this.PagePanel.Controls.Add(this.uiSwitch2);
+ this.PagePanel.Controls.Add(this.uiLine4);
+ this.PagePanel.Controls.Add(this.uiSwitch1);
+ this.PagePanel.Controls.Add(this.uiSymbolButton24);
+ this.PagePanel.Controls.Add(this.uiSymbolButton23);
+ this.PagePanel.Controls.Add(this.uiSymbolButton22);
+ this.PagePanel.Controls.Add(this.uiSymbolButton19);
+ this.PagePanel.Controls.Add(this.uiSymbolButton20);
+ this.PagePanel.Controls.Add(this.uiSymbolButton21);
+ this.PagePanel.Controls.Add(this.uiSymbolButton13);
+ this.PagePanel.Controls.Add(this.uiSymbolButton14);
+ this.PagePanel.Controls.Add(this.uiSymbolButton15);
+ this.PagePanel.Controls.Add(this.uiSymbolButton16);
+ this.PagePanel.Controls.Add(this.uiSymbolButton17);
+ this.PagePanel.Controls.Add(this.uiSymbolButton18);
+ this.PagePanel.Controls.Add(this.uiLine3);
+ this.PagePanel.Controls.Add(this.uiSymbolButton7);
+ this.PagePanel.Controls.Add(this.uiSymbolButton8);
+ this.PagePanel.Controls.Add(this.uiSymbolButton9);
+ this.PagePanel.Controls.Add(this.uiSymbolButton10);
+ this.PagePanel.Controls.Add(this.uiSymbolButton11);
+ this.PagePanel.Controls.Add(this.uiSymbolButton12);
+ this.PagePanel.Controls.Add(this.uiSymbolButton6);
+ this.PagePanel.Controls.Add(this.uiSymbolButton5);
+ this.PagePanel.Controls.Add(this.uiSymbolButton3);
+ this.PagePanel.Controls.Add(this.uiSymbolButton4);
+ this.PagePanel.Controls.Add(this.uiSymbolButton2);
+ this.PagePanel.Controls.Add(this.uiSymbolButton1);
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiButton13);
+ this.PagePanel.Controls.Add(this.uiButton14);
+ this.PagePanel.Controls.Add(this.uiButton15);
+ this.PagePanel.Controls.Add(this.uiButton16);
+ this.PagePanel.Controls.Add(this.uiButton17);
+ this.PagePanel.Controls.Add(this.uiButton18);
+ this.PagePanel.Controls.Add(this.uiButton7);
+ this.PagePanel.Controls.Add(this.uiButton8);
+ this.PagePanel.Controls.Add(this.uiButton9);
+ this.PagePanel.Controls.Add(this.uiButton10);
+ this.PagePanel.Controls.Add(this.uiButton11);
+ this.PagePanel.Controls.Add(this.uiButton12);
+ this.PagePanel.Controls.Add(this.uiButton4);
+ this.PagePanel.Controls.Add(this.uiButton5);
+ this.PagePanel.Controls.Add(this.uiButton6);
+ this.PagePanel.Controls.Add(this.uiButton3);
+ this.PagePanel.Controls.Add(this.uiButton2);
+ this.PagePanel.Controls.Add(this.uiButton1);
+ this.PagePanel.Size = new System.Drawing.Size(800, 499);
+ this.PagePanel.Text = "";
+ //
+ // uiButton1
+ //
+ this.uiButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton1.FillColor = System.Drawing.Color.White;
+ this.uiButton1.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiButton1.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiButton1.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.uiButton1.ForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiButton1.ForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.uiButton1.ForeSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.uiButton1.Location = new System.Drawing.Point(30, 50);
+ this.uiButton1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton1.Name = "uiButton1";
+ this.uiButton1.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.uiButton1.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.uiButton1.ShowFocusLine = true;
+ this.uiButton1.Size = new System.Drawing.Size(100, 35);
+ this.uiButton1.Style = Sunny.UI.UIStyle.White;
+ this.uiButton1.StyleCustomMode = true;
+ this.uiButton1.TabIndex = 0;
+ this.uiButton1.Text = "White";
+ this.uiButton1.TipsText = "1";
+ this.uiToolTip1.SetToolTip(this.uiButton1, "White");
+ //
+ // uiButton2
+ //
+ this.uiButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton2.ForeSelectedColor = System.Drawing.Color.Empty;
+ this.uiButton2.Location = new System.Drawing.Point(144, 50);
+ this.uiButton2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton2.Name = "uiButton2";
+ this.uiButton2.RectSelectedColor = System.Drawing.Color.Empty;
+ this.uiButton2.ShowFocusLine = true;
+ this.uiButton2.Size = new System.Drawing.Size(100, 35);
+ this.uiButton2.StyleCustomMode = true;
+ this.uiButton2.TabIndex = 1;
+ this.uiButton2.Text = "Blue";
+ this.uiToolTip1.SetToolTip(this.uiButton2, "Blue");
+ //
+ // uiButton3
+ //
+ this.uiButton3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton3.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiButton3.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiButton3.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton3.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton3.Location = new System.Drawing.Point(258, 50);
+ this.uiButton3.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton3.Name = "uiButton3";
+ this.uiButton3.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiButton3.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiButton3.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton3.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton3.ShowFocusLine = true;
+ this.uiButton3.Size = new System.Drawing.Size(100, 35);
+ this.uiButton3.Style = Sunny.UI.UIStyle.Green;
+ this.uiButton3.StyleCustomMode = true;
+ this.uiButton3.TabIndex = 2;
+ this.uiButton3.Text = "Green";
+ //
+ // uiButton4
+ //
+ this.uiButton4.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton4.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiButton4.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiButton4.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton4.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton4.Location = new System.Drawing.Point(600, 50);
+ this.uiButton4.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton4.Name = "uiButton4";
+ this.uiButton4.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiButton4.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiButton4.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton4.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton4.ShowFocusLine = true;
+ this.uiButton4.Size = new System.Drawing.Size(100, 35);
+ this.uiButton4.Style = Sunny.UI.UIStyle.Red;
+ this.uiButton4.StyleCustomMode = true;
+ this.uiButton4.TabIndex = 5;
+ this.uiButton4.Text = "Red";
+ //
+ // uiButton5
+ //
+ this.uiButton5.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton5.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiButton5.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiButton5.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton5.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton5.Location = new System.Drawing.Point(486, 50);
+ this.uiButton5.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton5.Name = "uiButton5";
+ this.uiButton5.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiButton5.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiButton5.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton5.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton5.ShowFocusLine = true;
+ this.uiButton5.Size = new System.Drawing.Size(100, 35);
+ this.uiButton5.Style = Sunny.UI.UIStyle.Orange;
+ this.uiButton5.StyleCustomMode = true;
+ this.uiButton5.TabIndex = 4;
+ this.uiButton5.Text = "Orange";
+ //
+ // uiButton6
+ //
+ this.uiButton6.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton6.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
+ this.uiButton6.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165)))));
+ this.uiButton6.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton6.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton6.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton6.Location = new System.Drawing.Point(372, 50);
+ this.uiButton6.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton6.Name = "uiButton6";
+ this.uiButton6.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
+ this.uiButton6.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165)))));
+ this.uiButton6.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton6.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton6.ShowFocusLine = true;
+ this.uiButton6.Size = new System.Drawing.Size(100, 35);
+ this.uiButton6.Style = Sunny.UI.UIStyle.Gray;
+ this.uiButton6.StyleCustomMode = true;
+ this.uiButton6.TabIndex = 3;
+ this.uiButton6.Text = "Gray";
+ //
+ // uiButton7
+ //
+ this.uiButton7.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton7.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(238)))), ((int)(((byte)(238)))));
+ this.uiButton7.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiButton7.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton7.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton7.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiButton7.Location = new System.Drawing.Point(600, 100);
+ this.uiButton7.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton7.Name = "uiButton7";
+ this.uiButton7.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiButton7.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiButton7.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton7.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton7.Size = new System.Drawing.Size(100, 35);
+ this.uiButton7.Style = Sunny.UI.UIStyle.LightRed;
+ this.uiButton7.StyleCustomMode = true;
+ this.uiButton7.TabIndex = 11;
+ this.uiButton7.Text = "LightRed";
+ //
+ // uiButton8
+ //
+ this.uiButton8.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton8.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(245)))), ((int)(((byte)(233)))));
+ this.uiButton8.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiButton8.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton8.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton8.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiButton8.Location = new System.Drawing.Point(486, 100);
+ this.uiButton8.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton8.Name = "uiButton8";
+ this.uiButton8.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiButton8.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiButton8.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton8.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton8.Size = new System.Drawing.Size(100, 35);
+ this.uiButton8.Style = Sunny.UI.UIStyle.LightOrange;
+ this.uiButton8.StyleCustomMode = true;
+ this.uiButton8.TabIndex = 10;
+ this.uiButton8.Text = "LightOrange";
+ //
+ // uiButton9
+ //
+ this.uiButton9.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton9.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(242)))), ((int)(((byte)(242)))), ((int)(((byte)(244)))));
+ this.uiButton9.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
+ this.uiButton9.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton9.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton9.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton9.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
+ this.uiButton9.Location = new System.Drawing.Point(372, 100);
+ this.uiButton9.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton9.Name = "uiButton9";
+ this.uiButton9.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
+ this.uiButton9.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
+ this.uiButton9.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton9.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton9.Size = new System.Drawing.Size(100, 35);
+ this.uiButton9.Style = Sunny.UI.UIStyle.LightGray;
+ this.uiButton9.StyleCustomMode = true;
+ this.uiButton9.TabIndex = 9;
+ this.uiButton9.Text = "LightGray";
+ //
+ // uiButton10
+ //
+ this.uiButton10.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton10.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232)))));
+ this.uiButton10.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiButton10.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton10.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton10.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton10.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiButton10.Location = new System.Drawing.Point(258, 100);
+ this.uiButton10.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton10.Name = "uiButton10";
+ this.uiButton10.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiButton10.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiButton10.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton10.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton10.Size = new System.Drawing.Size(100, 35);
+ this.uiButton10.Style = Sunny.UI.UIStyle.LightGreen;
+ this.uiButton10.StyleCustomMode = true;
+ this.uiButton10.TabIndex = 8;
+ this.uiButton10.Text = "LightGreen";
+ this.uiButton10.Click += new System.EventHandler(this.uiButton10_Click);
+ //
+ // uiButton11
+ //
+ this.uiButton11.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton11.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton11.ForeSelectedColor = System.Drawing.Color.Empty;
+ this.uiButton11.Location = new System.Drawing.Point(144, 100);
+ this.uiButton11.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton11.Name = "uiButton11";
+ this.uiButton11.RectSelectedColor = System.Drawing.Color.Empty;
+ this.uiButton11.Size = new System.Drawing.Size(100, 35);
+ this.uiButton11.StyleCustomMode = true;
+ this.uiButton11.TabIndex = 7;
+ this.uiButton11.Text = "LightBlue";
+ //
+ // uiButton12
+ //
+ this.uiButton12.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton12.FillColor = System.Drawing.Color.White;
+ this.uiButton12.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiButton12.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiButton12.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiButton12.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton12.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.uiButton12.ForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiButton12.ForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.uiButton12.ForeSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.uiButton12.Location = new System.Drawing.Point(30, 100);
+ this.uiButton12.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton12.Name = "uiButton12";
+ this.uiButton12.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.uiButton12.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.uiButton12.Size = new System.Drawing.Size(100, 35);
+ this.uiButton12.Style = Sunny.UI.UIStyle.White;
+ this.uiButton12.StyleCustomMode = true;
+ this.uiButton12.TabIndex = 6;
+ this.uiButton12.Text = "White";
+ //
+ // uiButton13
+ //
+ this.uiButton13.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton13.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiButton13.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiButton13.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton13.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton13.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton13.Location = new System.Drawing.Point(600, 150);
+ this.uiButton13.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton13.Name = "uiButton13";
+ this.uiButton13.Radius = 35;
+ this.uiButton13.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiButton13.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiButton13.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton13.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiButton13.Size = new System.Drawing.Size(100, 35);
+ this.uiButton13.Style = Sunny.UI.UIStyle.Red;
+ this.uiButton13.StyleCustomMode = true;
+ this.uiButton13.TabIndex = 17;
+ this.uiButton13.Text = "Red";
+ this.uiButton13.Click += new System.EventHandler(this.uiButton13_Click);
+ //
+ // uiButton14
+ //
+ this.uiButton14.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton14.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiButton14.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiButton14.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton14.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton14.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton14.Location = new System.Drawing.Point(486, 150);
+ this.uiButton14.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton14.Name = "uiButton14";
+ this.uiButton14.Radius = 35;
+ this.uiButton14.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiButton14.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiButton14.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton14.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiButton14.Size = new System.Drawing.Size(100, 35);
+ this.uiButton14.Style = Sunny.UI.UIStyle.Orange;
+ this.uiButton14.StyleCustomMode = true;
+ this.uiButton14.TabIndex = 16;
+ this.uiButton14.Text = "Orange";
+ //
+ // uiButton15
+ //
+ this.uiButton15.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton15.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
+ this.uiButton15.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165)))));
+ this.uiButton15.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton15.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton15.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton15.Location = new System.Drawing.Point(372, 150);
+ this.uiButton15.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton15.Name = "uiButton15";
+ this.uiButton15.Radius = 35;
+ this.uiButton15.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
+ this.uiButton15.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165)))));
+ this.uiButton15.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton15.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.uiButton15.Size = new System.Drawing.Size(100, 35);
+ this.uiButton15.Style = Sunny.UI.UIStyle.Gray;
+ this.uiButton15.StyleCustomMode = true;
+ this.uiButton15.TabIndex = 15;
+ this.uiButton15.Text = "Gray";
+ //
+ // uiButton16
+ //
+ this.uiButton16.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton16.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiButton16.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiButton16.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton16.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton16.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton16.Location = new System.Drawing.Point(258, 150);
+ this.uiButton16.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton16.Name = "uiButton16";
+ this.uiButton16.Radius = 35;
+ this.uiButton16.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiButton16.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiButton16.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton16.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiButton16.Size = new System.Drawing.Size(100, 35);
+ this.uiButton16.Style = Sunny.UI.UIStyle.Green;
+ this.uiButton16.StyleCustomMode = true;
+ this.uiButton16.TabIndex = 14;
+ this.uiButton16.Text = "Green";
+ //
+ // uiButton17
+ //
+ this.uiButton17.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton17.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton17.ForeSelectedColor = System.Drawing.Color.Empty;
+ this.uiButton17.Location = new System.Drawing.Point(144, 150);
+ this.uiButton17.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton17.Name = "uiButton17";
+ this.uiButton17.Radius = 35;
+ this.uiButton17.RectSelectedColor = System.Drawing.Color.Empty;
+ this.uiButton17.Size = new System.Drawing.Size(100, 35);
+ this.uiButton17.StyleCustomMode = true;
+ this.uiButton17.TabIndex = 13;
+ this.uiButton17.Text = "Blue";
+ //
+ // uiButton18
+ //
+ this.uiButton18.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton18.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton18.Location = new System.Drawing.Point(30, 150);
+ this.uiButton18.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton18.Name = "uiButton18";
+ this.uiButton18.Radius = 35;
+ this.uiButton18.Size = new System.Drawing.Size(100, 35);
+ this.uiButton18.TabIndex = 12;
+ this.uiButton18.Text = "Round";
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 18;
+ this.uiLine1.Text = "UIButton";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(30, 200);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(670, 16);
+ this.uiLine2.TabIndex = 19;
+ this.uiLine2.Text = "UISymbolButton";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiSymbolButton3
+ //
+ this.uiSymbolButton3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton3.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton3.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiSymbolButton3.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton3.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton3.Location = new System.Drawing.Point(372, 230);
+ this.uiSymbolButton3.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton3.Name = "uiSymbolButton3";
+ this.uiSymbolButton3.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton3.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiSymbolButton3.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton3.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton3.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton3.Style = Sunny.UI.UIStyle.Green;
+ this.uiSymbolButton3.StyleCustomMode = true;
+ this.uiSymbolButton3.Symbol = 61530;
+ this.uiSymbolButton3.TabIndex = 23;
+ this.uiSymbolButton3.Text = "Success";
+ //
+ // uiSymbolButton4
+ //
+ this.uiSymbolButton4.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton4.ForeSelectedColor = System.Drawing.Color.Empty;
+ this.uiSymbolButton4.Location = new System.Drawing.Point(258, 230);
+ this.uiSymbolButton4.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton4.Name = "uiSymbolButton4";
+ this.uiSymbolButton4.RectSelectedColor = System.Drawing.Color.Empty;
+ this.uiSymbolButton4.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton4.StyleCustomMode = true;
+ this.uiSymbolButton4.Symbol = 61529;
+ this.uiSymbolButton4.TabIndex = 22;
+ this.uiSymbolButton4.Text = "Query";
+ //
+ // uiSymbolButton5
+ //
+ this.uiSymbolButton5.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton5.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton5.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiSymbolButton5.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton5.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton5.Location = new System.Drawing.Point(486, 230);
+ this.uiSymbolButton5.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton5.Name = "uiSymbolButton5";
+ this.uiSymbolButton5.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton5.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiSymbolButton5.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton5.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton5.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton5.Style = Sunny.UI.UIStyle.Orange;
+ this.uiSymbolButton5.StyleCustomMode = true;
+ this.uiSymbolButton5.Symbol = 61553;
+ this.uiSymbolButton5.TabIndex = 24;
+ this.uiSymbolButton5.Text = "Warn";
+ //
+ // uiSymbolButton6
+ //
+ this.uiSymbolButton6.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton6.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton6.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton6.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton6.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton6.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton6.Location = new System.Drawing.Point(600, 230);
+ this.uiSymbolButton6.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton6.Name = "uiSymbolButton6";
+ this.uiSymbolButton6.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton6.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton6.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton6.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton6.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton6.Style = Sunny.UI.UIStyle.Red;
+ this.uiSymbolButton6.StyleCustomMode = true;
+ this.uiSymbolButton6.Symbol = 61532;
+ this.uiSymbolButton6.TabIndex = 25;
+ this.uiSymbolButton6.Text = "Error";
+ //
+ // uiSymbolButton7
+ //
+ this.uiSymbolButton7.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton7.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton7.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton7.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton7.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton7.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton7.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
+ this.uiSymbolButton7.IsCircle = true;
+ this.uiSymbolButton7.Location = new System.Drawing.Point(235, 280);
+ this.uiSymbolButton7.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton7.Name = "uiSymbolButton7";
+ this.uiSymbolButton7.Padding = new System.Windows.Forms.Padding(7, 7, 4, 4);
+ this.uiSymbolButton7.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton7.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton7.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton7.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton7.Size = new System.Drawing.Size(35, 35);
+ this.uiSymbolButton7.Style = Sunny.UI.UIStyle.Red;
+ this.uiSymbolButton7.StyleCustomMode = true;
+ this.uiSymbolButton7.Symbol = 61809;
+ this.uiSymbolButton7.TabIndex = 31;
+ //
+ // uiSymbolButton8
+ //
+ this.uiSymbolButton8.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton8.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton8.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiSymbolButton8.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton8.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton8.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton8.IsCircle = true;
+ this.uiSymbolButton8.Location = new System.Drawing.Point(194, 280);
+ this.uiSymbolButton8.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton8.Name = "uiSymbolButton8";
+ this.uiSymbolButton8.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton8.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiSymbolButton8.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton8.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton8.Size = new System.Drawing.Size(35, 35);
+ this.uiSymbolButton8.Style = Sunny.UI.UIStyle.Orange;
+ this.uiSymbolButton8.StyleCustomMode = true;
+ this.uiSymbolButton8.Symbol = 61445;
+ this.uiSymbolButton8.TabIndex = 30;
+ //
+ // uiSymbolButton9
+ //
+ this.uiSymbolButton9.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton9.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton9.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiSymbolButton9.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton9.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton9.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton9.IsCircle = true;
+ this.uiSymbolButton9.Location = new System.Drawing.Point(153, 280);
+ this.uiSymbolButton9.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton9.Name = "uiSymbolButton9";
+ this.uiSymbolButton9.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton9.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiSymbolButton9.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton9.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton9.Size = new System.Drawing.Size(35, 35);
+ this.uiSymbolButton9.Style = Sunny.UI.UIStyle.Green;
+ this.uiSymbolButton9.StyleCustomMode = true;
+ this.uiSymbolButton9.Symbol = 57607;
+ this.uiSymbolButton9.TabIndex = 29;
+ //
+ // uiSymbolButton10
+ //
+ this.uiSymbolButton10.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton10.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton10.ForeSelectedColor = System.Drawing.Color.Empty;
+ this.uiSymbolButton10.IsCircle = true;
+ this.uiSymbolButton10.Location = new System.Drawing.Point(112, 280);
+ this.uiSymbolButton10.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton10.Name = "uiSymbolButton10";
+ this.uiSymbolButton10.RectSelectedColor = System.Drawing.Color.Empty;
+ this.uiSymbolButton10.Size = new System.Drawing.Size(35, 35);
+ this.uiSymbolButton10.StyleCustomMode = true;
+ this.uiSymbolButton10.TabIndex = 28;
+ //
+ // uiSymbolButton11
+ //
+ this.uiSymbolButton11.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton11.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton11.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton11.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton11.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton11.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton11.IsCircle = true;
+ this.uiSymbolButton11.Location = new System.Drawing.Point(71, 280);
+ this.uiSymbolButton11.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton11.Name = "uiSymbolButton11";
+ this.uiSymbolButton11.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton11.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton11.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton11.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton11.Size = new System.Drawing.Size(35, 35);
+ this.uiSymbolButton11.Style = Sunny.UI.UIStyle.Red;
+ this.uiSymbolButton11.StyleCustomMode = true;
+ this.uiSymbolButton11.Symbol = 61508;
+ this.uiSymbolButton11.TabIndex = 27;
+ //
+ // uiSymbolButton12
+ //
+ this.uiSymbolButton12.CircleRectWidth = 2;
+ this.uiSymbolButton12.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton12.FillColor = System.Drawing.Color.White;
+ this.uiSymbolButton12.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton12.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton12.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton12.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton12.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102)))));
+ this.uiSymbolButton12.ForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton12.ForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.uiSymbolButton12.ForeSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229)))));
+ this.uiSymbolButton12.IsCircle = true;
+ this.uiSymbolButton12.Location = new System.Drawing.Point(30, 280);
+ this.uiSymbolButton12.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton12.Name = "uiSymbolButton12";
+ this.uiSymbolButton12.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227)))));
+ this.uiSymbolButton12.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton12.Size = new System.Drawing.Size(35, 35);
+ this.uiSymbolButton12.Style = Sunny.UI.UIStyle.White;
+ this.uiSymbolButton12.StyleCustomMode = true;
+ this.uiSymbolButton12.Symbol = 61442;
+ this.uiSymbolButton12.TabIndex = 26;
+ //
+ // uiLine3
+ //
+ this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine3.Location = new System.Drawing.Point(30, 330);
+ this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine3.Name = "uiLine3";
+ this.uiLine3.Size = new System.Drawing.Size(670, 20);
+ this.uiLine3.TabIndex = 32;
+ this.uiLine3.Text = "UISymbolButton 按钮组";
+ this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiSymbolButton13
+ //
+ this.uiSymbolButton13.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton13.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton13.Location = new System.Drawing.Point(260, 360);
+ this.uiSymbolButton13.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton13.Name = "uiSymbolButton13";
+ this.uiSymbolButton13.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
+ this.uiSymbolButton13.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
+ | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
+ this.uiSymbolButton13.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton13.Symbol = 61518;
+ this.uiSymbolButton13.TabIndex = 38;
+ //
+ // uiSymbolButton14
+ //
+ this.uiSymbolButton14.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton14.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton14.Location = new System.Drawing.Point(214, 360);
+ this.uiSymbolButton14.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton14.Name = "uiSymbolButton14";
+ this.uiSymbolButton14.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
+ this.uiSymbolButton14.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
+ | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
+ this.uiSymbolButton14.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton14.Symbol = 61514;
+ this.uiSymbolButton14.TabIndex = 37;
+ //
+ // uiSymbolButton15
+ //
+ this.uiSymbolButton15.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton15.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton15.Location = new System.Drawing.Point(168, 360);
+ this.uiSymbolButton15.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton15.Name = "uiSymbolButton15";
+ this.uiSymbolButton15.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
+ this.uiSymbolButton15.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
+ | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
+ this.uiSymbolButton15.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton15.Symbol = 61513;
+ this.uiSymbolButton15.TabIndex = 36;
+ //
+ // uiSymbolButton16
+ //
+ this.uiSymbolButton16.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton16.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton16.Location = new System.Drawing.Point(122, 360);
+ this.uiSymbolButton16.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton16.Name = "uiSymbolButton16";
+ this.uiSymbolButton16.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
+ this.uiSymbolButton16.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
+ | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
+ this.uiSymbolButton16.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton16.Symbol = 61517;
+ this.uiSymbolButton16.TabIndex = 35;
+ //
+ // uiSymbolButton17
+ //
+ this.uiSymbolButton17.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton17.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton17.Location = new System.Drawing.Point(76, 360);
+ this.uiSymbolButton17.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton17.Name = "uiSymbolButton17";
+ this.uiSymbolButton17.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
+ this.uiSymbolButton17.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
+ | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
+ this.uiSymbolButton17.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton17.Symbol = 61516;
+ this.uiSymbolButton17.TabIndex = 34;
+ //
+ // uiSymbolButton18
+ //
+ this.uiSymbolButton18.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton18.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton18.Location = new System.Drawing.Point(30, 360);
+ this.uiSymbolButton18.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton18.Name = "uiSymbolButton18";
+ this.uiSymbolButton18.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.LeftTop | Sunny.UI.UICornerRadiusSides.LeftBottom)));
+ this.uiSymbolButton18.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton18.Symbol = 61515;
+ this.uiSymbolButton18.TabIndex = 33;
+ //
+ // uiSymbolButton19
+ //
+ this.uiSymbolButton19.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton19.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton19.Location = new System.Drawing.Point(516, 360);
+ this.uiSymbolButton19.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton19.Name = "uiSymbolButton19";
+ this.uiSymbolButton19.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.LeftTop | Sunny.UI.UICornerRadiusSides.LeftBottom)));
+ this.uiSymbolButton19.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton19.Symbol = 61543;
+ this.uiSymbolButton19.TabIndex = 41;
+ //
+ // uiSymbolButton20
+ //
+ this.uiSymbolButton20.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton20.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton20.Location = new System.Drawing.Point(352, 360);
+ this.uiSymbolButton20.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton20.Name = "uiSymbolButton20";
+ this.uiSymbolButton20.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.RightTop | Sunny.UI.UICornerRadiusSides.RightBottom)));
+ this.uiSymbolButton20.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
+ | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
+ this.uiSymbolButton20.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton20.Symbol = 61522;
+ this.uiSymbolButton20.TabIndex = 40;
+ //
+ // uiSymbolButton21
+ //
+ this.uiSymbolButton21.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton21.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton21.Location = new System.Drawing.Point(306, 360);
+ this.uiSymbolButton21.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton21.Name = "uiSymbolButton21";
+ this.uiSymbolButton21.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
+ this.uiSymbolButton21.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
+ | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
+ this.uiSymbolButton21.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton21.Symbol = 61520;
+ this.uiSymbolButton21.TabIndex = 39;
+ //
+ // uiSymbolButton22
+ //
+ this.uiSymbolButton22.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton22.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton22.Location = new System.Drawing.Point(562, 360);
+ this.uiSymbolButton22.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton22.Name = "uiSymbolButton22";
+ this.uiSymbolButton22.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
+ this.uiSymbolButton22.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
+ | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
+ this.uiSymbolButton22.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton22.Symbol = 61508;
+ this.uiSymbolButton22.TabIndex = 42;
+ //
+ // uiSymbolButton23
+ //
+ this.uiSymbolButton23.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton23.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton23.Location = new System.Drawing.Point(608, 360);
+ this.uiSymbolButton23.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton23.Name = "uiSymbolButton23";
+ this.uiSymbolButton23.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
+ this.uiSymbolButton23.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
+ | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
+ this.uiSymbolButton23.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton23.Symbol = 61544;
+ this.uiSymbolButton23.TabIndex = 43;
+ //
+ // uiSymbolButton24
+ //
+ this.uiSymbolButton24.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton24.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton24.Location = new System.Drawing.Point(654, 360);
+ this.uiSymbolButton24.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton24.Name = "uiSymbolButton24";
+ this.uiSymbolButton24.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.RightTop | Sunny.UI.UICornerRadiusSides.RightBottom)));
+ this.uiSymbolButton24.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
+ | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
+ this.uiSymbolButton24.Size = new System.Drawing.Size(46, 35);
+ this.uiSymbolButton24.Symbol = 61473;
+ this.uiSymbolButton24.TabIndex = 44;
+ //
+ // uiSwitch1
+ //
+ this.uiSwitch1.Active = true;
+ this.uiSwitch1.ActiveText = "On";
+ this.uiSwitch1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSwitch1.InActiveText = "Off";
+ this.uiSwitch1.Location = new System.Drawing.Point(30, 441);
+ this.uiSwitch1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSwitch1.Name = "uiSwitch1";
+ this.uiSwitch1.Size = new System.Drawing.Size(75, 29);
+ this.uiSwitch1.TabIndex = 45;
+ this.uiSwitch1.Text = "uiSwitch1";
+ this.uiSwitch1.ValueChanged += new Sunny.UI.UISwitch.OnValueChanged(this.uiSwitch1_ValueChanged);
+ this.uiSwitch1.Click += new System.EventHandler(this.uiSwitch1_Click);
+ //
+ // uiLine4
+ //
+ this.uiLine4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine4.Location = new System.Drawing.Point(30, 412);
+ this.uiLine4.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine4.Name = "uiLine4";
+ this.uiLine4.Size = new System.Drawing.Size(312, 20);
+ this.uiLine4.TabIndex = 46;
+ this.uiLine4.Text = "UISwitch";
+ this.uiLine4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiSwitch2
+ //
+ this.uiSwitch2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSwitch2.Location = new System.Drawing.Point(112, 441);
+ this.uiSwitch2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSwitch2.Name = "uiSwitch2";
+ this.uiSwitch2.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None;
+ this.uiSwitch2.Size = new System.Drawing.Size(75, 29);
+ this.uiSwitch2.TabIndex = 47;
+ this.uiSwitch2.Text = "uiSwitch2";
+ //
+ // uiLine5
+ //
+ this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine5.Location = new System.Drawing.Point(388, 412);
+ this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine5.Name = "uiLine5";
+ this.uiLine5.Size = new System.Drawing.Size(312, 20);
+ this.uiLine5.TabIndex = 48;
+ this.uiLine5.Text = "UIImageButton";
+ this.uiLine5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiToolTip1
+ //
+ this.uiToolTip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(54)))), ((int)(((byte)(54)))), ((int)(((byte)(54)))));
+ this.uiToolTip1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiToolTip1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(239)))), ((int)(((byte)(239)))));
+ this.uiToolTip1.OwnerDraw = true;
+ //
+ // uiSymbolButton1
+ //
+ this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton1.ForeSelectedColor = System.Drawing.Color.Empty;
+ this.uiSymbolButton1.Location = new System.Drawing.Point(30, 230);
+ this.uiSymbolButton1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton1.Name = "uiSymbolButton1";
+ this.uiSymbolButton1.RectSelectedColor = System.Drawing.Color.Empty;
+ this.uiSymbolButton1.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton1.StyleCustomMode = true;
+ this.uiSymbolButton1.TabIndex = 20;
+ this.uiSymbolButton1.Text = "OK";
+ //
+ // uiSymbolButton2
+ //
+ this.uiSymbolButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton2.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton2.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton2.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton2.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton2.Location = new System.Drawing.Point(144, 230);
+ this.uiSymbolButton2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton2.Name = "uiSymbolButton2";
+ this.uiSymbolButton2.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton2.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton2.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton2.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton2.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton2.Style = Sunny.UI.UIStyle.Red;
+ this.uiSymbolButton2.StyleCustomMode = true;
+ this.uiSymbolButton2.Symbol = 61453;
+ this.uiSymbolButton2.TabIndex = 21;
+ this.uiSymbolButton2.Text = "Cancel";
+ //
+ // uiSymbolButton25
+ //
+ this.uiSymbolButton25.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton25.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton25.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton25.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton25.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton25.Image = global::Sunny.UI.Demo.Properties.Resources.relationship;
+ this.uiSymbolButton25.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.uiSymbolButton25.Location = new System.Drawing.Point(600, 280);
+ this.uiSymbolButton25.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton25.Name = "uiSymbolButton25";
+ this.uiSymbolButton25.Padding = new System.Windows.Forms.Padding(10, 0, 5, 0);
+ this.uiSymbolButton25.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton25.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton25.Style = Sunny.UI.UIStyle.LightBlue;
+ this.uiSymbolButton25.StyleCustomMode = true;
+ this.uiSymbolButton25.Symbol = 61453;
+ this.uiSymbolButton25.TabIndex = 55;
+ this.uiSymbolButton25.Text = "Link";
+ this.uiSymbolButton25.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiImageButton4
+ //
+ this.uiImageButton4.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton4.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiImageButton4.ForeColor = System.Drawing.Color.Red;
+ this.uiImageButton4.Image = global::Sunny.UI.Demo.Properties.Resources.dashboard0;
+ this.uiImageButton4.ImageHover = global::Sunny.UI.Demo.Properties.Resources.dashboard;
+ this.uiImageButton4.ImageOffset = new System.Drawing.Point(12, 5);
+ this.uiImageButton4.ImagePress = global::Sunny.UI.Demo.Properties.Resources.dashboard0;
+ this.uiImageButton4.Location = new System.Drawing.Point(630, 435);
+ this.uiImageButton4.Name = "uiImageButton4";
+ this.uiImageButton4.Size = new System.Drawing.Size(70, 61);
+ this.uiImageButton4.TabIndex = 52;
+ this.uiImageButton4.TabStop = false;
+ this.uiImageButton4.Text = "Home";
+ this.uiImageButton4.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
+ //
+ // uiImageButton3
+ //
+ this.uiImageButton3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton3.Image = global::Sunny.UI.Demo.Properties.Resources.save0;
+ this.uiImageButton3.ImageHover = global::Sunny.UI.Demo.Properties.Resources.save;
+ this.uiImageButton3.ImagePress = global::Sunny.UI.Demo.Properties.Resources.save0;
+ this.uiImageButton3.Location = new System.Drawing.Point(546, 438);
+ this.uiImageButton3.Name = "uiImageButton3";
+ this.uiImageButton3.Size = new System.Drawing.Size(43, 35);
+ this.uiImageButton3.TabIndex = 51;
+ this.uiImageButton3.TabStop = false;
+ this.uiImageButton3.Text = null;
+ //
+ // uiImageButton2
+ //
+ this.uiImageButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton2.Image = global::Sunny.UI.Demo.Properties.Resources.relationship0;
+ this.uiImageButton2.ImageHover = global::Sunny.UI.Demo.Properties.Resources.relationship;
+ this.uiImageButton2.ImagePress = global::Sunny.UI.Demo.Properties.Resources.relationship0;
+ this.uiImageButton2.Location = new System.Drawing.Point(495, 438);
+ this.uiImageButton2.Name = "uiImageButton2";
+ this.uiImageButton2.Size = new System.Drawing.Size(43, 35);
+ this.uiImageButton2.TabIndex = 50;
+ this.uiImageButton2.TabStop = false;
+ this.uiImageButton2.Text = null;
+ //
+ // uiImageButton1
+ //
+ this.uiImageButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiImageButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageButton1.Image = global::Sunny.UI.Demo.Properties.Resources.dashboard0;
+ this.uiImageButton1.ImageHover = global::Sunny.UI.Demo.Properties.Resources.dashboard;
+ this.uiImageButton1.ImagePress = global::Sunny.UI.Demo.Properties.Resources.dashboard0;
+ this.uiImageButton1.Location = new System.Drawing.Point(395, 438);
+ this.uiImageButton1.Name = "uiImageButton1";
+ this.uiImageButton1.Size = new System.Drawing.Size(94, 35);
+ this.uiImageButton1.TabIndex = 49;
+ this.uiImageButton1.TabStop = false;
+ this.uiImageButton1.Text = "Home";
+ this.uiImageButton1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // uiSymbolButton26
+ //
+ this.uiSymbolButton26.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton26.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton26.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton26.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton26.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton26.Image = global::Sunny.UI.Demo.Properties.Resources.save;
+ this.uiSymbolButton26.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiSymbolButton26.Location = new System.Drawing.Point(486, 280);
+ this.uiSymbolButton26.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton26.Name = "uiSymbolButton26";
+ this.uiSymbolButton26.Padding = new System.Windows.Forms.Padding(5, 0, 10, 0);
+ this.uiSymbolButton26.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiSymbolButton26.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton26.Style = Sunny.UI.UIStyle.LightBlue;
+ this.uiSymbolButton26.StyleCustomMode = true;
+ this.uiSymbolButton26.Symbol = 61530;
+ this.uiSymbolButton26.TabIndex = 56;
+ this.uiSymbolButton26.Text = "Save";
+ this.uiSymbolButton26.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // uiSwitch3
+ //
+ this.uiSwitch3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSwitch3.Location = new System.Drawing.Point(275, 441);
+ this.uiSwitch3.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSwitch3.Name = "uiSwitch3";
+ this.uiSwitch3.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None;
+ this.uiSwitch3.Size = new System.Drawing.Size(75, 29);
+ this.uiSwitch3.SwitchShape = Sunny.UI.UISwitch.UISwitchShape.Square;
+ this.uiSwitch3.TabIndex = 58;
+ this.uiSwitch3.Text = "uiSwitch3";
+ //
+ // uiSwitch4
+ //
+ this.uiSwitch4.Active = true;
+ this.uiSwitch4.ActiveText = "On";
+ this.uiSwitch4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSwitch4.InActiveText = "Off";
+ this.uiSwitch4.Location = new System.Drawing.Point(193, 441);
+ this.uiSwitch4.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSwitch4.Name = "uiSwitch4";
+ this.uiSwitch4.Size = new System.Drawing.Size(75, 29);
+ this.uiSwitch4.SwitchShape = Sunny.UI.UISwitch.UISwitchShape.Square;
+ this.uiSwitch4.TabIndex = 57;
+ this.uiSwitch4.Text = "uiSwitch4";
+ //
+ // FButton
+ //
+ this.AlwaysOpen = true;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 534);
+ this.Name = "FButton";
+ this.Symbol = 61640;
+ this.Text = "Button";
+ this.PagePanel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton4)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UIButton uiButton13;
+ private UIButton uiButton14;
+ private UIButton uiButton15;
+ private UIButton uiButton16;
+ private UIButton uiButton17;
+ private UIButton uiButton18;
+ private UIButton uiButton7;
+ private UIButton uiButton8;
+ private UIButton uiButton9;
+ private UIButton uiButton10;
+ private UIButton uiButton11;
+ private UIButton uiButton12;
+ private UIButton uiButton4;
+ private UIButton uiButton5;
+ private UIButton uiButton6;
+ private UIButton uiButton3;
+ private UIButton uiButton2;
+ private UIButton uiButton1;
+ private UILine uiLine1;
+ private UILine uiLine2;
+ private UISymbolButton uiSymbolButton3;
+ private UISymbolButton uiSymbolButton4;
+ private UISymbolButton uiSymbolButton6;
+ private UISymbolButton uiSymbolButton5;
+ private UISymbolButton uiSymbolButton7;
+ private UISymbolButton uiSymbolButton8;
+ private UISymbolButton uiSymbolButton9;
+ private UISymbolButton uiSymbolButton10;
+ private UISymbolButton uiSymbolButton11;
+ private UISymbolButton uiSymbolButton12;
+ private UISymbolButton uiSymbolButton19;
+ private UISymbolButton uiSymbolButton20;
+ private UISymbolButton uiSymbolButton21;
+ private UISymbolButton uiSymbolButton13;
+ private UISymbolButton uiSymbolButton14;
+ private UISymbolButton uiSymbolButton15;
+ private UISymbolButton uiSymbolButton16;
+ private UISymbolButton uiSymbolButton17;
+ private UISymbolButton uiSymbolButton18;
+ private UILine uiLine3;
+ private UISymbolButton uiSymbolButton24;
+ private UISymbolButton uiSymbolButton23;
+ private UISymbolButton uiSymbolButton22;
+ private UISwitch uiSwitch2;
+ private UILine uiLine4;
+ private UISwitch uiSwitch1;
+ private UILine uiLine5;
+ private UIImageButton uiImageButton3;
+ private UIImageButton uiImageButton2;
+ private UIImageButton uiImageButton1;
+ private UIImageButton uiImageButton4;
+ private UIToolTip uiToolTip1;
+ private UISymbolButton uiSymbolButton25;
+ private UISymbolButton uiSymbolButton2;
+ private UISymbolButton uiSymbolButton1;
+ private UISymbolButton uiSymbolButton26;
+ private UISwitch uiSwitch3;
+ private UISwitch uiSwitch4;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FButton.cs b/SunnyUI.Net5.Demo/Controls/FButton.cs
new file mode 100644
index 00000000..0901779b
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FButton.cs
@@ -0,0 +1,36 @@
+using System;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FButton : UITitlePage
+ {
+ public FButton()
+ {
+ InitializeComponent();
+ uiToolTip1.SetToolTip(uiButton1, uiButton1.Text);
+ uiToolTip1.SetToolTip(uiSymbolButton1, uiSymbolButton1.Text, "SunnyUI");
+ uiToolTip1.SetToolTip(uiSymbolButton2, uiSymbolButton2.Text, "SunnyUI",
+ uiSymbolButton2.Symbol, 32, UIColor.Red);
+ }
+
+ private void uiButton10_Click(object sender, EventArgs e)
+ {
+ uiButton10.Selected = !uiButton10.Selected;
+ }
+
+ private void uiSwitch1_ValueChanged(object sender, bool value)
+ {
+ Console.WriteLine(uiSwitch1.Active);
+ }
+
+ private void uiSwitch1_Click(object sender, EventArgs e)
+ {
+ Console.WriteLine(uiSwitch1.Active);
+ }
+
+ private void uiButton13_Click(object sender, EventArgs e)
+ {
+ Frame.SelectPage(1004);
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FButton.resx b/SunnyUI.Net5.Demo/Controls/FButton.resx
new file mode 100644
index 00000000..eaa39c0c
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FButton.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+ 17, 17
+
+
+ 52
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FCheckBox.Designer.cs b/SunnyUI.Net5.Demo/Controls/FCheckBox.Designer.cs
new file mode 100644
index 00000000..fbcb5bd7
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FCheckBox.Designer.cs
@@ -0,0 +1,214 @@
+namespace Sunny.UI.Demo
+{
+ partial class FCheckBox
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FCheckBox));
+ this.uiCheckBox1 = new Sunny.UI.UICheckBox();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiCheckBox3 = new Sunny.UI.UICheckBox();
+ this.uiCheckBox4 = new Sunny.UI.UICheckBox();
+ this.uiCheckBox2 = new Sunny.UI.UICheckBox();
+ this.uiCheckBoxGroup1 = new Sunny.UI.UICheckBoxGroup();
+ this.uiButton1 = new Sunny.UI.UIButton();
+ this.uiButton2 = new Sunny.UI.UIButton();
+ this.uiButton3 = new Sunny.UI.UIButton();
+ this.uiButton4 = new Sunny.UI.UIButton();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiButton4);
+ this.PagePanel.Controls.Add(this.uiButton3);
+ this.PagePanel.Controls.Add(this.uiButton2);
+ this.PagePanel.Controls.Add(this.uiButton1);
+ this.PagePanel.Controls.Add(this.uiCheckBoxGroup1);
+ this.PagePanel.Controls.Add(this.uiCheckBox2);
+ this.PagePanel.Controls.Add(this.uiCheckBox4);
+ this.PagePanel.Controls.Add(this.uiCheckBox3);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiCheckBox1);
+ this.PagePanel.Size = new System.Drawing.Size(800, 521);
+ //
+ // uiCheckBox1
+ //
+ this.uiCheckBox1.Checked = true;
+ this.uiCheckBox1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiCheckBox1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiCheckBox1.Location = new System.Drawing.Point(30, 48);
+ this.uiCheckBox1.Name = "uiCheckBox1";
+ this.uiCheckBox1.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiCheckBox1.Size = new System.Drawing.Size(150, 35);
+ this.uiCheckBox1.TabIndex = 0;
+ this.uiCheckBox1.Text = "uiCheckBox1";
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 19;
+ this.uiLine1.Text = "UICheckBox";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiCheckBox3
+ //
+ this.uiCheckBox3.Checked = true;
+ this.uiCheckBox3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiCheckBox3.Enabled = false;
+ this.uiCheckBox3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiCheckBox3.Location = new System.Drawing.Point(354, 46);
+ this.uiCheckBox3.Name = "uiCheckBox3";
+ this.uiCheckBox3.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiCheckBox3.Size = new System.Drawing.Size(150, 35);
+ this.uiCheckBox3.TabIndex = 21;
+ this.uiCheckBox3.Text = "uiCheckBox3";
+ //
+ // uiCheckBox4
+ //
+ this.uiCheckBox4.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiCheckBox4.Enabled = false;
+ this.uiCheckBox4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiCheckBox4.Location = new System.Drawing.Point(516, 46);
+ this.uiCheckBox4.Name = "uiCheckBox4";
+ this.uiCheckBox4.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiCheckBox4.Size = new System.Drawing.Size(150, 35);
+ this.uiCheckBox4.TabIndex = 22;
+ this.uiCheckBox4.Text = "uiCheckBox4";
+ //
+ // uiCheckBox2
+ //
+ this.uiCheckBox2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiCheckBox2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiCheckBox2.Location = new System.Drawing.Point(192, 48);
+ this.uiCheckBox2.Name = "uiCheckBox2";
+ this.uiCheckBox2.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiCheckBox2.Size = new System.Drawing.Size(150, 35);
+ this.uiCheckBox2.TabIndex = 39;
+ this.uiCheckBox2.Text = "uiCheckBox2";
+ //
+ // uiCheckBoxGroup1
+ //
+ this.uiCheckBoxGroup1.ColumnCount = 2;
+ this.uiCheckBoxGroup1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiCheckBoxGroup1.Items.AddRange(new object[] {
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"});
+ this.uiCheckBoxGroup1.ItemSize = new System.Drawing.Size(110, 35);
+ this.uiCheckBoxGroup1.Location = new System.Drawing.Point(30, 91);
+ this.uiCheckBoxGroup1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiCheckBoxGroup1.Name = "uiCheckBoxGroup1";
+ this.uiCheckBoxGroup1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0);
+ this.uiCheckBoxGroup1.SelectedIndexes = ((System.Collections.Generic.List)(resources.GetObject("uiCheckBoxGroup1.SelectedIndexes")));
+ this.uiCheckBoxGroup1.Size = new System.Drawing.Size(670, 211);
+ this.uiCheckBoxGroup1.TabIndex = 41;
+ this.uiCheckBoxGroup1.Text = "UICheckBoxGroup";
+ this.uiCheckBoxGroup1.ValueChanged += new Sunny.UI.UICheckBoxGroup.OnValueChanged(this.uiCheckBoxGroup1_ValueChanged);
+ //
+ // uiButton1
+ //
+ this.uiButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton1.Location = new System.Drawing.Point(30, 310);
+ this.uiButton1.Name = "uiButton1";
+ this.uiButton1.Size = new System.Drawing.Size(100, 35);
+ this.uiButton1.TabIndex = 42;
+ this.uiButton1.Text = "全选";
+ this.uiButton1.Click += new System.EventHandler(this.uiButton1_Click);
+ //
+ // uiButton2
+ //
+ this.uiButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton2.Location = new System.Drawing.Point(136, 310);
+ this.uiButton2.Name = "uiButton2";
+ this.uiButton2.Size = new System.Drawing.Size(100, 35);
+ this.uiButton2.TabIndex = 43;
+ this.uiButton2.Text = "全不选";
+ this.uiButton2.Click += new System.EventHandler(this.uiButton2_Click);
+ //
+ // uiButton3
+ //
+ this.uiButton3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton3.Location = new System.Drawing.Point(242, 310);
+ this.uiButton3.Name = "uiButton3";
+ this.uiButton3.Size = new System.Drawing.Size(100, 35);
+ this.uiButton3.TabIndex = 44;
+ this.uiButton3.Text = "反选";
+ this.uiButton3.Click += new System.EventHandler(this.uiButton3_Click);
+ //
+ // uiButton4
+ //
+ this.uiButton4.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton4.Location = new System.Drawing.Point(348, 310);
+ this.uiButton4.Name = "uiButton4";
+ this.uiButton4.Size = new System.Drawing.Size(100, 35);
+ this.uiButton4.TabIndex = 45;
+ this.uiButton4.Text = "选择";
+ this.uiButton4.Click += new System.EventHandler(this.uiButton4_Click);
+ //
+ // FCheckBox
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 556);
+ this.Name = "FCheckBox";
+ this.Symbol = 61770;
+ this.Text = "CheckBox";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UICheckBox uiCheckBox1;
+ private UILine uiLine1;
+ private UICheckBox uiCheckBox4;
+ private UICheckBox uiCheckBox3;
+ private UICheckBox uiCheckBox2;
+ private UICheckBoxGroup uiCheckBoxGroup1;
+ private UIButton uiButton3;
+ private UIButton uiButton2;
+ private UIButton uiButton1;
+ private UIButton uiButton4;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FCheckBox.cs b/SunnyUI.Net5.Demo/Controls/FCheckBox.cs
new file mode 100644
index 00000000..e451f6c1
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FCheckBox.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FCheckBox : UITitlePage
+ {
+ public FCheckBox()
+ {
+ InitializeComponent();
+ uiCheckBoxGroup1.SelectedIndexes = new List() { 2, 4 };
+ }
+
+ private void uiCheckBoxGroup1_ValueChanged(object sender, int index, string text, bool isChecked)
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.Append("SelectedIndexes: ");
+ foreach (var selectedIndex in uiCheckBoxGroup1.SelectedIndexes)
+ {
+ sb.Append(selectedIndex);
+ sb.Append(", ");
+ }
+
+ Console.WriteLine("SelectedIndex: " + index + ", SelectedText: " + text + "\n" + sb.ToString());
+ }
+
+ private void uiButton1_Click(object sender, System.EventArgs e)
+ {
+ uiCheckBoxGroup1.SelectAll();
+ }
+
+ private void uiButton2_Click(object sender, System.EventArgs e)
+ {
+ uiCheckBoxGroup1.UnSelectAll();
+ }
+
+ private void uiButton3_Click(object sender, System.EventArgs e)
+ {
+ uiCheckBoxGroup1.ReverseSelected();
+ }
+
+ private void uiButton4_Click(object sender, EventArgs e)
+ {
+ uiCheckBoxGroup1.SelectedIndexes = new List() { 2, 4 };
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FCheckBox.resx b/SunnyUI.Net5.Demo/Controls/FCheckBox.resx
new file mode 100644
index 00000000..a9d4ffb3
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FCheckBox.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAJoBbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1u
+ ZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0sIG1zY29ybGliLCBWZXJzaW9u
+ PTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQUB
+ AAAAL1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLkludDMyAwAAAAZfaXRl
+ bXMFX3NpemUIX3ZlcnNpb24HAAAICAgCAAAACQMAAAAAAAAAAAAAAA8DAAAAAAAAAAgL
+
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FCombobox.Designer.cs b/SunnyUI.Net5.Demo/Controls/FCombobox.Designer.cs
new file mode 100644
index 00000000..ef867db5
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FCombobox.Designer.cs
@@ -0,0 +1,481 @@
+namespace Sunny.UI.Demo
+{
+ partial class FCombobox
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.TreeNode treeNode29 = new System.Windows.Forms.TreeNode("节点0");
+ System.Windows.Forms.TreeNode treeNode30 = new System.Windows.Forms.TreeNode("节点1");
+ System.Windows.Forms.TreeNode treeNode31 = new System.Windows.Forms.TreeNode("节点2");
+ System.Windows.Forms.TreeNode treeNode32 = new System.Windows.Forms.TreeNode("节点3");
+ System.Windows.Forms.TreeNode treeNode25 = new System.Windows.Forms.TreeNode("节点0");
+ System.Windows.Forms.TreeNode treeNode26 = new System.Windows.Forms.TreeNode("节点1");
+ System.Windows.Forms.TreeNode treeNode27 = new System.Windows.Forms.TreeNode("节点2");
+ System.Windows.Forms.TreeNode treeNode28 = new System.Windows.Forms.TreeNode("节点3");
+ System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("节点0");
+ System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("节点1");
+ System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("节点2");
+ System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("节点3");
+ System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] {
+ treeNode1,
+ treeNode2,
+ treeNode3,
+ treeNode4});
+ System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("节点4");
+ System.Windows.Forms.TreeNode treeNode7 = new System.Windows.Forms.TreeNode("节点5");
+ System.Windows.Forms.TreeNode treeNode8 = new System.Windows.Forms.TreeNode("节点6");
+ System.Windows.Forms.TreeNode treeNode9 = new System.Windows.Forms.TreeNode("节点7");
+ System.Windows.Forms.TreeNode treeNode10 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] {
+ treeNode6,
+ treeNode7,
+ treeNode8,
+ treeNode9});
+ System.Windows.Forms.TreeNode treeNode11 = new System.Windows.Forms.TreeNode("节点2");
+ System.Windows.Forms.TreeNode treeNode12 = new System.Windows.Forms.TreeNode("节点3");
+ System.Windows.Forms.TreeNode treeNode13 = new System.Windows.Forms.TreeNode("节点00");
+ System.Windows.Forms.TreeNode treeNode14 = new System.Windows.Forms.TreeNode("节点01");
+ System.Windows.Forms.TreeNode treeNode15 = new System.Windows.Forms.TreeNode("节点02");
+ System.Windows.Forms.TreeNode treeNode16 = new System.Windows.Forms.TreeNode("节点03");
+ System.Windows.Forms.TreeNode treeNode17 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] {
+ treeNode13,
+ treeNode14,
+ treeNode15,
+ treeNode16});
+ System.Windows.Forms.TreeNode treeNode18 = new System.Windows.Forms.TreeNode("节点11");
+ System.Windows.Forms.TreeNode treeNode19 = new System.Windows.Forms.TreeNode("节点12");
+ System.Windows.Forms.TreeNode treeNode20 = new System.Windows.Forms.TreeNode("节点13");
+ System.Windows.Forms.TreeNode treeNode21 = new System.Windows.Forms.TreeNode("节点14");
+ System.Windows.Forms.TreeNode treeNode22 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] {
+ treeNode18,
+ treeNode19,
+ treeNode20,
+ treeNode21});
+ System.Windows.Forms.TreeNode treeNode23 = new System.Windows.Forms.TreeNode("节点2");
+ System.Windows.Forms.TreeNode treeNode24 = new System.Windows.Forms.TreeNode("节点3");
+ this.uiLine8 = new Sunny.UI.UILine();
+ this.uiDatetimePicker1 = new Sunny.UI.UIDatetimePicker();
+ this.uiColorPicker1 = new Sunny.UI.UIColorPicker();
+ this.uiLine7 = new Sunny.UI.UILine();
+ this.uiLine6 = new Sunny.UI.UILine();
+ this.uiTimePicker1 = new Sunny.UI.UITimePicker();
+ this.uiLine3 = new Sunny.UI.UILine();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.uiDatePicker1 = new Sunny.UI.UIDatePicker();
+ this.uiComboBox2 = new Sunny.UI.UIComboBox();
+ this.uiComboBox1 = new Sunny.UI.UIComboBox();
+ this.uiComboTreeView1 = new Sunny.UI.UIComboTreeView();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiComboTreeView2 = new Sunny.UI.UIComboTreeView();
+ this.uiComboTreeView3 = new Sunny.UI.UIComboTreeView();
+ this.uiComboTreeView4 = new Sunny.UI.UIComboTreeView();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiComboTreeView3);
+ this.PagePanel.Controls.Add(this.uiComboTreeView4);
+ this.PagePanel.Controls.Add(this.uiComboTreeView2);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiComboTreeView1);
+ this.PagePanel.Controls.Add(this.uiLine8);
+ this.PagePanel.Controls.Add(this.uiDatetimePicker1);
+ this.PagePanel.Controls.Add(this.uiColorPicker1);
+ this.PagePanel.Controls.Add(this.uiLine7);
+ this.PagePanel.Controls.Add(this.uiLine6);
+ this.PagePanel.Controls.Add(this.uiTimePicker1);
+ this.PagePanel.Controls.Add(this.uiLine3);
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiDatePicker1);
+ this.PagePanel.Controls.Add(this.uiComboBox2);
+ this.PagePanel.Controls.Add(this.uiComboBox1);
+ //
+ // uiLine8
+ //
+ this.uiLine8.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine8.Location = new System.Drawing.Point(388, 102);
+ this.uiLine8.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine8.Name = "uiLine8";
+ this.uiLine8.Size = new System.Drawing.Size(306, 20);
+ this.uiLine8.TabIndex = 42;
+ this.uiLine8.Text = "UIDatetimePicker";
+ this.uiLine8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiDatetimePicker1
+ //
+ this.uiDatetimePicker1.CanEmpty = true;
+ this.uiDatetimePicker1.FillColor = System.Drawing.Color.White;
+ this.uiDatetimePicker1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiDatetimePicker1.Location = new System.Drawing.Point(388, 136);
+ this.uiDatetimePicker1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiDatetimePicker1.MaxLength = 19;
+ this.uiDatetimePicker1.MinimumSize = new System.Drawing.Size(63, 0);
+ this.uiDatetimePicker1.Name = "uiDatetimePicker1";
+ this.uiDatetimePicker1.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
+ this.uiDatetimePicker1.Size = new System.Drawing.Size(306, 29);
+ this.uiDatetimePicker1.SymbolDropDown = 61555;
+ this.uiDatetimePicker1.SymbolNormal = 61555;
+ this.uiDatetimePicker1.TabIndex = 41;
+ this.uiDatetimePicker1.Text = "2020-06-02 17:57:28";
+ this.uiDatetimePicker1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiDatetimePicker1.Value = new System.DateTime(2020, 6, 2, 17, 57, 28, 203);
+ this.uiDatetimePicker1.ValueChanged += new Sunny.UI.UIDatetimePicker.OnDateTimeChanged(this.uiDatetimePicker1_ValueChanged);
+ //
+ // uiColorPicker1
+ //
+ this.uiColorPicker1.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList;
+ this.uiColorPicker1.FillColor = System.Drawing.Color.White;
+ this.uiColorPicker1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiColorPicker1.Location = new System.Drawing.Point(388, 54);
+ this.uiColorPicker1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiColorPicker1.MinimumSize = new System.Drawing.Size(63, 0);
+ this.uiColorPicker1.Name = "uiColorPicker1";
+ this.uiColorPicker1.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
+ this.uiColorPicker1.Size = new System.Drawing.Size(150, 29);
+ this.uiColorPicker1.TabIndex = 40;
+ this.uiColorPicker1.Text = "uiColorPicker1";
+ this.uiColorPicker1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiColorPicker1.Value = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ //
+ // uiLine7
+ //
+ this.uiLine7.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine7.Location = new System.Drawing.Point(388, 20);
+ this.uiLine7.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine7.Name = "uiLine7";
+ this.uiLine7.Size = new System.Drawing.Size(306, 20);
+ this.uiLine7.TabIndex = 39;
+ this.uiLine7.Text = "UIColorPicker";
+ this.uiLine7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine6
+ //
+ this.uiLine6.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine6.Location = new System.Drawing.Point(188, 102);
+ this.uiLine6.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine6.Name = "uiLine6";
+ this.uiLine6.Size = new System.Drawing.Size(150, 20);
+ this.uiLine6.TabIndex = 38;
+ this.uiLine6.Text = "UITimePicker";
+ this.uiLine6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiTimePicker1
+ //
+ this.uiTimePicker1.CanEmpty = true;
+ this.uiTimePicker1.FillColor = System.Drawing.Color.White;
+ this.uiTimePicker1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiTimePicker1.Location = new System.Drawing.Point(188, 136);
+ this.uiTimePicker1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiTimePicker1.MaxLength = 8;
+ this.uiTimePicker1.MinimumSize = new System.Drawing.Size(63, 0);
+ this.uiTimePicker1.Name = "uiTimePicker1";
+ this.uiTimePicker1.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
+ this.uiTimePicker1.Size = new System.Drawing.Size(150, 29);
+ this.uiTimePicker1.SymbolDropDown = 61555;
+ this.uiTimePicker1.SymbolNormal = 61555;
+ this.uiTimePicker1.TabIndex = 37;
+ this.uiTimePicker1.Text = "23:41:39";
+ this.uiTimePicker1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiTimePicker1.Value = new System.DateTime(2020, 5, 29, 23, 41, 39, 684);
+ this.uiTimePicker1.ValueChanged += new Sunny.UI.UITimePicker.OnDateTimeChanged(this.uiTimePicker1_ValueChanged);
+ //
+ // uiLine3
+ //
+ this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine3.Location = new System.Drawing.Point(30, 102);
+ this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine3.Name = "uiLine3";
+ this.uiLine3.Size = new System.Drawing.Size(150, 20);
+ this.uiLine3.TabIndex = 36;
+ this.uiLine3.Text = "UIDatePicker";
+ this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(30, 20);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(308, 20);
+ this.uiLine2.TabIndex = 35;
+ this.uiLine2.Text = "UIComboBox";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiDatePicker1
+ //
+ this.uiDatePicker1.CanEmpty = true;
+ this.uiDatePicker1.FillColor = System.Drawing.Color.White;
+ this.uiDatePicker1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiDatePicker1.Location = new System.Drawing.Point(30, 136);
+ this.uiDatePicker1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiDatePicker1.MaxLength = 10;
+ this.uiDatePicker1.MinimumSize = new System.Drawing.Size(63, 0);
+ this.uiDatePicker1.Name = "uiDatePicker1";
+ this.uiDatePicker1.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
+ this.uiDatePicker1.Size = new System.Drawing.Size(150, 29);
+ this.uiDatePicker1.SymbolDropDown = 61555;
+ this.uiDatePicker1.SymbolNormal = 61555;
+ this.uiDatePicker1.TabIndex = 34;
+ this.uiDatePicker1.Text = "2020-04-16";
+ this.uiDatePicker1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiDatePicker1.Value = new System.DateTime(2020, 4, 16, 0, 0, 0, 0);
+ this.uiDatePicker1.ValueChanged += new Sunny.UI.UIDatePicker.OnDateTimeChanged(this.uiDatePicker1_ValueChanged);
+ //
+ // uiComboBox2
+ //
+ this.uiComboBox2.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList;
+ this.uiComboBox2.DropDownWidth = 300;
+ this.uiComboBox2.FillColor = System.Drawing.Color.White;
+ this.uiComboBox2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiComboBox2.Items.AddRange(new object[] {
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6"});
+ this.uiComboBox2.Location = new System.Drawing.Point(188, 54);
+ this.uiComboBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiComboBox2.MinimumSize = new System.Drawing.Size(63, 0);
+ this.uiComboBox2.Name = "uiComboBox2";
+ this.uiComboBox2.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
+ this.uiComboBox2.Size = new System.Drawing.Size(150, 29);
+ this.uiComboBox2.TabIndex = 33;
+ this.uiComboBox2.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiComboBox1
+ //
+ this.uiComboBox1.FillColor = System.Drawing.Color.White;
+ this.uiComboBox1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiComboBox1.Items.AddRange(new object[] {
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6"});
+ this.uiComboBox1.Location = new System.Drawing.Point(30, 54);
+ this.uiComboBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiComboBox1.MinimumSize = new System.Drawing.Size(63, 0);
+ this.uiComboBox1.Name = "uiComboBox1";
+ this.uiComboBox1.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
+ this.uiComboBox1.Size = new System.Drawing.Size(150, 29);
+ this.uiComboBox1.TabIndex = 32;
+ this.uiComboBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiComboBox1.Watermark = "水印文字";
+ this.uiComboBox1.DropDown += new System.EventHandler(this.uiComboBox1_DropDown);
+ //
+ // uiComboTreeView1
+ //
+ this.uiComboTreeView1.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList;
+ this.uiComboTreeView1.FillColor = System.Drawing.Color.White;
+ this.uiComboTreeView1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiComboTreeView1.Location = new System.Drawing.Point(30, 215);
+ this.uiComboTreeView1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiComboTreeView1.MinimumSize = new System.Drawing.Size(63, 0);
+ this.uiComboTreeView1.Name = "uiComboTreeView1";
+ treeNode29.Name = "节点0";
+ treeNode29.Text = "节点0";
+ treeNode30.Name = "节点1";
+ treeNode30.Text = "节点1";
+ treeNode31.Name = "节点2";
+ treeNode31.Text = "节点2";
+ treeNode32.Name = "节点3";
+ treeNode32.Text = "节点3";
+ this.uiComboTreeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+ treeNode29,
+ treeNode30,
+ treeNode31,
+ treeNode32});
+ this.uiComboTreeView1.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
+ this.uiComboTreeView1.Size = new System.Drawing.Size(150, 29);
+ this.uiComboTreeView1.TabIndex = 43;
+ this.uiComboTreeView1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiComboTreeView1.NodeSelected += new Sunny.UI.UIComboTreeView.OnNodeSelected(this.uiComboTreeView1_NodeSelected);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 181);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(664, 20);
+ this.uiLine1.TabIndex = 45;
+ this.uiLine1.Text = "UIComboTreeView";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiComboTreeView2
+ //
+ this.uiComboTreeView2.CheckBoxes = true;
+ this.uiComboTreeView2.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList;
+ this.uiComboTreeView2.FillColor = System.Drawing.Color.White;
+ this.uiComboTreeView2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiComboTreeView2.Location = new System.Drawing.Point(188, 215);
+ this.uiComboTreeView2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiComboTreeView2.MinimumSize = new System.Drawing.Size(63, 0);
+ this.uiComboTreeView2.Name = "uiComboTreeView2";
+ treeNode25.Name = "节点0";
+ treeNode25.Text = "节点0";
+ treeNode26.Name = "节点1";
+ treeNode26.Text = "节点1";
+ treeNode27.Name = "节点2";
+ treeNode27.Text = "节点2";
+ treeNode28.Name = "节点3";
+ treeNode28.Text = "节点3";
+ this.uiComboTreeView2.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+ treeNode25,
+ treeNode26,
+ treeNode27,
+ treeNode28});
+ this.uiComboTreeView2.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
+ this.uiComboTreeView2.Size = new System.Drawing.Size(150, 29);
+ this.uiComboTreeView2.TabIndex = 46;
+ this.uiComboTreeView2.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiComboTreeView2.NodesSelected += new Sunny.UI.UIComboTreeView.OnNodesSelected(this.uiComboTreeView2_NodesSelected);
+ //
+ // uiComboTreeView3
+ //
+ this.uiComboTreeView3.CheckBoxes = true;
+ this.uiComboTreeView3.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList;
+ this.uiComboTreeView3.FillColor = System.Drawing.Color.White;
+ this.uiComboTreeView3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiComboTreeView3.Location = new System.Drawing.Point(546, 215);
+ this.uiComboTreeView3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiComboTreeView3.MinimumSize = new System.Drawing.Size(63, 0);
+ this.uiComboTreeView3.Name = "uiComboTreeView3";
+ treeNode1.Name = "节点0";
+ treeNode1.Text = "节点0";
+ treeNode2.Name = "节点1";
+ treeNode2.Text = "节点1";
+ treeNode3.Name = "节点2";
+ treeNode3.Text = "节点2";
+ treeNode4.Name = "节点3";
+ treeNode4.Text = "节点3";
+ treeNode5.Name = "节点0";
+ treeNode5.Text = "节点0";
+ treeNode6.Name = "节点4";
+ treeNode6.Text = "节点4";
+ treeNode7.Name = "节点5";
+ treeNode7.Text = "节点5";
+ treeNode8.Name = "节点6";
+ treeNode8.Text = "节点6";
+ treeNode9.Name = "节点7";
+ treeNode9.Text = "节点7";
+ treeNode10.Name = "节点1";
+ treeNode10.Text = "节点1";
+ treeNode11.Name = "节点2";
+ treeNode11.Text = "节点2";
+ treeNode12.Name = "节点3";
+ treeNode12.Text = "节点3";
+ this.uiComboTreeView3.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+ treeNode5,
+ treeNode10,
+ treeNode11,
+ treeNode12});
+ this.uiComboTreeView3.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
+ this.uiComboTreeView3.ShowLines = true;
+ this.uiComboTreeView3.Size = new System.Drawing.Size(150, 29);
+ this.uiComboTreeView3.TabIndex = 48;
+ this.uiComboTreeView3.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiComboTreeView4
+ //
+ this.uiComboTreeView4.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList;
+ this.uiComboTreeView4.FillColor = System.Drawing.Color.White;
+ this.uiComboTreeView4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiComboTreeView4.Location = new System.Drawing.Point(388, 215);
+ this.uiComboTreeView4.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiComboTreeView4.MinimumSize = new System.Drawing.Size(63, 0);
+ this.uiComboTreeView4.Name = "uiComboTreeView4";
+ treeNode13.Name = "节点0";
+ treeNode13.Text = "节点00";
+ treeNode14.Name = "节点1";
+ treeNode14.Text = "节点01";
+ treeNode15.Name = "节点2";
+ treeNode15.Text = "节点02";
+ treeNode16.Name = "节点3";
+ treeNode16.Text = "节点03";
+ treeNode17.Name = "节点0";
+ treeNode17.Text = "节点0";
+ treeNode18.Name = "节点4";
+ treeNode18.Text = "节点11";
+ treeNode19.Name = "节点5";
+ treeNode19.Text = "节点12";
+ treeNode20.Name = "节点6";
+ treeNode20.Text = "节点13";
+ treeNode21.Name = "节点7";
+ treeNode21.Text = "节点14";
+ treeNode22.Name = "节点1";
+ treeNode22.Text = "节点1";
+ treeNode23.Name = "节点2";
+ treeNode23.Text = "节点2";
+ treeNode24.Name = "节点3";
+ treeNode24.Text = "节点3";
+ this.uiComboTreeView4.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+ treeNode17,
+ treeNode22,
+ treeNode23,
+ treeNode24});
+ this.uiComboTreeView4.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2);
+ this.uiComboTreeView4.ShowLines = true;
+ this.uiComboTreeView4.Size = new System.Drawing.Size(150, 29);
+ this.uiComboTreeView4.TabIndex = 47;
+ this.uiComboTreeView4.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FCombobox
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "FCombobox";
+ this.Symbol = 61776;
+ this.Text = "Combobox";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UILine uiLine8;
+ private UIDatetimePicker uiDatetimePicker1;
+ private UIColorPicker uiColorPicker1;
+ private UILine uiLine7;
+ private UILine uiLine6;
+ private UITimePicker uiTimePicker1;
+ private UILine uiLine3;
+ private UILine uiLine2;
+ private UIDatePicker uiDatePicker1;
+ private UIComboBox uiComboBox2;
+ private UIComboBox uiComboBox1;
+ private UIComboTreeView uiComboTreeView2;
+ private UILine uiLine1;
+ private UIComboTreeView uiComboTreeView1;
+ private UIComboTreeView uiComboTreeView3;
+ private UIComboTreeView uiComboTreeView4;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FCombobox.cs b/SunnyUI.Net5.Demo/Controls/FCombobox.cs
new file mode 100644
index 00000000..8a902fa7
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FCombobox.cs
@@ -0,0 +1,46 @@
+using System;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FCombobox : UITitlePage
+ {
+ public FCombobox()
+ {
+ InitializeComponent();
+ }
+
+ private void uiDatePicker1_ValueChanged(object sender, DateTime value)
+ {
+ uiDatePicker1.Value.ConsoleWriteLine();
+ }
+
+ private void uiDatetimePicker1_ValueChanged(object sender, DateTime value)
+ {
+ uiDatetimePicker1.Value.ConsoleWriteLine();
+ }
+
+ private void uiTimePicker1_ValueChanged(object sender, DateTime value)
+ {
+ uiTimePicker1.Value.ConsoleWriteLine();
+ }
+
+ private void uiComboBox1_DropDown(object sender, EventArgs e)
+ {
+ uiComboBox1.Items.Clear();
+ uiComboBox1.Items.Add("100");
+ uiComboBox1.Items.Add("101");
+ uiComboBox1.Items.Add("102");
+ uiComboBox1.Items.Add("103");
+ }
+
+ private void uiComboTreeView1_NodeSelected(object sender, System.Windows.Forms.TreeNode node)
+ {
+ ShowInfoTip(node.Text);
+ }
+
+ private void uiComboTreeView2_NodesSelected(object sender, System.Windows.Forms.TreeNodeCollection node)
+ {
+ ShowInfoTip(uiComboTreeView2.Text);
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Controls/FCombobox.resx b/SunnyUI.Net5.Demo/Controls/FCombobox.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FCombobox.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FContextMenuStrip.Designer.cs b/SunnyUI.Net5.Demo/Controls/FContextMenuStrip.Designer.cs
new file mode 100644
index 00000000..4d08dee7
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FContextMenuStrip.Designer.cs
@@ -0,0 +1,104 @@
+namespace Sunny.UI.Demo
+{
+ partial class FContextMenuStrip
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiButton1 = new Sunny.UI.UIButton();
+ this.uiContextMenuStrip1 = new Sunny.UI.UIContextMenuStrip();
+ this.uiButton2 = new Sunny.UI.UIButton();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiButton2);
+ this.PagePanel.Controls.Add(this.uiButton1);
+ //
+ // uiButton1
+ //
+ this.uiButton1.ContextMenuStrip = this.uiContextMenuStrip1;
+ this.uiButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton1.Location = new System.Drawing.Point(30, 57);
+ this.uiButton1.Name = "uiButton1";
+ this.uiButton1.Size = new System.Drawing.Size(232, 35);
+ this.uiButton1.TabIndex = 0;
+ this.uiButton1.Text = "右键菜单";
+ //
+ // uiContextMenuStrip1
+ //
+ this.uiContextMenuStrip1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiContextMenuStrip1.Name = "uiContextMenuStrip1";
+ this.uiContextMenuStrip1.Size = new System.Drawing.Size(61, 4);
+ //
+ // uiButton2
+ //
+ this.uiButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton2.Location = new System.Drawing.Point(294, 57);
+ this.uiButton2.Name = "uiButton2";
+ this.uiButton2.Size = new System.Drawing.Size(232, 35);
+ this.uiButton2.TabIndex = 1;
+ this.uiButton2.Text = "左键菜单";
+ this.uiButton2.Click += new System.EventHandler(this.uiButton2_Click);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 19;
+ this.uiLine1.Text = "UIContextMenuStrip";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FContextMenuStrip
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "FContextMenuStrip";
+ this.Symbol = 62104;
+ this.Text = "ContextMenuStrip";
+ this.Controls.SetChildIndex(this.PagePanel, 0);
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UIButton uiButton1;
+ private UIButton uiButton2;
+ private UILine uiLine1;
+ private UIContextMenuStrip uiContextMenuStrip1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FContextMenuStrip.cs b/SunnyUI.Net5.Demo/Controls/FContextMenuStrip.cs
new file mode 100644
index 00000000..b984f371
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FContextMenuStrip.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Windows.Forms;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FContextMenuStrip : UITitlePage
+ {
+ public FContextMenuStrip()
+ {
+ InitializeComponent();
+
+ var styles = UIStyles.PopularStyles();
+ foreach (UIStyle style in styles)
+ {
+ ToolStripMenuItem item = new ToolStripMenuItem(style.DisplayText()) { Tag = style };
+ item.Click += Item_Click;
+ uiContextMenuStrip1.Items.Add(item);
+ }
+ }
+
+ private void Item_Click(object sender, EventArgs e)
+ {
+ ToolStripMenuItem item = (ToolStripMenuItem)sender;
+ if (item.Tag != null && item.Tag is UIStyle style)
+ {
+ this.Style = style;
+ }
+ }
+
+ private void uiButton2_Click(object sender, System.EventArgs e)
+ {
+ uiButton2.ShowContextMenuStrip(uiContextMenuStrip1, 0, uiButton2.Height);
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Controls/FContextMenuStrip.resx b/SunnyUI.Net5.Demo/Controls/FContextMenuStrip.resx
new file mode 100644
index 00000000..93ecf1d7
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FContextMenuStrip.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FDataGridView.Designer.cs b/SunnyUI.Net5.Demo/Controls/FDataGridView.Designer.cs
new file mode 100644
index 00000000..5273ee8f
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FDataGridView.Designer.cs
@@ -0,0 +1,131 @@
+namespace Sunny.UI.Demo
+{
+ partial class FDataGridView
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
+ this.uiDataGridView1 = new Sunny.UI.UIDataGridView();
+ this.uiPagination1 = new Sunny.UI.UIPagination();
+ this.PagePanel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.uiDataGridView1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiDataGridView1);
+ this.PagePanel.Controls.Add(this.uiPagination1);
+ this.PagePanel.Size = new System.Drawing.Size(861, 415);
+ //
+ // uiDataGridView1
+ //
+ this.uiDataGridView1.AllowUserToAddRows = false;
+ this.uiDataGridView1.AllowUserToResizeRows = false;
+ dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiDataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1;
+ this.uiDataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
+ this.uiDataGridView1.BackgroundColor = System.Drawing.Color.White;
+ this.uiDataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.uiDataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
+ this.uiDataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
+ dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ dataGridViewCellStyle2.ForeColor = System.Drawing.Color.White;
+ dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.uiDataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2;
+ this.uiDataGridView1.ColumnHeadersHeight = 32;
+ this.uiDataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
+ dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Window;
+ dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ dataGridViewCellStyle3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
+ dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(155)))), ((int)(((byte)(200)))), ((int)(((byte)(255)))));
+ dataGridViewCellStyle3.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
+ dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+ this.uiDataGridView1.DefaultCellStyle = dataGridViewCellStyle3;
+ this.uiDataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.uiDataGridView1.EnableHeadersVisualStyles = false;
+ this.uiDataGridView1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiDataGridView1.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiDataGridView1.Location = new System.Drawing.Point(0, 0);
+ this.uiDataGridView1.MultiSelect = false;
+ this.uiDataGridView1.Name = "uiDataGridView1";
+ this.uiDataGridView1.RowHeadersVisible = false;
+ dataGridViewCellStyle4.BackColor = System.Drawing.Color.White;
+ this.uiDataGridView1.RowsDefaultCellStyle = dataGridViewCellStyle4;
+ this.uiDataGridView1.RowTemplate.Height = 29;
+ this.uiDataGridView1.SelectedIndex = -1;
+ this.uiDataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
+ this.uiDataGridView1.ShowRect = false;
+ this.uiDataGridView1.Size = new System.Drawing.Size(861, 380);
+ this.uiDataGridView1.TabIndex = 0;
+ //
+ // uiPagination1
+ //
+ this.uiPagination1.ActivePage = 50;
+ this.uiPagination1.CausesValidation = false;
+ this.uiPagination1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.uiPagination1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiPagination1.Location = new System.Drawing.Point(0, 380);
+ this.uiPagination1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiPagination1.Name = "uiPagination1";
+ this.uiPagination1.PagerCount = 11;
+ this.uiPagination1.PageSize = 50;
+ this.uiPagination1.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None;
+ this.uiPagination1.Size = new System.Drawing.Size(861, 35);
+ this.uiPagination1.TabIndex = 1;
+ this.uiPagination1.Text = "uiDataGridPage1";
+ this.uiPagination1.TotalCount = 40000;
+ this.uiPagination1.PageChanged += new Sunny.UI.UIPagination.OnPageChangeEventHandler(this.uiPagination1_PageChanged);
+ //
+ // FDataGridView
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(861, 450);
+ this.Name = "FDataGridView";
+ this.Symbol = 61646;
+ this.Text = "DataGridView";
+ this.PagePanel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.uiDataGridView1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+
+ #endregion
+
+ private UIDataGridView uiDataGridView1;
+ private UIPagination uiPagination1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FDataGridView.cs b/SunnyUI.Net5.Demo/Controls/FDataGridView.cs
new file mode 100644
index 00000000..fff34bb0
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FDataGridView.cs
@@ -0,0 +1,58 @@
+using System.Collections.Generic;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FDataGridView : UITitlePage
+ {
+ public FDataGridView()
+ {
+ InitializeComponent();
+
+ uiDataGridView1.AddColumn("Column1", "Column1").SetFixedMode(400);
+ uiDataGridView1.AddColumn("Column2", "Column2").SetFixedMode(400);
+ uiDataGridView1.AddColumn("Column3", "Column3").SetFixedMode(400);
+ uiDataGridView1.AddColumn("Column4", "Column4").SetFixedMode(400);
+ uiDataGridView1.ReadOnly = true;
+ }
+
+ public override void Init()
+ {
+ base.Init();
+
+ List datas = new List();
+ for (int i = 0; i < 3650; i++)
+ {
+ Data data = new Data();
+ data.Column1 = "Data" + i.ToString("D2");
+ data.Column2 = i.Mod(2) == 0 ? "A" : "B";
+ data.Column3 = "编辑";
+ data.Column4 = i.Mod(4) == 0;
+ datas.Add(data);
+ }
+
+ uiPagination1.DataSource = datas;
+ uiPagination1.ActivePage = 1;
+ }
+
+ public class Data
+ {
+ public string Column1 { get; set; }
+
+ public string Column2 { get; set; }
+
+ public string Column3 { get; set; }
+
+ public bool Column4 { get; set; }
+
+ public override string ToString()
+ {
+ return Column1;
+ }
+ }
+
+ private void uiPagination1_PageChanged(object sender, object pagingSource, int pageIndex, int count)
+ {
+ uiDataGridView1.DataSource = pagingSource;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FDataGridView.resx b/SunnyUI.Net5.Demo/Controls/FDataGridView.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FDataGridView.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FFlowLayoutPanel.Designer.cs b/SunnyUI.Net5.Demo/Controls/FFlowLayoutPanel.Designer.cs
new file mode 100644
index 00000000..ec068fe7
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FFlowLayoutPanel.Designer.cs
@@ -0,0 +1,84 @@
+namespace Sunny.UI.Demo
+{
+ partial class FFlowLayoutPanel
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiButton1 = new Sunny.UI.UIButton();
+ this.uiFlowLayoutPanel1 = new Sunny.UI.UIFlowLayoutPanel();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiButton1);
+ this.PagePanel.Controls.Add(this.uiFlowLayoutPanel1);
+ this.PagePanel.Size = new System.Drawing.Size(873, 482);
+ //
+ // uiButton1
+ //
+ this.uiButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton1.Location = new System.Drawing.Point(30, 418);
+ this.uiButton1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton1.Name = "uiButton1";
+ this.uiButton1.Size = new System.Drawing.Size(100, 35);
+ this.uiButton1.TabIndex = 9;
+ this.uiButton1.Text = "uiButton1";
+ this.uiButton1.Click += new System.EventHandler(this.uiButton1_Click);
+ //
+ // uiFlowLayoutPanel1
+ //
+ this.uiFlowLayoutPanel1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiFlowLayoutPanel1.Location = new System.Drawing.Point(30, 20);
+ this.uiFlowLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiFlowLayoutPanel1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiFlowLayoutPanel1.Name = "uiFlowLayoutPanel1";
+ this.uiFlowLayoutPanel1.Padding = new System.Windows.Forms.Padding(2);
+ this.uiFlowLayoutPanel1.Size = new System.Drawing.Size(249, 390);
+ this.uiFlowLayoutPanel1.TabIndex = 8;
+ this.uiFlowLayoutPanel1.Text = "uiFlowLayoutPanel1";
+ //
+ // FFlowLayoutPanel
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(873, 517);
+ this.Name = "FFlowLayoutPanel";
+ this.Symbol = 61590;
+ this.Text = "FlowLayoutPanel";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UIButton uiButton1;
+ private UIFlowLayoutPanel uiFlowLayoutPanel1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FFlowLayoutPanel.cs b/SunnyUI.Net5.Demo/Controls/FFlowLayoutPanel.cs
new file mode 100644
index 00000000..a4455f2d
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FFlowLayoutPanel.cs
@@ -0,0 +1,32 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FFlowLayoutPanel : UITitlePage
+ {
+ public FFlowLayoutPanel()
+ {
+ InitializeComponent();
+
+
+ }
+
+ public override void Init()
+ {
+ base.Init();
+ uiFlowLayoutPanel1.Clear();
+ index = 0;
+
+ for (int i = 0; i < 30; i++)
+ {
+ uiButton1.PerformClick();
+ }
+ }
+
+ private int index;
+ private void uiButton1_Click(object sender, System.EventArgs e)
+ {
+ UIButton btn = new UIButton();
+ btn.Text = "Button" + index++.ToString("D2");
+ uiFlowLayoutPanel1.AddControl(btn);
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Controls/FFlowLayoutPanel.resx b/SunnyUI.Net5.Demo/Controls/FFlowLayoutPanel.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FFlowLayoutPanel.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FLabel.Designer.cs b/SunnyUI.Net5.Demo/Controls/FLabel.Designer.cs
new file mode 100644
index 00000000..3c8388b3
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FLabel.Designer.cs
@@ -0,0 +1,160 @@
+namespace Sunny.UI.Demo
+{
+ partial class FLabel
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiLabel1 = new Sunny.UI.UILabel();
+ this.uiLinkLabel1 = new Sunny.UI.UILinkLabel();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.uiLine3 = new Sunny.UI.UILine();
+ this.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel();
+ this.uiSymbolLabel2 = new Sunny.UI.UISymbolLabel();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiSymbolLabel2);
+ this.PagePanel.Controls.Add(this.uiSymbolLabel1);
+ this.PagePanel.Controls.Add(this.uiLine3);
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiLinkLabel1);
+ this.PagePanel.Controls.Add(this.uiLabel1);
+ //
+ // uiLabel1
+ //
+ this.uiLabel1.AutoSize = true;
+ this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel1.Location = new System.Drawing.Point(42, 55);
+ this.uiLabel1.Name = "uiLabel1";
+ this.uiLabel1.Size = new System.Drawing.Size(102, 21);
+ this.uiLabel1.TabIndex = 0;
+ this.uiLabel1.Text = "Hello world!";
+ this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLinkLabel1
+ //
+ this.uiLinkLabel1.ActiveLinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiLinkLabel1.AutoSize = true;
+ this.uiLinkLabel1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLinkLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
+ this.uiLinkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline;
+ this.uiLinkLabel1.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
+ this.uiLinkLabel1.Location = new System.Drawing.Point(42, 127);
+ this.uiLinkLabel1.Name = "uiLinkLabel1";
+ this.uiLinkLabel1.Size = new System.Drawing.Size(146, 21);
+ this.uiLinkLabel1.TabIndex = 1;
+ this.uiLinkLabel1.TabStop = true;
+ this.uiLinkLabel1.Text = "www.SunnyUI.net";
+ this.uiLinkLabel1.VisitedLinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiLinkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.uiLinkLabel1_LinkClicked);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 19;
+ this.uiLine1.Text = "UILabel";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(30, 92);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(670, 20);
+ this.uiLine2.TabIndex = 20;
+ this.uiLine2.Text = "UILinkLabel";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine3
+ //
+ this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine3.Location = new System.Drawing.Point(30, 173);
+ this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine3.Name = "uiLine3";
+ this.uiLine3.Size = new System.Drawing.Size(670, 20);
+ this.uiLine3.TabIndex = 21;
+ this.uiLine3.Text = "UISymbolLabel";
+ this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiSymbolLabel1
+ //
+ this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolLabel1.Location = new System.Drawing.Point(42, 209);
+ this.uiSymbolLabel1.Name = "uiSymbolLabel1";
+ this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolLabel1.Size = new System.Drawing.Size(91, 24);
+ this.uiSymbolLabel1.TabIndex = 22;
+ this.uiSymbolLabel1.Text = "OK";
+ this.uiSymbolLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiSymbolLabel2
+ //
+ this.uiSymbolLabel2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolLabel2.Location = new System.Drawing.Point(139, 209);
+ this.uiSymbolLabel2.Name = "uiSymbolLabel2";
+ this.uiSymbolLabel2.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolLabel2.Size = new System.Drawing.Size(91, 24);
+ this.uiSymbolLabel2.Symbol = 61453;
+ this.uiSymbolLabel2.TabIndex = 23;
+ this.uiSymbolLabel2.Text = "Cancel";
+ this.uiSymbolLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FLabel
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "FLabel";
+ this.StyleCustomMode = true;
+ this.Symbol = 61490;
+ this.Text = "Label";
+ this.PagePanel.ResumeLayout(false);
+ this.PagePanel.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UILabel uiLabel1;
+ private UILinkLabel uiLinkLabel1;
+ private UILine uiLine3;
+ private UILine uiLine2;
+ private UILine uiLine1;
+ private UISymbolLabel uiSymbolLabel1;
+ private UISymbolLabel uiSymbolLabel2;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FLabel.cs b/SunnyUI.Net5.Demo/Controls/FLabel.cs
new file mode 100644
index 00000000..ce636100
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FLabel.cs
@@ -0,0 +1,18 @@
+using System.Diagnostics;
+using System.Windows.Forms;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FLabel : UITitlePage
+ {
+ public FLabel()
+ {
+ InitializeComponent();
+ }
+
+ private void uiLinkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ Process.Start(uiLinkLabel1.Text);
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FLabel.resx b/SunnyUI.Net5.Demo/Controls/FLabel.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FLabel.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FLine.Designer.cs b/SunnyUI.Net5.Demo/Controls/FLine.Designer.cs
new file mode 100644
index 00000000..17a31ff3
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FLine.Designer.cs
@@ -0,0 +1,216 @@
+namespace Sunny.UI.Demo
+{
+ partial class FLine
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.uiLine3 = new Sunny.UI.UILine();
+ this.uiLine4 = new Sunny.UI.UILine();
+ this.uiLine5 = new Sunny.UI.UILine();
+ this.uiLine6 = new Sunny.UI.UILine();
+ this.uiLine7 = new Sunny.UI.UILine();
+ this.uiLine8 = new Sunny.UI.UILine();
+ this.uiLine9 = new Sunny.UI.UILine();
+ this.uiLine10 = new Sunny.UI.UILine();
+ this.uiLine11 = new Sunny.UI.UILine();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiLine11);
+ this.PagePanel.Controls.Add(this.uiLine10);
+ this.PagePanel.Controls.Add(this.uiLine7);
+ this.PagePanel.Controls.Add(this.uiLine8);
+ this.PagePanel.Controls.Add(this.uiLine9);
+ this.PagePanel.Controls.Add(this.uiLine4);
+ this.PagePanel.Controls.Add(this.uiLine5);
+ this.PagePanel.Controls.Add(this.uiLine6);
+ this.PagePanel.Controls.Add(this.uiLine3);
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Size = new System.Drawing.Size(800, 521);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(443, 33);
+ this.uiLine1.TabIndex = 0;
+ this.uiLine1.Text = "文字左上 LineSize=1";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.TopLeft;
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.LineSize = 2;
+ this.uiLine2.Location = new System.Drawing.Point(30, 58);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(443, 29);
+ this.uiLine2.TabIndex = 1;
+ this.uiLine2.Text = "文字左中 LineSize=2";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine3
+ //
+ this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiLine3.LineSize = 3;
+ this.uiLine3.Location = new System.Drawing.Point(30, 93);
+ this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine3.Name = "uiLine3";
+ this.uiLine3.Size = new System.Drawing.Size(443, 51);
+ this.uiLine3.TabIndex = 2;
+ this.uiLine3.Text = "文字左下 LineSize=3";
+ this.uiLine3.TextAlign = System.Drawing.ContentAlignment.BottomLeft;
+ //
+ // uiLine4
+ //
+ this.uiLine4.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiLine4.LineSize = 3;
+ this.uiLine4.Location = new System.Drawing.Point(30, 245);
+ this.uiLine4.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine4.Name = "uiLine4";
+ this.uiLine4.Size = new System.Drawing.Size(443, 51);
+ this.uiLine4.TabIndex = 5;
+ this.uiLine4.Text = "文字中下";
+ this.uiLine4.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
+ //
+ // uiLine5
+ //
+ this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine5.LineSize = 2;
+ this.uiLine5.Location = new System.Drawing.Point(30, 210);
+ this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine5.Name = "uiLine5";
+ this.uiLine5.Size = new System.Drawing.Size(443, 29);
+ this.uiLine5.TabIndex = 4;
+ this.uiLine5.Text = "文字居中";
+ //
+ // uiLine6
+ //
+ this.uiLine6.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiLine6.Location = new System.Drawing.Point(30, 172);
+ this.uiLine6.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine6.Name = "uiLine6";
+ this.uiLine6.Size = new System.Drawing.Size(443, 33);
+ this.uiLine6.TabIndex = 3;
+ this.uiLine6.Text = "文字中上";
+ this.uiLine6.TextAlign = System.Drawing.ContentAlignment.TopCenter;
+ //
+ // uiLine7
+ //
+ this.uiLine7.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiLine7.LineSize = 3;
+ this.uiLine7.Location = new System.Drawing.Point(30, 393);
+ this.uiLine7.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine7.Name = "uiLine7";
+ this.uiLine7.Size = new System.Drawing.Size(443, 51);
+ this.uiLine7.TabIndex = 8;
+ this.uiLine7.Text = "文字右下";
+ this.uiLine7.TextAlign = System.Drawing.ContentAlignment.BottomRight;
+ //
+ // uiLine8
+ //
+ this.uiLine8.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine8.LineSize = 2;
+ this.uiLine8.Location = new System.Drawing.Point(30, 358);
+ this.uiLine8.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine8.Name = "uiLine8";
+ this.uiLine8.Size = new System.Drawing.Size(443, 29);
+ this.uiLine8.TabIndex = 7;
+ this.uiLine8.Text = "文字右中";
+ this.uiLine8.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // uiLine9
+ //
+ this.uiLine9.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiLine9.Location = new System.Drawing.Point(30, 320);
+ this.uiLine9.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine9.Name = "uiLine9";
+ this.uiLine9.Size = new System.Drawing.Size(443, 33);
+ this.uiLine9.TabIndex = 6;
+ this.uiLine9.Text = "文字右上";
+ this.uiLine9.TextAlign = System.Drawing.ContentAlignment.TopRight;
+ //
+ // uiLine10
+ //
+ this.uiLine10.Direction = Sunny.UI.UILine.LineDirection.Vertical;
+ this.uiLine10.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiLine10.Location = new System.Drawing.Point(521, 32);
+ this.uiLine10.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine10.Name = "uiLine10";
+ this.uiLine10.Size = new System.Drawing.Size(51, 388);
+ this.uiLine10.TabIndex = 11;
+ this.uiLine10.Text = "uiLine10";
+ this.uiLine10.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine11
+ //
+ this.uiLine11.Direction = Sunny.UI.UILine.LineDirection.Vertical;
+ this.uiLine11.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiLine11.LineSize = 2;
+ this.uiLine11.Location = new System.Drawing.Point(578, 32);
+ this.uiLine11.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine11.Name = "uiLine11";
+ this.uiLine11.Size = new System.Drawing.Size(51, 388);
+ this.uiLine11.TabIndex = 12;
+ this.uiLine11.Text = "uiLine11";
+ this.uiLine11.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FLine
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 556);
+ this.Name = "FLine";
+ this.Symbol = 61544;
+ this.Text = "Line";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UILine uiLine7;
+ private UILine uiLine8;
+ private UILine uiLine9;
+ private UILine uiLine4;
+ private UILine uiLine5;
+ private UILine uiLine6;
+ private UILine uiLine3;
+ private UILine uiLine2;
+ private UILine uiLine1;
+ private UILine uiLine10;
+ private UILine uiLine11;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FLine.cs b/SunnyUI.Net5.Demo/Controls/FLine.cs
new file mode 100644
index 00000000..aedddd68
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FLine.cs
@@ -0,0 +1,10 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FLine : UITitlePage
+ {
+ public FLine()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FLine.resx b/SunnyUI.Net5.Demo/Controls/FLine.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FLine.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FListBox.Designer.cs b/SunnyUI.Net5.Demo/Controls/FListBox.Designer.cs
new file mode 100644
index 00000000..14b90eef
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FListBox.Designer.cs
@@ -0,0 +1,151 @@
+namespace Sunny.UI.Demo
+{
+ partial class FListBox
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiImageListBox1 = new Sunny.UI.UIImageListBox();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.uiListBox1 = new Sunny.UI.UIListBox();
+ this.uiCheckBox1 = new Sunny.UI.UICheckBox();
+ this.uiButton1 = new Sunny.UI.UIButton();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiButton1);
+ this.PagePanel.Controls.Add(this.uiCheckBox1);
+ this.PagePanel.Controls.Add(this.uiListBox1);
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiImageListBox1);
+ this.PagePanel.Size = new System.Drawing.Size(800, 465);
+ //
+ // uiImageListBox1
+ //
+ this.uiImageListBox1.FillColor = System.Drawing.Color.White;
+ this.uiImageListBox1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiImageListBox1.ItemHeight = 80;
+ this.uiImageListBox1.ItemSelectForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiImageListBox1.Location = new System.Drawing.Point(355, 48);
+ this.uiImageListBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiImageListBox1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiImageListBox1.Name = "uiImageListBox1";
+ this.uiImageListBox1.Padding = new System.Windows.Forms.Padding(2);
+ this.uiImageListBox1.Size = new System.Drawing.Size(266, 343);
+ this.uiImageListBox1.TabIndex = 1;
+ this.uiImageListBox1.Text = "uiImageListBox1";
+ this.uiImageListBox1.ItemDoubleClick += new System.EventHandler(this.uiImageListBox1_ItemDoubleClick);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(33, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(266, 18);
+ this.uiLine1.TabIndex = 19;
+ this.uiLine1.Text = "uiListBox";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(355, 20);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(266, 18);
+ this.uiLine2.TabIndex = 20;
+ this.uiLine2.Text = "uiImageListBox";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiListBox1
+ //
+ this.uiListBox1.FillColor = System.Drawing.Color.White;
+ this.uiListBox1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiListBox1.ItemSelectForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiListBox1.Location = new System.Drawing.Point(33, 48);
+ this.uiListBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiListBox1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiListBox1.Name = "uiListBox1";
+ this.uiListBox1.Padding = new System.Windows.Forms.Padding(2);
+ this.uiListBox1.Size = new System.Drawing.Size(270, 343);
+ this.uiListBox1.TabIndex = 21;
+ this.uiListBox1.Text = "uiListBox1";
+ this.uiListBox1.ItemDoubleClick += new System.EventHandler(this.uiListBox1_ItemDoubleClick);
+ //
+ // uiCheckBox1
+ //
+ this.uiCheckBox1.Checked = true;
+ this.uiCheckBox1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiCheckBox1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiCheckBox1.Location = new System.Drawing.Point(355, 399);
+ this.uiCheckBox1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiCheckBox1.Name = "uiCheckBox1";
+ this.uiCheckBox1.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiCheckBox1.Size = new System.Drawing.Size(266, 35);
+ this.uiCheckBox1.TabIndex = 22;
+ this.uiCheckBox1.Text = "ShowDescription";
+ this.uiCheckBox1.ValueChanged += new Sunny.UI.UICheckBox.OnValueChanged(this.uiCheckBox1_ValueChanged);
+ //
+ // uiButton1
+ //
+ this.uiButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton1.Location = new System.Drawing.Point(33, 400);
+ this.uiButton1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton1.Name = "uiButton1";
+ this.uiButton1.Size = new System.Drawing.Size(100, 35);
+ this.uiButton1.TabIndex = 23;
+ this.uiButton1.Text = "Add Item";
+ this.uiButton1.Click += new System.EventHandler(this.uiButton1_Click);
+ this.uiButton1.DoubleClick += new System.EventHandler(this.uiButton1_DoubleClick);
+ //
+ // FListBox
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 500);
+ this.Name = "FListBox";
+ this.Symbol = 61474;
+ this.Text = "ListBox";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ private UIImageListBox uiImageListBox1;
+ private UILine uiLine2;
+ private UILine uiLine1;
+ private UIListBox uiListBox1;
+ private UICheckBox uiCheckBox1;
+ private UIButton uiButton1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FListBox.cs b/SunnyUI.Net5.Demo/Controls/FListBox.cs
new file mode 100644
index 00000000..41ddaab3
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FListBox.cs
@@ -0,0 +1,86 @@
+using Sunny.UI.Demo.Properties;
+using System;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FListBox : UITitlePage
+ {
+ public FListBox()
+ {
+ InitializeComponent();
+ }
+
+ public override void Init()
+ {
+ uiListBox1.Items.Clear();
+ for (int i = 0; i < 50; i++)
+ {
+ uiListBox1.Items.Add(i);
+ }
+
+ uiImageListBox1.Items.Clear();
+ // string[] files = System.IO.Directory.GetFiles(DirEx.CurrentDir() + "Team",
+ // "*.png", SearchOption.TopDirectoryOnly);
+ // foreach (string file in files)
+ // {
+ // uiImageListBox1.AddImage(file, file.FileInfo().Name);
+ // Console.WriteLine(file.FileInfo().Name);
+ // }
+
+ uiImageListBox1.AddImage(Resources.ajax, "ajax.png");
+ uiImageListBox1.AddImage(Resources.atalanta, "atalanta.png");
+ uiImageListBox1.AddImage(Resources.barcelona, "barcelona.png");
+ uiImageListBox1.AddImage(Resources.benfica, "benfica.png");
+ uiImageListBox1.AddImage(Resources.betis, "betis.png");
+ uiImageListBox1.AddImage(Resources.brescia, "brescia.png");
+ uiImageListBox1.AddImage(Resources.chievo, "chievo.png");
+ uiImageListBox1.AddImage(Resources.deportivo, "deportivo.png");
+ uiImageListBox1.AddImage(Resources.feyenoord, "feyenoord.png");
+ uiImageListBox1.AddImage(Resources.heerenveen, "heerenveen.png");
+ uiImageListBox1.AddImage(Resources.inter, "inter.png");
+ uiImageListBox1.AddImage(Resources.lazio, "lazio.png");
+ uiImageListBox1.AddImage(Resources.mallorca, "mallorca.png");
+ uiImageListBox1.AddImage(Resources.milan, "milan.png");
+ uiImageListBox1.AddImage(Resources.parma, "parma.png");
+ uiImageListBox1.AddImage(Resources.porto, "porto.png");
+ uiImageListBox1.AddImage(Resources.psv, "psv.png");
+ uiImageListBox1.AddImage(Resources.real_madrid, "real_madrid.png");
+ uiImageListBox1.AddImage(Resources.real_sociedad, "real_sociedad.png");
+ uiImageListBox1.AddImage(Resources.roma, "roma.png");
+ uiImageListBox1.AddImage(Resources.sevilla, "sevilla.png");
+ uiImageListBox1.AddImage(Resources.udinese, "udinese.png");
+ uiImageListBox1.AddImage(Resources.valencia, "valencia.png");
+ uiImageListBox1.AddImage(Resources.villareal, "villareal.png");
+ uiImageListBox1.AddImage(Resources.zaragoza, "zaragoza.png");
+ }
+
+ private void uiImageListBox1_ItemDoubleClick(object sender, System.EventArgs e)
+ {
+ this.ShowInfoDialog(uiImageListBox1.SelectedItem.ImagePath);
+ }
+
+ private void uiCheckBox1_ValueChanged(object sender, bool value)
+ {
+ uiImageListBox1.ShowDescription = !uiImageListBox1.ShowDescription;
+ uiImageListBox1.ItemHeight = uiImageListBox1.ShowDescription ? 80 : 50;
+ }
+
+ private void uiListBox1_ItemDoubleClick(object sender, System.EventArgs e)
+ {
+ this.ShowInfoDialog(uiListBox1.SelectedItem.ToString());
+ }
+
+ private int num = 0;
+ private void uiButton1_Click(object sender, System.EventArgs e)
+ {
+ uiListBox1.Items.Add(DateTime.Now.ToString("yyyyMMdd") + "_" + num);
+ num++;
+ }
+
+ private void uiButton1_DoubleClick(object sender, EventArgs e)
+ {
+ uiListBox1.Items.Add(DateTime.Now.ToString("yyyyMMdd") + "_double_" + num);
+ num++;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FListBox.resx b/SunnyUI.Net5.Demo/Controls/FListBox.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FListBox.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FMeter.Designer.cs b/SunnyUI.Net5.Demo/Controls/FMeter.Designer.cs
new file mode 100644
index 00000000..1669af84
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FMeter.Designer.cs
@@ -0,0 +1,283 @@
+namespace Sunny.UI.Demo
+{
+ partial class FMeter
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FMeter));
+ this.uiAnalogMeter1 = new Sunny.UI.UIAnalogMeter();
+ this.uiLine9 = new Sunny.UI.UILine();
+ this.uiLine7 = new Sunny.UI.UILine();
+ this.uiLine6 = new Sunny.UI.UILine();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiLedStopwatch1 = new Sunny.UI.UILedStopwatch();
+ this.uiLedDisplay1 = new Sunny.UI.UILedDisplay();
+ this.timer1 = new System.Windows.Forms.Timer(this.components);
+ this.uiRoundMeter2 = new Sunny.UI.UIRoundMeter();
+ this.uiRoundMeter1 = new Sunny.UI.UIRoundMeter();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.uiBattery1 = new Sunny.UI.UIBattery();
+ this.uiBattery2 = new Sunny.UI.UIBattery();
+ this.uiBattery3 = new Sunny.UI.UIBattery();
+ this.uiBattery4 = new Sunny.UI.UIBattery();
+ this.uiBattery5 = new Sunny.UI.UIBattery();
+ this.uiBattery6 = new Sunny.UI.UIBattery();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiBattery6);
+ this.PagePanel.Controls.Add(this.uiBattery5);
+ this.PagePanel.Controls.Add(this.uiBattery4);
+ this.PagePanel.Controls.Add(this.uiBattery3);
+ this.PagePanel.Controls.Add(this.uiBattery2);
+ this.PagePanel.Controls.Add(this.uiBattery1);
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiAnalogMeter1);
+ this.PagePanel.Controls.Add(this.uiLine9);
+ this.PagePanel.Controls.Add(this.uiLine7);
+ this.PagePanel.Controls.Add(this.uiRoundMeter2);
+ this.PagePanel.Controls.Add(this.uiLine6);
+ this.PagePanel.Controls.Add(this.uiRoundMeter1);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiLedStopwatch1);
+ this.PagePanel.Controls.Add(this.uiLedDisplay1);
+ //
+ // uiAnalogMeter1
+ //
+ this.uiAnalogMeter1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiAnalogMeter1.Location = new System.Drawing.Point(381, 146);
+ this.uiAnalogMeter1.MaxValue = 100D;
+ this.uiAnalogMeter1.MinValue = 0D;
+ this.uiAnalogMeter1.Name = "uiAnalogMeter1";
+ this.uiAnalogMeter1.Renderer = null;
+ this.uiAnalogMeter1.Size = new System.Drawing.Size(140, 140);
+ this.uiAnalogMeter1.TabIndex = 52;
+ this.uiAnalogMeter1.Text = "uiAnalogMeter1";
+ this.uiAnalogMeter1.Value = 0D;
+ //
+ // uiLine9
+ //
+ this.uiLine9.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine9.Location = new System.Drawing.Point(381, 105);
+ this.uiLine9.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine9.Name = "uiLine9";
+ this.uiLine9.Size = new System.Drawing.Size(319, 20);
+ this.uiLine9.TabIndex = 51;
+ this.uiLine9.Text = "UIAnalogMeter";
+ this.uiLine9.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine7
+ //
+ this.uiLine7.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine7.Location = new System.Drawing.Point(381, 20);
+ this.uiLine7.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine7.Name = "uiLine7";
+ this.uiLine7.Size = new System.Drawing.Size(319, 20);
+ this.uiLine7.TabIndex = 50;
+ this.uiLine7.Text = "UILedStopwatch";
+ this.uiLine7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine6
+ //
+ this.uiLine6.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine6.Location = new System.Drawing.Point(30, 105);
+ this.uiLine6.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine6.Name = "uiLine6";
+ this.uiLine6.Size = new System.Drawing.Size(319, 20);
+ this.uiLine6.TabIndex = 48;
+ this.uiLine6.Text = "UIRoundMeter";
+ this.uiLine6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ 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 = 46;
+ this.uiLine1.Text = "UILedDisplay";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLedStopwatch1
+ //
+ this.uiLedStopwatch1.Active = true;
+ this.uiLedStopwatch1.BackColor = System.Drawing.Color.Black;
+ this.uiLedStopwatch1.ForeColor = System.Drawing.Color.Lime;
+ this.uiLedStopwatch1.Location = new System.Drawing.Point(381, 52);
+ this.uiLedStopwatch1.Name = "uiLedStopwatch1";
+ this.uiLedStopwatch1.Size = new System.Drawing.Size(190, 34);
+ this.uiLedStopwatch1.TabIndex = 45;
+ this.uiLedStopwatch1.Text = "00:06";
+ //
+ // uiLedDisplay1
+ //
+ this.uiLedDisplay1.BackColor = System.Drawing.Color.Black;
+ this.uiLedDisplay1.ForeColor = System.Drawing.Color.Lime;
+ this.uiLedDisplay1.Location = new System.Drawing.Point(30, 52);
+ this.uiLedDisplay1.Name = "uiLedDisplay1";
+ this.uiLedDisplay1.Size = new System.Drawing.Size(190, 34);
+ this.uiLedDisplay1.TabIndex = 44;
+ this.uiLedDisplay1.Text = "999.9 Ω";
+ //
+ // timer1
+ //
+ this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
+ //
+ // uiRoundMeter2
+ //
+ this.uiRoundMeter2.Angle = 0D;
+ this.uiRoundMeter2.AngleImage = ((System.Drawing.Image)(resources.GetObject("uiRoundMeter2.AngleImage")));
+ this.uiRoundMeter2.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("uiRoundMeter2.BackgroundImage")));
+ this.uiRoundMeter2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
+ this.uiRoundMeter2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRoundMeter2.Location = new System.Drawing.Point(186, 141);
+ this.uiRoundMeter2.MeterType = Sunny.UI.UIRoundMeter.TMeterType.Wind;
+ this.uiRoundMeter2.Name = "uiRoundMeter2";
+ this.uiRoundMeter2.Size = new System.Drawing.Size(140, 140);
+ this.uiRoundMeter2.TabIndex = 49;
+ this.uiRoundMeter2.Text = "uiRoundMeter2";
+ //
+ // uiRoundMeter1
+ //
+ this.uiRoundMeter1.Angle = 0D;
+ this.uiRoundMeter1.AngleImage = ((System.Drawing.Image)(resources.GetObject("uiRoundMeter1.AngleImage")));
+ this.uiRoundMeter1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("uiRoundMeter1.BackgroundImage")));
+ this.uiRoundMeter1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
+ this.uiRoundMeter1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRoundMeter1.Location = new System.Drawing.Point(30, 136);
+ this.uiRoundMeter1.Name = "uiRoundMeter1";
+ this.uiRoundMeter1.Size = new System.Drawing.Size(150, 150);
+ this.uiRoundMeter1.TabIndex = 47;
+ this.uiRoundMeter1.Text = "uiRoundMeter1";
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(30, 292);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(319, 20);
+ this.uiLine2.TabIndex = 53;
+ this.uiLine2.Text = "UIBattery";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiBattery1
+ //
+ this.uiBattery1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiBattery1.Location = new System.Drawing.Point(30, 328);
+ this.uiBattery1.Name = "uiBattery1";
+ this.uiBattery1.Size = new System.Drawing.Size(48, 24);
+ this.uiBattery1.TabIndex = 54;
+ this.uiBattery1.Text = "uiBattery1";
+ //
+ // uiBattery2
+ //
+ this.uiBattery2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiBattery2.Location = new System.Drawing.Point(84, 328);
+ this.uiBattery2.Name = "uiBattery2";
+ this.uiBattery2.Power = 1;
+ this.uiBattery2.Size = new System.Drawing.Size(48, 24);
+ this.uiBattery2.TabIndex = 55;
+ this.uiBattery2.Text = "uiBattery2";
+ //
+ // uiBattery3
+ //
+ this.uiBattery3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiBattery3.Location = new System.Drawing.Point(138, 328);
+ this.uiBattery3.Name = "uiBattery3";
+ this.uiBattery3.Power = 25;
+ this.uiBattery3.Size = new System.Drawing.Size(48, 24);
+ this.uiBattery3.TabIndex = 56;
+ this.uiBattery3.Text = "uiBattery3";
+ //
+ // uiBattery4
+ //
+ this.uiBattery4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiBattery4.Location = new System.Drawing.Point(192, 328);
+ this.uiBattery4.Name = "uiBattery4";
+ this.uiBattery4.Power = 50;
+ this.uiBattery4.Size = new System.Drawing.Size(48, 24);
+ this.uiBattery4.TabIndex = 57;
+ this.uiBattery4.Text = "uiBattery4";
+ //
+ // uiBattery5
+ //
+ this.uiBattery5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiBattery5.Location = new System.Drawing.Point(246, 328);
+ this.uiBattery5.Name = "uiBattery5";
+ this.uiBattery5.Power = 75;
+ this.uiBattery5.Size = new System.Drawing.Size(48, 24);
+ this.uiBattery5.TabIndex = 58;
+ this.uiBattery5.Text = "uiBattery5";
+ //
+ // uiBattery6
+ //
+ this.uiBattery6.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiBattery6.Location = new System.Drawing.Point(301, 328);
+ this.uiBattery6.Name = "uiBattery6";
+ this.uiBattery6.Size = new System.Drawing.Size(48, 24);
+ this.uiBattery6.TabIndex = 59;
+ this.uiBattery6.Text = "uiBattery6";
+ //
+ // FMeter
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "FMeter";
+ this.Symbol = 61668;
+ this.Text = "Meter";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UIAnalogMeter uiAnalogMeter1;
+ private UILine uiLine9;
+ private UILine uiLine7;
+ private UIRoundMeter uiRoundMeter2;
+ private UILine uiLine6;
+ private UIRoundMeter uiRoundMeter1;
+ private UILine uiLine1;
+ private UILedStopwatch uiLedStopwatch1;
+ private UILedDisplay uiLedDisplay1;
+ private System.Windows.Forms.Timer timer1;
+ private UIBattery uiBattery6;
+ private UIBattery uiBattery5;
+ private UIBattery uiBattery4;
+ private UIBattery uiBattery3;
+ private UIBattery uiBattery2;
+ private UIBattery uiBattery1;
+ private UILine uiLine2;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FMeter.cs b/SunnyUI.Net5.Demo/Controls/FMeter.cs
new file mode 100644
index 00000000..eeb98335
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FMeter.cs
@@ -0,0 +1,28 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FMeter : UITitlePage
+ {
+ public FMeter()
+ {
+ InitializeComponent();
+ }
+
+ private int value;
+
+ public override void Init()
+ {
+ uiLedStopwatch1.Active = true;
+ value = 0;
+ timer1.ReStart();
+ }
+
+ private void timer1_Tick(object sender, System.EventArgs e)
+ {
+ value++;
+ uiRoundMeter1.Angle = value * 10;
+ uiRoundMeter2.Angle = value * 10;
+ uiAnalogMeter1.Value = value;
+ uiBattery1.Power = value;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FMeter.resx b/SunnyUI.Net5.Demo/Controls/FMeter.resx
new file mode 100644
index 00000000..ca7f12fe
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FMeter.resx
@@ -0,0 +1,824 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ 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
+ f+uvSxAXl/8PnMmNTepNpz0AAAAASUVORK5CYII=
+
+
+
+
+ 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
+
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FNavigation.Designer.cs b/SunnyUI.Net5.Demo/Controls/FNavigation.Designer.cs
new file mode 100644
index 00000000..ca8b50ec
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FNavigation.Designer.cs
@@ -0,0 +1,380 @@
+namespace Sunny.UI.Demo
+{
+ partial class FNavigation
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.TreeNode treeNode43 = new System.Windows.Forms.TreeNode("节点0");
+ System.Windows.Forms.TreeNode treeNode44 = new System.Windows.Forms.TreeNode("节点1");
+ System.Windows.Forms.TreeNode treeNode45 = new System.Windows.Forms.TreeNode("节点2");
+ System.Windows.Forms.TreeNode treeNode46 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] {
+ treeNode43,
+ treeNode44,
+ treeNode45});
+ System.Windows.Forms.TreeNode treeNode47 = new System.Windows.Forms.TreeNode("节点1");
+ System.Windows.Forms.TreeNode treeNode48 = new System.Windows.Forms.TreeNode("节点2");
+ System.Windows.Forms.TreeNode treeNode49 = new System.Windows.Forms.TreeNode("节点3");
+ System.Windows.Forms.TreeNode treeNode50 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] {
+ treeNode46,
+ treeNode47,
+ treeNode48,
+ treeNode49});
+ System.Windows.Forms.TreeNode treeNode51 = new System.Windows.Forms.TreeNode("节点4");
+ System.Windows.Forms.TreeNode treeNode52 = new System.Windows.Forms.TreeNode("节点5");
+ System.Windows.Forms.TreeNode treeNode53 = new System.Windows.Forms.TreeNode("节点6");
+ System.Windows.Forms.TreeNode treeNode54 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] {
+ treeNode51,
+ treeNode52,
+ treeNode53});
+ System.Windows.Forms.TreeNode treeNode55 = new System.Windows.Forms.TreeNode("节点7");
+ System.Windows.Forms.TreeNode treeNode56 = new System.Windows.Forms.TreeNode("节点8");
+ System.Windows.Forms.TreeNode treeNode57 = new System.Windows.Forms.TreeNode("节点2", new System.Windows.Forms.TreeNode[] {
+ treeNode55,
+ treeNode56});
+ System.Windows.Forms.TreeNode treeNode58 = new System.Windows.Forms.TreeNode("节点3");
+ System.Windows.Forms.TreeNode treeNode22 = new System.Windows.Forms.TreeNode("节点14");
+ System.Windows.Forms.TreeNode treeNode23 = new System.Windows.Forms.TreeNode("节点15");
+ System.Windows.Forms.TreeNode treeNode24 = new System.Windows.Forms.TreeNode("节点16");
+ System.Windows.Forms.TreeNode treeNode25 = new System.Windows.Forms.TreeNode("节点17");
+ System.Windows.Forms.TreeNode treeNode26 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] {
+ treeNode22,
+ treeNode23,
+ treeNode24,
+ treeNode25});
+ System.Windows.Forms.TreeNode treeNode27 = new System.Windows.Forms.TreeNode("节点18");
+ System.Windows.Forms.TreeNode treeNode28 = new System.Windows.Forms.TreeNode("节点19");
+ System.Windows.Forms.TreeNode treeNode29 = new System.Windows.Forms.TreeNode("节点20");
+ System.Windows.Forms.TreeNode treeNode30 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] {
+ treeNode27,
+ treeNode28,
+ treeNode29});
+ System.Windows.Forms.TreeNode treeNode31 = new System.Windows.Forms.TreeNode("节点2");
+ System.Windows.Forms.TreeNode treeNode32 = new System.Windows.Forms.TreeNode("节点3");
+ System.Windows.Forms.TreeNode treeNode33 = new System.Windows.Forms.TreeNode("节点4");
+ System.Windows.Forms.TreeNode treeNode34 = new System.Windows.Forms.TreeNode("节点5");
+ System.Windows.Forms.TreeNode treeNode35 = new System.Windows.Forms.TreeNode("节点6");
+ System.Windows.Forms.TreeNode treeNode36 = new System.Windows.Forms.TreeNode("节点7");
+ System.Windows.Forms.TreeNode treeNode37 = new System.Windows.Forms.TreeNode("节点8");
+ System.Windows.Forms.TreeNode treeNode38 = new System.Windows.Forms.TreeNode("节点9");
+ System.Windows.Forms.TreeNode treeNode39 = new System.Windows.Forms.TreeNode("节点10");
+ System.Windows.Forms.TreeNode treeNode40 = new System.Windows.Forms.TreeNode("节点11");
+ System.Windows.Forms.TreeNode treeNode41 = new System.Windows.Forms.TreeNode("节点12");
+ System.Windows.Forms.TreeNode treeNode42 = new System.Windows.Forms.TreeNode("节点13");
+ System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("节点14");
+ System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("节点15");
+ System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("节点16");
+ System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("节点17");
+ System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] {
+ treeNode1,
+ treeNode2,
+ treeNode3,
+ treeNode4});
+ System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("节点18");
+ System.Windows.Forms.TreeNode treeNode7 = new System.Windows.Forms.TreeNode("节点19");
+ System.Windows.Forms.TreeNode treeNode8 = new System.Windows.Forms.TreeNode("节点20");
+ System.Windows.Forms.TreeNode treeNode9 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] {
+ treeNode6,
+ treeNode7,
+ treeNode8});
+ System.Windows.Forms.TreeNode treeNode10 = new System.Windows.Forms.TreeNode("节点2");
+ System.Windows.Forms.TreeNode treeNode11 = new System.Windows.Forms.TreeNode("节点3");
+ System.Windows.Forms.TreeNode treeNode12 = new System.Windows.Forms.TreeNode("节点4");
+ System.Windows.Forms.TreeNode treeNode13 = new System.Windows.Forms.TreeNode("节点5");
+ System.Windows.Forms.TreeNode treeNode14 = new System.Windows.Forms.TreeNode("节点6");
+ System.Windows.Forms.TreeNode treeNode15 = new System.Windows.Forms.TreeNode("节点7");
+ System.Windows.Forms.TreeNode treeNode16 = new System.Windows.Forms.TreeNode("节点8");
+ System.Windows.Forms.TreeNode treeNode17 = new System.Windows.Forms.TreeNode("节点9");
+ System.Windows.Forms.TreeNode treeNode18 = new System.Windows.Forms.TreeNode("节点10");
+ System.Windows.Forms.TreeNode treeNode19 = new System.Windows.Forms.TreeNode("节点11");
+ System.Windows.Forms.TreeNode treeNode20 = new System.Windows.Forms.TreeNode("节点12");
+ System.Windows.Forms.TreeNode treeNode21 = new System.Windows.Forms.TreeNode("节点13");
+ this.uiNavBar1 = new Sunny.UI.UINavBar();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiNavMenu1 = new Sunny.UI.UINavMenu();
+ this.uiNavMenu2 = new Sunny.UI.UINavMenu();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.PagePanel.SuspendLayout();
+ this.uiNavBar1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiNavMenu2);
+ this.PagePanel.Controls.Add(this.uiNavMenu1);
+ this.PagePanel.Controls.Add(this.uiNavBar1);
+ this.PagePanel.Size = new System.Drawing.Size(1107, 626);
+ //
+ // uiNavBar1
+ //
+ this.uiNavBar1.Controls.Add(this.uiLine1);
+ this.uiNavBar1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.uiNavBar1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiNavBar1.Location = new System.Drawing.Point(0, 0);
+ this.uiNavBar1.Name = "uiNavBar1";
+ this.uiNavBar1.NodeAlignment = System.Drawing.StringAlignment.Near;
+ treeNode43.Name = "节点0";
+ treeNode43.Text = "节点0";
+ treeNode44.Name = "节点1";
+ treeNode44.Text = "节点1";
+ treeNode45.Name = "节点2";
+ treeNode45.Text = "节点2";
+ treeNode46.Name = "节点0";
+ treeNode46.Text = "节点0";
+ treeNode47.Name = "节点1";
+ treeNode47.Text = "节点1";
+ treeNode48.Name = "节点2";
+ treeNode48.Text = "节点2";
+ treeNode49.Name = "节点3";
+ treeNode49.Text = "节点3";
+ treeNode50.Name = "节点0";
+ treeNode50.Text = "节点0";
+ treeNode51.Name = "节点4";
+ treeNode51.Text = "节点4";
+ treeNode52.Name = "节点5";
+ treeNode52.Text = "节点5";
+ treeNode53.Name = "节点6";
+ treeNode53.Text = "节点6";
+ treeNode54.Name = "节点1";
+ treeNode54.Text = "节点1";
+ treeNode55.Name = "节点7";
+ treeNode55.Text = "节点7";
+ treeNode56.Name = "节点8";
+ treeNode56.Text = "节点8";
+ treeNode57.Name = "节点2";
+ treeNode57.Text = "节点2";
+ treeNode58.Name = "节点3";
+ treeNode58.Text = "节点3";
+ this.uiNavBar1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+ treeNode50,
+ treeNode54,
+ treeNode57,
+ treeNode58});
+ this.uiNavBar1.Size = new System.Drawing.Size(1107, 110);
+ this.uiNavBar1.TabIndex = 0;
+ this.uiNavBar1.Text = "uiNavBar1";
+ this.uiNavBar1.MenuItemClick += new Sunny.UI.UINavBar.OnMenuItemClick(this.uiNavBar1_MenuItemClick);
+ this.uiNavBar1.NodeMouseClick += new Sunny.UI.UINavBar.OnNodeMouseClick(this.uiNavBar1_NodeMouseClick);
+ //
+ // uiLine1
+ //
+ this.uiLine1.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56)))));
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.ForeColor = System.Drawing.Color.White;
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiLine1.StyleCustomMode = true;
+ this.uiLine1.TabIndex = 20;
+ this.uiLine1.Text = "UINavBar";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiNavMenu1
+ //
+ this.uiNavMenu1.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.uiNavMenu1.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll;
+ this.uiNavMenu1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiNavMenu1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
+ this.uiNavMenu1.FullRowSelect = true;
+ this.uiNavMenu1.ItemHeight = 50;
+ this.uiNavMenu1.Location = new System.Drawing.Point(30, 157);
+ this.uiNavMenu1.Name = "uiNavMenu1";
+ treeNode22.Name = "节点14";
+ treeNode22.Text = "节点14";
+ treeNode23.Name = "节点15";
+ treeNode23.Text = "节点15";
+ treeNode24.Name = "节点16";
+ treeNode24.Text = "节点16";
+ treeNode25.Name = "节点17";
+ treeNode25.Text = "节点17";
+ treeNode26.Name = "节点0";
+ treeNode26.Text = "节点0";
+ treeNode27.Name = "节点18";
+ treeNode27.Text = "节点18";
+ treeNode28.Name = "节点19";
+ treeNode28.Text = "节点19";
+ treeNode29.Name = "节点20";
+ treeNode29.Text = "节点20";
+ treeNode30.Name = "节点1";
+ treeNode30.Text = "节点1";
+ treeNode31.Name = "节点2";
+ treeNode31.Text = "节点2";
+ treeNode32.Name = "节点3";
+ treeNode32.Text = "节点3";
+ treeNode33.Name = "节点4";
+ treeNode33.Text = "节点4";
+ treeNode34.Name = "节点5";
+ treeNode34.Text = "节点5";
+ treeNode35.Name = "节点6";
+ treeNode35.Text = "节点6";
+ treeNode36.Name = "节点7";
+ treeNode36.Text = "节点7";
+ treeNode37.Name = "节点8";
+ treeNode37.Text = "节点8";
+ treeNode38.Name = "节点9";
+ treeNode38.Text = "节点9";
+ treeNode39.Name = "节点10";
+ treeNode39.Text = "节点10";
+ treeNode40.Name = "节点11";
+ treeNode40.Text = "节点11";
+ treeNode41.Name = "节点12";
+ treeNode41.Text = "节点12";
+ treeNode42.Name = "节点13";
+ treeNode42.Text = "节点13";
+ this.uiNavMenu1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+ treeNode26,
+ treeNode30,
+ treeNode31,
+ treeNode32,
+ treeNode33,
+ treeNode34,
+ treeNode35,
+ treeNode36,
+ treeNode37,
+ treeNode38,
+ treeNode39,
+ treeNode40,
+ treeNode41,
+ treeNode42});
+ this.uiNavMenu1.ShowLines = false;
+ this.uiNavMenu1.Size = new System.Drawing.Size(253, 353);
+ this.uiNavMenu1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiNavMenu1.TabIndex = 1;
+ this.uiNavMenu1.MenuItemClick += new Sunny.UI.UINavMenu.OnMenuItemClick(this.uiNavMenu1_MenuItemClick);
+ //
+ // uiNavMenu2
+ //
+ this.uiNavMenu2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250)))));
+ this.uiNavMenu2.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.uiNavMenu2.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll;
+ this.uiNavMenu2.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250)))));
+ this.uiNavMenu2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiNavMenu2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
+ this.uiNavMenu2.FullRowSelect = true;
+ this.uiNavMenu2.HoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230)))));
+ this.uiNavMenu2.ItemHeight = 50;
+ this.uiNavMenu2.Location = new System.Drawing.Point(299, 157);
+ this.uiNavMenu2.MenuStyle = Sunny.UI.UIMenuStyle.White;
+ this.uiNavMenu2.Name = "uiNavMenu2";
+ treeNode1.Name = "节点14";
+ treeNode1.Text = "节点14";
+ treeNode2.Name = "节点15";
+ treeNode2.Text = "节点15";
+ treeNode3.Name = "节点16";
+ treeNode3.Text = "节点16";
+ treeNode4.Name = "节点17";
+ treeNode4.Text = "节点17";
+ treeNode5.Name = "节点0";
+ treeNode5.Text = "节点0";
+ treeNode6.Name = "节点18";
+ treeNode6.Text = "节点18";
+ treeNode7.Name = "节点19";
+ treeNode7.Text = "节点19";
+ treeNode8.Name = "节点20";
+ treeNode8.Text = "节点20";
+ treeNode9.Name = "节点1";
+ treeNode9.Text = "节点1";
+ treeNode10.Name = "节点2";
+ treeNode10.Text = "节点2";
+ treeNode11.Name = "节点3";
+ treeNode11.Text = "节点3";
+ treeNode12.Name = "节点4";
+ treeNode12.Text = "节点4";
+ treeNode13.Name = "节点5";
+ treeNode13.Text = "节点5";
+ treeNode14.Name = "节点6";
+ treeNode14.Text = "节点6";
+ treeNode15.Name = "节点7";
+ treeNode15.Text = "节点7";
+ treeNode16.Name = "节点8";
+ treeNode16.Text = "节点8";
+ treeNode17.Name = "节点9";
+ treeNode17.Text = "节点9";
+ treeNode18.Name = "节点10";
+ treeNode18.Text = "节点10";
+ treeNode19.Name = "节点11";
+ treeNode19.Text = "节点11";
+ treeNode20.Name = "节点12";
+ treeNode20.Text = "节点12";
+ treeNode21.Name = "节点13";
+ treeNode21.Text = "节点13";
+ this.uiNavMenu2.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+ treeNode5,
+ treeNode9,
+ treeNode10,
+ treeNode11,
+ treeNode12,
+ treeNode13,
+ treeNode14,
+ treeNode15,
+ treeNode16,
+ treeNode17,
+ treeNode18,
+ treeNode19,
+ treeNode20,
+ treeNode21});
+ this.uiNavMenu2.SelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
+ this.uiNavMenu2.ShowLines = false;
+ this.uiNavMenu2.Size = new System.Drawing.Size(253, 353);
+ this.uiNavMenu2.TabIndex = 2;
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(30, 125);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(670, 20);
+ this.uiLine2.TabIndex = 19;
+ this.uiLine2.Text = "UINavMenu";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FNavigation
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1107, 661);
+ this.Name = "FNavigation";
+ this.Symbol = 61912;
+ this.Text = "NavBar";
+ this.PagePanel.ResumeLayout(false);
+ this.uiNavBar1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UINavBar uiNavBar1;
+ private UINavMenu uiNavMenu1;
+ private UINavMenu uiNavMenu2;
+ private UILine uiLine1;
+ private UILine uiLine2;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FNavigation.cs b/SunnyUI.Net5.Demo/Controls/FNavigation.cs
new file mode 100644
index 00000000..6f7284c8
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FNavigation.cs
@@ -0,0 +1,27 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FNavigation : UITitlePage
+ {
+ public FNavigation()
+ {
+ InitializeComponent();
+ uiNavBar1.SetNodeItem(uiNavBar1.Nodes[0].Nodes[0], new NavMenuItem(100));
+ uiNavBar1.SetNodeItem(uiNavBar1.Nodes[0].Nodes[1], new NavMenuItem(101));
+ }
+
+ private void uiNavBar1_MenuItemClick(string itemText, int menuIndex, int pageIndex)
+ {
+ UIMessageTip.ShowOk(itemText + ", " + menuIndex + ", " + pageIndex);
+ }
+
+ private void uiNavBar1_NodeMouseClick(System.Windows.Forms.TreeNode node, int menuIndex, int pageIndex)
+ {
+ //UIMessageTip.ShowOk(node.Text + ", " + menuIndex + ", " + pageIndex);
+ }
+
+ private void uiNavMenu1_MenuItemClick(System.Windows.Forms.TreeNode node, NavMenuItem item, int pageIndex)
+ {
+ UIMessageTip.ShowOk(node.Text + ", " + pageIndex);
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Controls/FNavigation.resx b/SunnyUI.Net5.Demo/Controls/FNavigation.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FNavigation.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FOther.Designer.cs b/SunnyUI.Net5.Demo/Controls/FOther.Designer.cs
new file mode 100644
index 00000000..f5787eeb
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FOther.Designer.cs
@@ -0,0 +1,439 @@
+namespace Sunny.UI.Demo
+{
+ partial class FOther
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.uiLight1 = new Sunny.UI.UILight();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.uiLight2 = new Sunny.UI.UILight();
+ this.uiLight3 = new Sunny.UI.UILight();
+ this.uiProcessBar1 = new Sunny.UI.UIProcessBar();
+ this.uiLine3 = new Sunny.UI.UILine();
+ this.uiProgressIndicator1 = new Sunny.UI.UIProgressIndicator();
+ this.uiLine4 = new Sunny.UI.UILine();
+ this.uiTrackBar1 = new Sunny.UI.UITrackBar();
+ this.uiLine5 = new Sunny.UI.UILine();
+ this.timer1 = new System.Windows.Forms.Timer(this.components);
+ this.uiLight4 = new Sunny.UI.UILight();
+ this.uiLedBulb1 = new Sunny.UI.UILedBulb();
+ this.uiLine8 = new Sunny.UI.UILine();
+ this.uiLedBulb2 = new Sunny.UI.UILedBulb();
+ this.uiLedBulb3 = new Sunny.UI.UILedBulb();
+ this.uiLedBulb4 = new Sunny.UI.UILedBulb();
+ this.uiLine6 = new Sunny.UI.UILine();
+ this.uiScrollingText1 = new Sunny.UI.UIScrollingText();
+ this.uiScrollingText2 = new Sunny.UI.UIScrollingText();
+ this.uiWaitingBar1 = new Sunny.UI.UIWaitingBar();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiLine7 = new Sunny.UI.UILine();
+ this.uiLabel1 = new Sunny.UI.UILabel();
+ this.uiLabel2 = new Sunny.UI.UILabel();
+ this.uiLabel3 = new Sunny.UI.UILabel();
+ this.uiToolTip1 = new Sunny.UI.UIToolTip(this.components);
+ this.uiProcessBar2 = new Sunny.UI.UIProcessBar();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiProcessBar2);
+ this.PagePanel.Controls.Add(this.uiLabel3);
+ this.PagePanel.Controls.Add(this.uiLabel2);
+ this.PagePanel.Controls.Add(this.uiLabel1);
+ this.PagePanel.Controls.Add(this.uiLine7);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiWaitingBar1);
+ this.PagePanel.Controls.Add(this.uiScrollingText2);
+ this.PagePanel.Controls.Add(this.uiScrollingText1);
+ this.PagePanel.Controls.Add(this.uiLine6);
+ this.PagePanel.Controls.Add(this.uiLedBulb4);
+ this.PagePanel.Controls.Add(this.uiLedBulb3);
+ this.PagePanel.Controls.Add(this.uiLedBulb2);
+ this.PagePanel.Controls.Add(this.uiLine8);
+ this.PagePanel.Controls.Add(this.uiLedBulb1);
+ this.PagePanel.Controls.Add(this.uiLight4);
+ this.PagePanel.Controls.Add(this.uiLine5);
+ this.PagePanel.Controls.Add(this.uiTrackBar1);
+ this.PagePanel.Controls.Add(this.uiLine4);
+ this.PagePanel.Controls.Add(this.uiProgressIndicator1);
+ this.PagePanel.Controls.Add(this.uiLine3);
+ this.PagePanel.Controls.Add(this.uiProcessBar1);
+ this.PagePanel.Controls.Add(this.uiLight3);
+ this.PagePanel.Controls.Add(this.uiLight2);
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiLight1);
+ this.PagePanel.Size = new System.Drawing.Size(800, 472);
+ //
+ // uiLight1
+ //
+ this.uiLight1.CenterColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232)))));
+ this.uiLight1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLight1.Location = new System.Drawing.Point(30, 52);
+ this.uiLight1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiLight1.Name = "uiLight1";
+ this.uiLight1.Radius = 35;
+ this.uiLight1.Size = new System.Drawing.Size(35, 35);
+ this.uiLight1.TabIndex = 20;
+ this.uiLight1.Text = "uiLight1";
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(30, 20);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(319, 20);
+ this.uiLine2.TabIndex = 21;
+ this.uiLine2.Text = "UILight";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLight2
+ //
+ this.uiLight2.CenterColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232)))));
+ this.uiLight2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLight2.Location = new System.Drawing.Point(114, 52);
+ this.uiLight2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiLight2.Name = "uiLight2";
+ this.uiLight2.Radius = 35;
+ this.uiLight2.Size = new System.Drawing.Size(35, 35);
+ this.uiLight2.State = Sunny.UI.UILightState.Off;
+ this.uiLight2.TabIndex = 22;
+ this.uiLight2.Text = "uiLight2";
+ //
+ // uiLight3
+ //
+ this.uiLight3.CenterColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232)))));
+ this.uiLight3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLight3.Location = new System.Drawing.Point(156, 52);
+ this.uiLight3.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiLight3.Name = "uiLight3";
+ this.uiLight3.Radius = 35;
+ this.uiLight3.Size = new System.Drawing.Size(35, 35);
+ this.uiLight3.State = Sunny.UI.UILightState.Blink;
+ this.uiLight3.TabIndex = 23;
+ this.uiLight3.Text = "uiLight3";
+ //
+ // uiProcessBar1
+ //
+ this.uiProcessBar1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiProcessBar1.Location = new System.Drawing.Point(30, 136);
+ this.uiProcessBar1.MinimumSize = new System.Drawing.Size(70, 1);
+ this.uiProcessBar1.Name = "uiProcessBar1";
+ this.uiProcessBar1.Size = new System.Drawing.Size(318, 29);
+ this.uiProcessBar1.TabIndex = 24;
+ this.uiProcessBar1.Text = "50.0%";
+ this.uiProcessBar1.Value = 50;
+ //
+ // uiLine3
+ //
+ this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine3.Location = new System.Drawing.Point(30, 103);
+ this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine3.Name = "uiLine3";
+ this.uiLine3.Size = new System.Drawing.Size(319, 20);
+ this.uiLine3.TabIndex = 25;
+ this.uiLine3.Text = "UIProcessBar";
+ this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiProgressIndicator1
+ //
+ this.uiProgressIndicator1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiProgressIndicator1.Location = new System.Drawing.Point(30, 298);
+ this.uiProgressIndicator1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiProgressIndicator1.Name = "uiProgressIndicator1";
+ this.uiProgressIndicator1.Size = new System.Drawing.Size(119, 132);
+ this.uiProgressIndicator1.TabIndex = 26;
+ this.uiProgressIndicator1.Text = "uiProgressIndicator1";
+ //
+ // uiLine4
+ //
+ this.uiLine4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine4.Location = new System.Drawing.Point(30, 271);
+ this.uiLine4.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine4.Name = "uiLine4";
+ this.uiLine4.Size = new System.Drawing.Size(319, 20);
+ this.uiLine4.TabIndex = 27;
+ this.uiLine4.Text = "UIProgressIndicator";
+ this.uiLine4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiTrackBar1
+ //
+ this.uiTrackBar1.DisableColor = System.Drawing.Color.Silver;
+ this.uiTrackBar1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiTrackBar1.Location = new System.Drawing.Point(381, 136);
+ this.uiTrackBar1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiTrackBar1.Name = "uiTrackBar1";
+ this.uiTrackBar1.Size = new System.Drawing.Size(158, 29);
+ this.uiTrackBar1.TabIndex = 30;
+ this.uiTrackBar1.Text = "uiTrackBar1";
+ //
+ // uiLine5
+ //
+ this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine5.Location = new System.Drawing.Point(381, 101);
+ this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine5.Name = "uiLine5";
+ this.uiLine5.Size = new System.Drawing.Size(319, 20);
+ this.uiLine5.TabIndex = 31;
+ this.uiLine5.Text = "UITrackBar";
+ this.uiLine5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // timer1
+ //
+ this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
+ //
+ // uiLight4
+ //
+ this.uiLight4.CenterColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232)))));
+ this.uiLight4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLight4.Location = new System.Drawing.Point(72, 52);
+ this.uiLight4.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiLight4.Name = "uiLight4";
+ this.uiLight4.OnColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiLight4.Radius = 35;
+ this.uiLight4.ShowLightLine = false;
+ this.uiLight4.Size = new System.Drawing.Size(35, 35);
+ this.uiLight4.TabIndex = 36;
+ this.uiLight4.Text = "uiLight4";
+ //
+ // uiLedBulb1
+ //
+ this.uiLedBulb1.Location = new System.Drawing.Point(381, 52);
+ this.uiLedBulb1.Name = "uiLedBulb1";
+ this.uiLedBulb1.Size = new System.Drawing.Size(32, 32);
+ this.uiLedBulb1.TabIndex = 37;
+ this.uiLedBulb1.Text = "uiLedBulb1";
+ //
+ // uiLine8
+ //
+ this.uiLine8.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine8.Location = new System.Drawing.Point(381, 20);
+ this.uiLine8.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine8.Name = "uiLine8";
+ this.uiLine8.Size = new System.Drawing.Size(319, 20);
+ this.uiLine8.TabIndex = 38;
+ this.uiLine8.Text = "UILedBulb";
+ this.uiLine8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLedBulb2
+ //
+ this.uiLedBulb2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));
+ this.uiLedBulb2.Location = new System.Drawing.Point(423, 52);
+ this.uiLedBulb2.Name = "uiLedBulb2";
+ this.uiLedBulb2.Size = new System.Drawing.Size(32, 32);
+ this.uiLedBulb2.TabIndex = 39;
+ this.uiLedBulb2.Text = "uiLedBulb2";
+ //
+ // uiLedBulb3
+ //
+ this.uiLedBulb3.Location = new System.Drawing.Point(465, 52);
+ this.uiLedBulb3.Name = "uiLedBulb3";
+ this.uiLedBulb3.On = false;
+ this.uiLedBulb3.Size = new System.Drawing.Size(32, 32);
+ this.uiLedBulb3.TabIndex = 40;
+ this.uiLedBulb3.Text = "uiLedBulb3";
+ //
+ // uiLedBulb4
+ //
+ this.uiLedBulb4.Blink = true;
+ this.uiLedBulb4.BlinkInterval = 500;
+ this.uiLedBulb4.Location = new System.Drawing.Point(507, 52);
+ this.uiLedBulb4.Name = "uiLedBulb4";
+ this.uiLedBulb4.On = false;
+ this.uiLedBulb4.Size = new System.Drawing.Size(32, 32);
+ this.uiLedBulb4.TabIndex = 41;
+ this.uiLedBulb4.Text = "uiLedBulb4";
+ //
+ // uiLine6
+ //
+ this.uiLine6.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine6.Location = new System.Drawing.Point(381, 182);
+ this.uiLine6.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine6.Name = "uiLine6";
+ this.uiLine6.Size = new System.Drawing.Size(319, 20);
+ this.uiLine6.TabIndex = 47;
+ this.uiLine6.Text = "UIScrollingText";
+ this.uiLine6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiScrollingText1
+ //
+ this.uiScrollingText1.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiScrollingText1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiScrollingText1.ForeColor = System.Drawing.Color.Red;
+ this.uiScrollingText1.Location = new System.Drawing.Point(381, 215);
+ this.uiScrollingText1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiScrollingText1.Name = "uiScrollingText1";
+ this.uiScrollingText1.ScrollingType = Sunny.UI.UIScrollingText.UIScrollingType.LeftToRight;
+ this.uiScrollingText1.Size = new System.Drawing.Size(319, 35);
+ this.uiScrollingText1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiScrollingText1.StyleCustomMode = true;
+ this.uiScrollingText1.TabIndex = 48;
+ this.uiScrollingText1.Text = "赠人玫瑰手有余香";
+ //
+ // uiScrollingText2
+ //
+ this.uiScrollingText2.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.uiScrollingText2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiScrollingText2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiScrollingText2.Location = new System.Drawing.Point(381, 256);
+ this.uiScrollingText2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiScrollingText2.Name = "uiScrollingText2";
+ this.uiScrollingText2.Size = new System.Drawing.Size(319, 35);
+ this.uiScrollingText2.TabIndex = 49;
+ this.uiScrollingText2.Text = "赠人玫瑰手有余香";
+ //
+ // uiWaitingBar1
+ //
+ this.uiWaitingBar1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiWaitingBar1.Location = new System.Drawing.Point(30, 215);
+ this.uiWaitingBar1.MinimumSize = new System.Drawing.Size(70, 23);
+ this.uiWaitingBar1.Name = "uiWaitingBar1";
+ this.uiWaitingBar1.Size = new System.Drawing.Size(319, 29);
+ this.uiWaitingBar1.TabIndex = 50;
+ this.uiWaitingBar1.Text = "uiWaitingBar1";
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 182);
+ 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 = 51;
+ this.uiLine1.Text = "UIWaitingBar";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine7
+ //
+ this.uiLine7.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine7.Location = new System.Drawing.Point(381, 313);
+ this.uiLine7.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine7.Name = "uiLine7";
+ this.uiLine7.Size = new System.Drawing.Size(319, 20);
+ this.uiLine7.TabIndex = 52;
+ this.uiLine7.Text = "UIToolTip";
+ this.uiLine7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLabel1
+ //
+ this.uiLabel1.AutoSize = true;
+ this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel1.Location = new System.Drawing.Point(382, 350);
+ this.uiLabel1.Name = "uiLabel1";
+ this.uiLabel1.Size = new System.Drawing.Size(138, 21);
+ this.uiLabel1.TabIndex = 53;
+ this.uiLabel1.Text = "鼠标移过来看提示";
+ this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.uiToolTip1.SetToolTip(this.uiLabel1, "赠人玫瑰手有余香");
+ //
+ // uiLabel2
+ //
+ this.uiLabel2.AutoSize = true;
+ this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel2.Location = new System.Drawing.Point(562, 350);
+ this.uiLabel2.Name = "uiLabel2";
+ this.uiLabel2.Size = new System.Drawing.Size(138, 21);
+ this.uiLabel2.TabIndex = 54;
+ this.uiLabel2.Text = "鼠标移过来看提示";
+ this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLabel3
+ //
+ this.uiLabel3.AutoSize = true;
+ this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel3.Location = new System.Drawing.Point(382, 388);
+ this.uiLabel3.Name = "uiLabel3";
+ this.uiLabel3.Size = new System.Drawing.Size(138, 21);
+ this.uiLabel3.TabIndex = 55;
+ this.uiLabel3.Text = "鼠标移过来看提示";
+ this.uiLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiToolTip1
+ //
+ this.uiToolTip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(54)))), ((int)(((byte)(54)))), ((int)(((byte)(54)))));
+ this.uiToolTip1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiToolTip1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(239)))), ((int)(((byte)(239)))));
+ this.uiToolTip1.OwnerDraw = true;
+ //
+ // uiProcessBar2
+ //
+ this.uiProcessBar2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiProcessBar2.Location = new System.Drawing.Point(30, 171);
+ this.uiProcessBar2.MinimumSize = new System.Drawing.Size(70, 1);
+ this.uiProcessBar2.Name = "uiProcessBar2";
+ this.uiProcessBar2.Size = new System.Drawing.Size(318, 5);
+ this.uiProcessBar2.TabIndex = 56;
+ this.uiProcessBar2.Text = "50.0%";
+ this.uiProcessBar2.Value = 50;
+ //
+ // FOther
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 507);
+ this.Name = "FOther";
+ this.Symbol = 62173;
+ this.Text = "Other";
+ this.PagePanel.ResumeLayout(false);
+ this.PagePanel.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ private UILight uiLight3;
+ private UILight uiLight2;
+ private UILine uiLine2;
+ private UILight uiLight1;
+ private UITrackBar uiTrackBar1;
+ private UILine uiLine4;
+ private UIProgressIndicator uiProgressIndicator1;
+ private UILine uiLine3;
+ private UIProcessBar uiProcessBar1;
+ private UILine uiLine5;
+ private System.Windows.Forms.Timer timer1;
+ private UILight uiLight4;
+ private UILedBulb uiLedBulb2;
+ private UILine uiLine8;
+ private UILedBulb uiLedBulb1;
+ private UILedBulb uiLedBulb4;
+ private UILedBulb uiLedBulb3;
+ private UILine uiLine6;
+ private UIScrollingText uiScrollingText1;
+ private UIScrollingText uiScrollingText2;
+ private UIWaitingBar uiWaitingBar1;
+ private UILine uiLine1;
+ private UILine uiLine7;
+ private UILabel uiLabel3;
+ private UILabel uiLabel2;
+ private UILabel uiLabel1;
+ private UIToolTip uiToolTip1;
+ private UIProcessBar uiProcessBar2;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FOther.cs b/SunnyUI.Net5.Demo/Controls/FOther.cs
new file mode 100644
index 00000000..e2ec1b8a
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FOther.cs
@@ -0,0 +1,29 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FOther : UITitlePage
+ {
+ public FOther()
+ {
+ InitializeComponent();
+
+ uiToolTip1.SetToolTip(uiLabel2, "赠人玫瑰手有余香", "SunnyUI");
+ uiToolTip1.SetToolTip(uiLabel3, "赠人玫瑰手有余香" + '\n' + "赠人玫瑰手有余香",
+ "SunnyUI", 61530, 32, UIColor.Green);
+ }
+
+ private int value;
+
+ public override void Init()
+ {
+ value = 0;
+ timer1.ReStart();
+ }
+
+ private void timer1_Tick(object sender, System.EventArgs e)
+ {
+ value++;
+ uiTrackBar1.Value = value;
+ uiProcessBar2.Value = uiProcessBar1.Value = value;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FOther.resx b/SunnyUI.Net5.Demo/Controls/FOther.resx
new file mode 100644
index 00000000..30293e22
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FOther.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 107, 17
+
+
+ 17, 17
+
+
+ 35
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FPanel.Designer.cs b/SunnyUI.Net5.Demo/Controls/FPanel.Designer.cs
new file mode 100644
index 00000000..8e6fd297
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FPanel.Designer.cs
@@ -0,0 +1,115 @@
+namespace Sunny.UI.Demo
+{
+ partial class FPanel
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiTitlePanel1 = new Sunny.UI.UITitlePanel();
+ this.uiPanel1 = new Sunny.UI.UIPanel();
+ this.uiGroupBox1 = new Sunny.UI.UIGroupBox();
+ this.uiTitlePanel2 = new Sunny.UI.UITitlePanel();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiPanel1);
+ this.PagePanel.Controls.Add(this.uiTitlePanel2);
+ this.PagePanel.Controls.Add(this.uiGroupBox1);
+ this.PagePanel.Controls.Add(this.uiTitlePanel1);
+ this.PagePanel.Size = new System.Drawing.Size(800, 453);
+ //
+ // uiTitlePanel1
+ //
+ this.uiTitlePanel1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiTitlePanel1.ForeColor = System.Drawing.Color.White;
+ this.uiTitlePanel1.Location = new System.Drawing.Point(30, 230);
+ this.uiTitlePanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiTitlePanel1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiTitlePanel1.Name = "uiTitlePanel1";
+ this.uiTitlePanel1.Padding = new System.Windows.Forms.Padding(0, 35, 0, 0);
+ this.uiTitlePanel1.Size = new System.Drawing.Size(270, 180);
+ this.uiTitlePanel1.TabIndex = 1;
+ this.uiTitlePanel1.Text = "uiTitlePanel1";
+ //
+ // uiPanel1
+ //
+ this.uiPanel1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiPanel1.Location = new System.Drawing.Point(30, 20);
+ this.uiPanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiPanel1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiPanel1.Name = "uiPanel1";
+ this.uiPanel1.Size = new System.Drawing.Size(270, 180);
+ this.uiPanel1.TabIndex = 3;
+ this.uiPanel1.Text = "uiPanel1";
+ //
+ // uiGroupBox1
+ //
+ this.uiGroupBox1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiGroupBox1.Location = new System.Drawing.Point(331, 4);
+ this.uiGroupBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiGroupBox1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiGroupBox1.Name = "uiGroupBox1";
+ this.uiGroupBox1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0);
+ this.uiGroupBox1.Size = new System.Drawing.Size(270, 196);
+ this.uiGroupBox1.TabIndex = 4;
+ this.uiGroupBox1.Text = "uiGroupBox1";
+ //
+ // uiTitlePanel2
+ //
+ this.uiTitlePanel2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiTitlePanel2.ForeColor = System.Drawing.Color.White;
+ this.uiTitlePanel2.Location = new System.Drawing.Point(331, 230);
+ this.uiTitlePanel2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiTitlePanel2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiTitlePanel2.Name = "uiTitlePanel2";
+ this.uiTitlePanel2.Padding = new System.Windows.Forms.Padding(0, 35, 0, 0);
+ this.uiTitlePanel2.ShowCollapse = true;
+ this.uiTitlePanel2.Size = new System.Drawing.Size(270, 180);
+ this.uiTitlePanel2.TabIndex = 5;
+ this.uiTitlePanel2.Text = "uiTitlePanel2";
+ //
+ // FPanel
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 488);
+ this.Name = "FPanel";
+ this.Symbol = 61590;
+ this.Text = "Panel";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ private UITitlePanel uiTitlePanel1;
+ private UIPanel uiPanel1;
+ private UIGroupBox uiGroupBox1;
+ private UITitlePanel uiTitlePanel2;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FPanel.cs b/SunnyUI.Net5.Demo/Controls/FPanel.cs
new file mode 100644
index 00000000..2bd51f66
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FPanel.cs
@@ -0,0 +1,10 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FPanel : UITitlePage
+ {
+ public FPanel()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FPanel.resx b/SunnyUI.Net5.Demo/Controls/FPanel.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FPanel.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FRadioButton.Designer.cs b/SunnyUI.Net5.Demo/Controls/FRadioButton.Designer.cs
new file mode 100644
index 00000000..6532a3d1
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FRadioButton.Designer.cs
@@ -0,0 +1,396 @@
+namespace Sunny.UI.Demo
+{
+ partial class FRadioButton
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiRadioButton12 = new Sunny.UI.UIRadioButton();
+ this.uiRadioButton13 = new Sunny.UI.UIRadioButton();
+ this.uiLabel3 = new Sunny.UI.UILabel();
+ this.uiRadioButton9 = new Sunny.UI.UIRadioButton();
+ this.uiRadioButton10 = new Sunny.UI.UIRadioButton();
+ this.uiRadioButton11 = new Sunny.UI.UIRadioButton();
+ this.uiLabel2 = new Sunny.UI.UILabel();
+ this.uiRadioButton5 = new Sunny.UI.UIRadioButton();
+ this.uiRadioButton7 = new Sunny.UI.UIRadioButton();
+ this.uiRadioButton8 = new Sunny.UI.UIRadioButton();
+ this.uiLabel1 = new Sunny.UI.UILabel();
+ this.uiRadioButton6 = new Sunny.UI.UIRadioButton();
+ this.uiRadioButton3 = new Sunny.UI.UIRadioButton();
+ this.uiRadioButton4 = new Sunny.UI.UIRadioButton();
+ this.uiLine3 = new Sunny.UI.UILine();
+ this.uiRadioButton2 = new Sunny.UI.UIRadioButton();
+ this.uiRadioButton1 = new Sunny.UI.UIRadioButton();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.uiRadioButtonGroup1 = new Sunny.UI.UIRadioButtonGroup();
+ this.uiButton4 = new Sunny.UI.UIButton();
+ this.uiButton2 = new Sunny.UI.UIButton();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiButton4);
+ this.PagePanel.Controls.Add(this.uiButton2);
+ this.PagePanel.Controls.Add(this.uiRadioButtonGroup1);
+ this.PagePanel.Controls.Add(this.uiRadioButton12);
+ this.PagePanel.Controls.Add(this.uiRadioButton13);
+ this.PagePanel.Controls.Add(this.uiLabel3);
+ this.PagePanel.Controls.Add(this.uiRadioButton9);
+ this.PagePanel.Controls.Add(this.uiRadioButton10);
+ this.PagePanel.Controls.Add(this.uiRadioButton11);
+ this.PagePanel.Controls.Add(this.uiLabel2);
+ this.PagePanel.Controls.Add(this.uiRadioButton5);
+ this.PagePanel.Controls.Add(this.uiRadioButton7);
+ this.PagePanel.Controls.Add(this.uiRadioButton8);
+ this.PagePanel.Controls.Add(this.uiLabel1);
+ this.PagePanel.Controls.Add(this.uiRadioButton6);
+ this.PagePanel.Controls.Add(this.uiRadioButton3);
+ this.PagePanel.Controls.Add(this.uiRadioButton4);
+ this.PagePanel.Controls.Add(this.uiLine3);
+ this.PagePanel.Controls.Add(this.uiRadioButton2);
+ this.PagePanel.Controls.Add(this.uiRadioButton1);
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Size = new System.Drawing.Size(800, 563);
+ //
+ // uiRadioButton12
+ //
+ this.uiRadioButton12.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton12.Enabled = false;
+ this.uiRadioButton12.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton12.GroupIndex = 4;
+ this.uiRadioButton12.Location = new System.Drawing.Point(516, 48);
+ this.uiRadioButton12.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton12.Name = "uiRadioButton12";
+ this.uiRadioButton12.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton12.Size = new System.Drawing.Size(156, 35);
+ this.uiRadioButton12.TabIndex = 61;
+ this.uiRadioButton12.Text = "uiRadioButton12";
+ //
+ // uiRadioButton13
+ //
+ this.uiRadioButton13.Checked = true;
+ this.uiRadioButton13.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton13.Enabled = false;
+ this.uiRadioButton13.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton13.GroupIndex = 4;
+ this.uiRadioButton13.Location = new System.Drawing.Point(354, 48);
+ this.uiRadioButton13.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton13.Name = "uiRadioButton13";
+ this.uiRadioButton13.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton13.Size = new System.Drawing.Size(156, 35);
+ this.uiRadioButton13.TabIndex = 60;
+ this.uiRadioButton13.Text = "uiRadioButton13";
+ //
+ // uiLabel3
+ //
+ this.uiLabel3.AutoSize = true;
+ this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel3.Location = new System.Drawing.Point(49, 219);
+ this.uiLabel3.Name = "uiLabel3";
+ this.uiLabel3.Size = new System.Drawing.Size(131, 21);
+ this.uiLabel3.TabIndex = 59;
+ this.uiLabel3.Text = "GroupIndex = 3";
+ this.uiLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiRadioButton9
+ //
+ this.uiRadioButton9.Checked = true;
+ this.uiRadioButton9.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton9.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton9.GroupIndex = 3;
+ this.uiRadioButton9.Location = new System.Drawing.Point(516, 212);
+ this.uiRadioButton9.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton9.Name = "uiRadioButton9";
+ this.uiRadioButton9.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton9.Size = new System.Drawing.Size(156, 35);
+ this.uiRadioButton9.TabIndex = 58;
+ this.uiRadioButton9.Text = "uiRadioButton33";
+ //
+ // uiRadioButton10
+ //
+ this.uiRadioButton10.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton10.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton10.GroupIndex = 3;
+ this.uiRadioButton10.Location = new System.Drawing.Point(354, 212);
+ this.uiRadioButton10.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton10.Name = "uiRadioButton10";
+ this.uiRadioButton10.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton10.Size = new System.Drawing.Size(156, 35);
+ this.uiRadioButton10.TabIndex = 57;
+ this.uiRadioButton10.Text = "uiRadioButton32";
+ //
+ // uiRadioButton11
+ //
+ this.uiRadioButton11.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton11.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton11.GroupIndex = 3;
+ this.uiRadioButton11.Location = new System.Drawing.Point(192, 212);
+ this.uiRadioButton11.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton11.Name = "uiRadioButton11";
+ this.uiRadioButton11.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton11.Size = new System.Drawing.Size(156, 35);
+ this.uiRadioButton11.TabIndex = 56;
+ this.uiRadioButton11.Text = "uiRadioButton31";
+ //
+ // uiLabel2
+ //
+ this.uiLabel2.AutoSize = true;
+ this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel2.Location = new System.Drawing.Point(49, 178);
+ this.uiLabel2.Name = "uiLabel2";
+ this.uiLabel2.Size = new System.Drawing.Size(131, 21);
+ this.uiLabel2.TabIndex = 55;
+ this.uiLabel2.Text = "GroupIndex = 2";
+ this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiRadioButton5
+ //
+ this.uiRadioButton5.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton5.GroupIndex = 2;
+ this.uiRadioButton5.Location = new System.Drawing.Point(516, 171);
+ this.uiRadioButton5.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton5.Name = "uiRadioButton5";
+ this.uiRadioButton5.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton5.Size = new System.Drawing.Size(156, 35);
+ this.uiRadioButton5.TabIndex = 54;
+ this.uiRadioButton5.Text = "uiRadioButton23";
+ //
+ // uiRadioButton7
+ //
+ this.uiRadioButton7.Checked = true;
+ this.uiRadioButton7.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton7.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton7.GroupIndex = 2;
+ this.uiRadioButton7.Location = new System.Drawing.Point(354, 171);
+ this.uiRadioButton7.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton7.Name = "uiRadioButton7";
+ this.uiRadioButton7.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton7.Size = new System.Drawing.Size(156, 35);
+ this.uiRadioButton7.TabIndex = 53;
+ this.uiRadioButton7.Text = "uiRadioButton22";
+ //
+ // uiRadioButton8
+ //
+ this.uiRadioButton8.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton8.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton8.GroupIndex = 2;
+ this.uiRadioButton8.Location = new System.Drawing.Point(192, 171);
+ this.uiRadioButton8.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton8.Name = "uiRadioButton8";
+ this.uiRadioButton8.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton8.Size = new System.Drawing.Size(156, 35);
+ this.uiRadioButton8.TabIndex = 52;
+ this.uiRadioButton8.Text = "uiRadioButton21";
+ //
+ // uiLabel1
+ //
+ this.uiLabel1.AutoSize = true;
+ this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel1.Location = new System.Drawing.Point(49, 137);
+ this.uiLabel1.Name = "uiLabel1";
+ this.uiLabel1.Size = new System.Drawing.Size(131, 21);
+ this.uiLabel1.TabIndex = 51;
+ this.uiLabel1.Text = "GroupIndex = 1";
+ this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiRadioButton6
+ //
+ this.uiRadioButton6.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton6.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton6.GroupIndex = 1;
+ this.uiRadioButton6.Location = new System.Drawing.Point(516, 130);
+ this.uiRadioButton6.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton6.Name = "uiRadioButton6";
+ this.uiRadioButton6.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton6.Size = new System.Drawing.Size(156, 35);
+ this.uiRadioButton6.TabIndex = 50;
+ this.uiRadioButton6.Text = "uiRadioButton13";
+ //
+ // uiRadioButton3
+ //
+ this.uiRadioButton3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton3.GroupIndex = 1;
+ this.uiRadioButton3.Location = new System.Drawing.Point(354, 130);
+ this.uiRadioButton3.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton3.Name = "uiRadioButton3";
+ this.uiRadioButton3.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton3.Size = new System.Drawing.Size(156, 35);
+ this.uiRadioButton3.TabIndex = 49;
+ this.uiRadioButton3.Text = "uiRadioButton12";
+ //
+ // uiRadioButton4
+ //
+ this.uiRadioButton4.Checked = true;
+ this.uiRadioButton4.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton4.GroupIndex = 1;
+ this.uiRadioButton4.Location = new System.Drawing.Point(192, 130);
+ this.uiRadioButton4.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton4.Name = "uiRadioButton4";
+ this.uiRadioButton4.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton4.Size = new System.Drawing.Size(156, 35);
+ this.uiRadioButton4.TabIndex = 48;
+ this.uiRadioButton4.Text = "uiRadioButton11";
+ //
+ // uiLine3
+ //
+ this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine3.Location = new System.Drawing.Point(30, 96);
+ this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine3.Name = "uiLine3";
+ this.uiLine3.Size = new System.Drawing.Size(670, 20);
+ this.uiLine3.TabIndex = 47;
+ this.uiLine3.Text = "UIRadioButton 分组";
+ this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiRadioButton2
+ //
+ this.uiRadioButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton2.Location = new System.Drawing.Point(192, 48);
+ this.uiRadioButton2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton2.Name = "uiRadioButton2";
+ this.uiRadioButton2.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton2.Size = new System.Drawing.Size(150, 35);
+ this.uiRadioButton2.TabIndex = 46;
+ this.uiRadioButton2.Text = "uiRadioButton2";
+ //
+ // uiRadioButton1
+ //
+ this.uiRadioButton1.Checked = true;
+ this.uiRadioButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiRadioButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButton1.Location = new System.Drawing.Point(30, 48);
+ this.uiRadioButton1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButton1.Name = "uiRadioButton1";
+ this.uiRadioButton1.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.uiRadioButton1.Size = new System.Drawing.Size(150, 35);
+ this.uiRadioButton1.TabIndex = 45;
+ this.uiRadioButton1.Text = "uiRadioButton1";
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(30, 20);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(670, 20);
+ this.uiLine2.TabIndex = 44;
+ this.uiLine2.Text = "UIRadioButton";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiRadioButtonGroup1
+ //
+ this.uiRadioButtonGroup1.ColumnCount = 3;
+ this.uiRadioButtonGroup1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRadioButtonGroup1.Items.AddRange(new object[] {
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"});
+ this.uiRadioButtonGroup1.Location = new System.Drawing.Point(30, 253);
+ this.uiRadioButtonGroup1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiRadioButtonGroup1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRadioButtonGroup1.Name = "uiRadioButtonGroup1";
+ this.uiRadioButtonGroup1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0);
+ this.uiRadioButtonGroup1.Size = new System.Drawing.Size(670, 173);
+ this.uiRadioButtonGroup1.TabIndex = 63;
+ this.uiRadioButtonGroup1.Text = "UIRadioButtonGroup";
+ this.uiRadioButtonGroup1.ValueChanged += new Sunny.UI.UIRadioButtonGroup.OnValueChanged(this.uiRadioButtonGroup1_ValueChanged);
+ //
+ // uiButton4
+ //
+ this.uiButton4.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton4.Location = new System.Drawing.Point(145, 446);
+ this.uiButton4.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton4.Name = "uiButton4";
+ this.uiButton4.Size = new System.Drawing.Size(100, 35);
+ this.uiButton4.TabIndex = 65;
+ this.uiButton4.Text = "选择";
+ this.uiButton4.Click += new System.EventHandler(this.uiButton4_Click);
+ //
+ // uiButton2
+ //
+ this.uiButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiButton2.Location = new System.Drawing.Point(30, 446);
+ this.uiButton2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiButton2.Name = "uiButton2";
+ this.uiButton2.Size = new System.Drawing.Size(100, 35);
+ this.uiButton2.TabIndex = 64;
+ this.uiButton2.Text = "全不选";
+ this.uiButton2.Click += new System.EventHandler(this.uiButton2_Click);
+ //
+ // FRadioButton
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 598);
+ this.Name = "FRadioButton";
+ this.Symbol = 61842;
+ this.Text = "RadioButton";
+ this.PagePanel.ResumeLayout(false);
+ this.PagePanel.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UIRadioButton uiRadioButton12;
+ private UIRadioButton uiRadioButton13;
+ private UILabel uiLabel3;
+ private UIRadioButton uiRadioButton9;
+ private UIRadioButton uiRadioButton10;
+ private UIRadioButton uiRadioButton11;
+ private UILabel uiLabel2;
+ private UIRadioButton uiRadioButton5;
+ private UIRadioButton uiRadioButton7;
+ private UIRadioButton uiRadioButton8;
+ private UILabel uiLabel1;
+ private UIRadioButton uiRadioButton6;
+ private UIRadioButton uiRadioButton3;
+ private UIRadioButton uiRadioButton4;
+ private UILine uiLine3;
+ private UIRadioButton uiRadioButton2;
+ private UIRadioButton uiRadioButton1;
+ private UILine uiLine2;
+ private UIRadioButtonGroup uiRadioButtonGroup1;
+ private UIButton uiButton4;
+ private UIButton uiButton2;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FRadioButton.cs b/SunnyUI.Net5.Demo/Controls/FRadioButton.cs
new file mode 100644
index 00000000..cbb0de1a
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FRadioButton.cs
@@ -0,0 +1,34 @@
+using System;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FRadioButton : UITitlePage
+ {
+ public FRadioButton()
+ {
+ InitializeComponent();
+ uiRadioButtonGroup1.SelectedIndex = 2;
+ }
+
+ public override void Init()
+ {
+ base.Init();
+ uiRadioButtonGroup1.SelectedIndex = 1;
+ }
+
+ private void uiRadioButtonGroup1_ValueChanged(object sender, int index, string text)
+ {
+ Console.WriteLine("SelectedIndex: " + index + ", SelectedText: " + text);
+ }
+
+ private void uiButton2_Click(object sender, EventArgs e)
+ {
+ uiRadioButtonGroup1.SelectedNone();
+ }
+
+ private void uiButton4_Click(object sender, EventArgs e)
+ {
+ uiRadioButtonGroup1.SelectedIndex = 6;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FRadioButton.resx b/SunnyUI.Net5.Demo/Controls/FRadioButton.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FRadioButton.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FScrollBar.Designer.cs b/SunnyUI.Net5.Demo/Controls/FScrollBar.Designer.cs
new file mode 100644
index 00000000..00258087
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FScrollBar.Designer.cs
@@ -0,0 +1,236 @@
+namespace Sunny.UI.Demo
+{
+ partial class FScrollBar
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.uiLine7 = new Sunny.UI.UILine();
+ this.uiHorScrollBar1 = new Sunny.UI.UIHorScrollBar();
+ this.uiScrollBar4 = new Sunny.UI.UIScrollBar();
+ this.uiScrollBar3 = new Sunny.UI.UIScrollBar();
+ this.uiScrollBar2 = new Sunny.UI.UIScrollBar();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiScrollBar1 = new Sunny.UI.UIScrollBar();
+ this.uiHorScrollBar2 = new Sunny.UI.UIHorScrollBar();
+ this.uiHorScrollBar3 = new Sunny.UI.UIHorScrollBar();
+ this.uiHorScrollBar4 = new Sunny.UI.UIHorScrollBar();
+ this.timer1 = new System.Windows.Forms.Timer(this.components);
+ this.uiVerScrollBarEx1 = new Sunny.UI.UIVerScrollBarEx();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiVerScrollBarEx1);
+ this.PagePanel.Controls.Add(this.uiHorScrollBar4);
+ this.PagePanel.Controls.Add(this.uiHorScrollBar3);
+ this.PagePanel.Controls.Add(this.uiHorScrollBar2);
+ this.PagePanel.Controls.Add(this.uiLine7);
+ this.PagePanel.Controls.Add(this.uiHorScrollBar1);
+ this.PagePanel.Controls.Add(this.uiScrollBar4);
+ this.PagePanel.Controls.Add(this.uiScrollBar3);
+ this.PagePanel.Controls.Add(this.uiScrollBar2);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiScrollBar1);
+ //
+ // uiLine7
+ //
+ this.uiLine7.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine7.Location = new System.Drawing.Point(381, 20);
+ this.uiLine7.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine7.Name = "uiLine7";
+ this.uiLine7.Size = new System.Drawing.Size(319, 20);
+ this.uiLine7.TabIndex = 58;
+ this.uiLine7.Text = "UIHorScrollBar";
+ this.uiLine7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiHorScrollBar1
+ //
+ this.uiHorScrollBar1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiHorScrollBar1.Location = new System.Drawing.Point(381, 58);
+ this.uiHorScrollBar1.Name = "uiHorScrollBar1";
+ this.uiHorScrollBar1.Size = new System.Drawing.Size(319, 23);
+ this.uiHorScrollBar1.TabIndex = 57;
+ this.uiHorScrollBar1.Text = "uiHorScrollBar1";
+ //
+ // uiScrollBar4
+ //
+ this.uiScrollBar4.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(238)))), ((int)(((byte)(238)))));
+ this.uiScrollBar4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiScrollBar4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiScrollBar4.HoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiScrollBar4.Location = new System.Drawing.Point(156, 55);
+ this.uiScrollBar4.Name = "uiScrollBar4";
+ this.uiScrollBar4.PressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiScrollBar4.Size = new System.Drawing.Size(23, 153);
+ this.uiScrollBar4.Style = Sunny.UI.UIStyle.Red;
+ this.uiScrollBar4.StyleCustomMode = true;
+ this.uiScrollBar4.TabIndex = 56;
+ this.uiScrollBar4.Text = "uiScrollBar4";
+ //
+ // uiScrollBar3
+ //
+ this.uiScrollBar3.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(245)))), ((int)(((byte)(233)))));
+ this.uiScrollBar3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiScrollBar3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiScrollBar3.HoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiScrollBar3.Location = new System.Drawing.Point(114, 55);
+ this.uiScrollBar3.Name = "uiScrollBar3";
+ this.uiScrollBar3.PressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiScrollBar3.Size = new System.Drawing.Size(23, 153);
+ this.uiScrollBar3.Style = Sunny.UI.UIStyle.Orange;
+ this.uiScrollBar3.StyleCustomMode = true;
+ this.uiScrollBar3.TabIndex = 55;
+ this.uiScrollBar3.Text = "uiScrollBar3";
+ //
+ // uiScrollBar2
+ //
+ this.uiScrollBar2.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232)))));
+ this.uiScrollBar2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiScrollBar2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiScrollBar2.HoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiScrollBar2.Location = new System.Drawing.Point(72, 55);
+ this.uiScrollBar2.Name = "uiScrollBar2";
+ this.uiScrollBar2.PressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiScrollBar2.Size = new System.Drawing.Size(23, 153);
+ this.uiScrollBar2.Style = Sunny.UI.UIStyle.Green;
+ this.uiScrollBar2.StyleCustomMode = true;
+ this.uiScrollBar2.TabIndex = 54;
+ this.uiScrollBar2.Text = "uiScrollBar2";
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ 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 = 53;
+ this.uiLine1.Text = "UIScrollBar";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiScrollBar1
+ //
+ this.uiScrollBar1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiScrollBar1.Location = new System.Drawing.Point(30, 55);
+ this.uiScrollBar1.Name = "uiScrollBar1";
+ this.uiScrollBar1.Size = new System.Drawing.Size(23, 153);
+ this.uiScrollBar1.TabIndex = 52;
+ this.uiScrollBar1.Text = "uiScrollBar1";
+ //
+ // uiHorScrollBar2
+ //
+ this.uiHorScrollBar2.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232)))));
+ this.uiHorScrollBar2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiHorScrollBar2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiHorScrollBar2.HoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiHorScrollBar2.Location = new System.Drawing.Point(381, 100);
+ this.uiHorScrollBar2.Name = "uiHorScrollBar2";
+ this.uiHorScrollBar2.PressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiHorScrollBar2.Size = new System.Drawing.Size(319, 23);
+ this.uiHorScrollBar2.Style = Sunny.UI.UIStyle.Green;
+ this.uiHorScrollBar2.StyleCustomMode = true;
+ this.uiHorScrollBar2.TabIndex = 59;
+ this.uiHorScrollBar2.Text = "uiHorScrollBar2";
+ //
+ // uiHorScrollBar3
+ //
+ this.uiHorScrollBar3.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(245)))), ((int)(((byte)(233)))));
+ this.uiHorScrollBar3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiHorScrollBar3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiHorScrollBar3.HoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiHorScrollBar3.Location = new System.Drawing.Point(381, 142);
+ this.uiHorScrollBar3.Name = "uiHorScrollBar3";
+ this.uiHorScrollBar3.PressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiHorScrollBar3.Size = new System.Drawing.Size(319, 23);
+ this.uiHorScrollBar3.Style = Sunny.UI.UIStyle.Orange;
+ this.uiHorScrollBar3.StyleCustomMode = true;
+ this.uiHorScrollBar3.TabIndex = 60;
+ this.uiHorScrollBar3.Text = "uiHorScrollBar3";
+ //
+ // uiHorScrollBar4
+ //
+ this.uiHorScrollBar4.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(238)))), ((int)(((byte)(238)))));
+ this.uiHorScrollBar4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiHorScrollBar4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiHorScrollBar4.HoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiHorScrollBar4.Location = new System.Drawing.Point(381, 184);
+ this.uiHorScrollBar4.Name = "uiHorScrollBar4";
+ this.uiHorScrollBar4.PressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiHorScrollBar4.Size = new System.Drawing.Size(319, 23);
+ this.uiHorScrollBar4.Style = Sunny.UI.UIStyle.Red;
+ this.uiHorScrollBar4.StyleCustomMode = true;
+ this.uiHorScrollBar4.TabIndex = 61;
+ this.uiHorScrollBar4.Text = "uiHorScrollBar4";
+ //
+ // timer1
+ //
+ this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
+ //
+ // uiVerScrollBarEx1
+ //
+ this.uiVerScrollBarEx1.BoundsHeight = 10;
+ this.uiVerScrollBarEx1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiVerScrollBarEx1.LargeChange = 10;
+ this.uiVerScrollBarEx1.Location = new System.Drawing.Point(219, 61);
+ this.uiVerScrollBarEx1.Maximum = 100;
+ this.uiVerScrollBarEx1.Name = "uiVerScrollBarEx1";
+ this.uiVerScrollBarEx1.Size = new System.Drawing.Size(18, 147);
+ this.uiVerScrollBarEx1.TabIndex = 62;
+ this.uiVerScrollBarEx1.Text = "uiVerScrollBarEx1";
+ this.uiVerScrollBarEx1.Value = 0;
+ //
+ // FScrollBar
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "FScrollBar";
+ this.Symbol = 57355;
+ this.Text = "ScrollBar";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UILine uiLine7;
+ private UIHorScrollBar uiHorScrollBar1;
+ private UIScrollBar uiScrollBar4;
+ private UIScrollBar uiScrollBar3;
+ private UIScrollBar uiScrollBar2;
+ private UILine uiLine1;
+ private UIScrollBar uiScrollBar1;
+ private UIHorScrollBar uiHorScrollBar4;
+ private UIHorScrollBar uiHorScrollBar3;
+ private UIHorScrollBar uiHorScrollBar2;
+ private System.Windows.Forms.Timer timer1;
+ private UIVerScrollBarEx uiVerScrollBarEx1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FScrollBar.cs b/SunnyUI.Net5.Demo/Controls/FScrollBar.cs
new file mode 100644
index 00000000..efe59d4b
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FScrollBar.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FScrollBar : UITitlePage
+ {
+ public FScrollBar()
+ {
+ InitializeComponent();
+ }
+
+ public override void Init()
+ {
+ value = 0;
+ timer1.ReStart();
+ }
+
+ private int value;
+ private void timer1_Tick(object sender, EventArgs e)
+ {
+ value++;
+ uiScrollBar1.Value = value;
+ uiHorScrollBar1.Value = value;
+ uiScrollBar2.Value = value/3;
+ uiHorScrollBar2.Value = value/3;
+ uiScrollBar3.Value = value / 10;
+ uiHorScrollBar3.Value = value / 10;
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Controls/FScrollBar.resx b/SunnyUI.Net5.Demo/Controls/FScrollBar.resx
new file mode 100644
index 00000000..1f666f26
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FScrollBar.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FTabControl.Designer.cs b/SunnyUI.Net5.Demo/Controls/FTabControl.Designer.cs
new file mode 100644
index 00000000..497fb15c
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTabControl.Designer.cs
@@ -0,0 +1,277 @@
+namespace Sunny.UI.Demo
+{
+ partial class FTabControl
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiTabControl1 = new Sunny.UI.UITabControl();
+ this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.tabPage3 = new System.Windows.Forms.TabPage();
+ this.tabPage9 = new System.Windows.Forms.TabPage();
+ this.tabPage10 = new System.Windows.Forms.TabPage();
+ this.tabPage11 = new System.Windows.Forms.TabPage();
+ this.tabPage12 = new System.Windows.Forms.TabPage();
+ this.tabPage13 = new System.Windows.Forms.TabPage();
+ this.tabPage4 = new System.Windows.Forms.TabPage();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.uiTabControlMenu1 = new Sunny.UI.UITabControlMenu();
+ this.tabPage5 = new System.Windows.Forms.TabPage();
+ this.tabPage6 = new System.Windows.Forms.TabPage();
+ this.tabPage7 = new System.Windows.Forms.TabPage();
+ this.tabPage8 = new System.Windows.Forms.TabPage();
+ this.PagePanel.SuspendLayout();
+ this.uiTabControl1.SuspendLayout();
+ this.uiTabControlMenu1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiTabControlMenu1);
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiTabControl1);
+ this.PagePanel.Size = new System.Drawing.Size(800, 619);
+ //
+ // uiTabControl1
+ //
+ this.uiTabControl1.Controls.Add(this.tabPage1);
+ this.uiTabControl1.Controls.Add(this.tabPage2);
+ this.uiTabControl1.Controls.Add(this.tabPage3);
+ this.uiTabControl1.Controls.Add(this.tabPage9);
+ this.uiTabControl1.Controls.Add(this.tabPage10);
+ this.uiTabControl1.Controls.Add(this.tabPage11);
+ this.uiTabControl1.Controls.Add(this.tabPage12);
+ this.uiTabControl1.Controls.Add(this.tabPage13);
+ this.uiTabControl1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
+ this.uiTabControl1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiTabControl1.ItemSize = new System.Drawing.Size(150, 40);
+ this.uiTabControl1.Location = new System.Drawing.Point(30, 52);
+ this.uiTabControl1.MainPage = "tabPage1";
+ this.uiTabControl1.MenuStyle = Sunny.UI.UIMenuStyle.Custom;
+ this.uiTabControl1.Name = "uiTabControl1";
+ this.uiTabControl1.SelectedIndex = 0;
+ this.uiTabControl1.ShowActiveCloseButton = true;
+ this.uiTabControl1.Size = new System.Drawing.Size(670, 183);
+ this.uiTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
+ this.uiTabControl1.TabIndex = 0;
+ this.uiTabControl1.BeforeRemoveTabPage += new Sunny.UI.UITabControl.OnBeforeRemoveTabPage(this.uiTabControl1_BeforeRemoveTabPage);
+ //
+ // tabPage1
+ //
+ this.tabPage1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(255)))));
+ this.tabPage1.Location = new System.Drawing.Point(0, 40);
+ this.tabPage1.Name = "tabPage1";
+ this.tabPage1.Size = new System.Drawing.Size(670, 143);
+ this.tabPage1.TabIndex = 0;
+ this.tabPage1.Text = "tabPage1";
+ //
+ // tabPage2
+ //
+ this.tabPage2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
+ this.tabPage2.Location = new System.Drawing.Point(0, 40);
+ this.tabPage2.Name = "tabPage2";
+ this.tabPage2.Size = new System.Drawing.Size(670, 143);
+ this.tabPage2.TabIndex = 1;
+ this.tabPage2.Text = "tabPage2";
+ //
+ // tabPage3
+ //
+ this.tabPage3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+ this.tabPage3.Location = new System.Drawing.Point(0, 40);
+ this.tabPage3.Name = "tabPage3";
+ this.tabPage3.Size = new System.Drawing.Size(670, 143);
+ this.tabPage3.TabIndex = 2;
+ this.tabPage3.Text = "tabPage3";
+ //
+ // tabPage9
+ //
+ this.tabPage9.Location = new System.Drawing.Point(0, 40);
+ this.tabPage9.Name = "tabPage9";
+ this.tabPage9.Size = new System.Drawing.Size(670, 143);
+ this.tabPage9.TabIndex = 4;
+ this.tabPage9.Text = "tabPage9";
+ this.tabPage9.UseVisualStyleBackColor = true;
+ //
+ // tabPage10
+ //
+ this.tabPage10.Location = new System.Drawing.Point(0, 40);
+ this.tabPage10.Name = "tabPage10";
+ this.tabPage10.Size = new System.Drawing.Size(670, 143);
+ this.tabPage10.TabIndex = 5;
+ this.tabPage10.Text = "tabPage10";
+ this.tabPage10.UseVisualStyleBackColor = true;
+ //
+ // tabPage11
+ //
+ this.tabPage11.Location = new System.Drawing.Point(0, 40);
+ this.tabPage11.Name = "tabPage11";
+ this.tabPage11.Size = new System.Drawing.Size(670, 143);
+ this.tabPage11.TabIndex = 6;
+ this.tabPage11.Text = "tabPage11";
+ this.tabPage11.UseVisualStyleBackColor = true;
+ //
+ // tabPage12
+ //
+ this.tabPage12.Location = new System.Drawing.Point(0, 40);
+ this.tabPage12.Name = "tabPage12";
+ this.tabPage12.Size = new System.Drawing.Size(670, 143);
+ this.tabPage12.TabIndex = 7;
+ this.tabPage12.Text = "tabPage12";
+ this.tabPage12.UseVisualStyleBackColor = true;
+ //
+ // tabPage13
+ //
+ this.tabPage13.Location = new System.Drawing.Point(0, 40);
+ this.tabPage13.Name = "tabPage13";
+ this.tabPage13.Size = new System.Drawing.Size(670, 143);
+ this.tabPage13.TabIndex = 8;
+ this.tabPage13.Text = "tabPage13";
+ this.tabPage13.UseVisualStyleBackColor = true;
+ //
+ // tabPage4
+ //
+ this.tabPage4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+ this.tabPage4.Location = new System.Drawing.Point(0, 40);
+ this.tabPage4.Name = "tabPage4";
+ this.tabPage4.Size = new System.Drawing.Size(670, 143);
+ this.tabPage4.TabIndex = 3;
+ this.tabPage4.Text = "tabPage4";
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 19;
+ this.uiLine1.Text = "UITabControl";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(30, 253);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(670, 20);
+ this.uiLine2.TabIndex = 20;
+ this.uiLine2.Text = "UITabControlMenu";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiTabControlMenu1
+ //
+ this.uiTabControlMenu1.Alignment = System.Windows.Forms.TabAlignment.Left;
+ this.uiTabControlMenu1.Controls.Add(this.tabPage5);
+ this.uiTabControlMenu1.Controls.Add(this.tabPage6);
+ this.uiTabControlMenu1.Controls.Add(this.tabPage7);
+ this.uiTabControlMenu1.Controls.Add(this.tabPage8);
+ this.uiTabControlMenu1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
+ this.uiTabControlMenu1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiTabControlMenu1.ItemSize = new System.Drawing.Size(40, 200);
+ this.uiTabControlMenu1.Location = new System.Drawing.Point(30, 288);
+ this.uiTabControlMenu1.Multiline = true;
+ this.uiTabControlMenu1.Name = "uiTabControlMenu1";
+ this.uiTabControlMenu1.SelectedIndex = 0;
+ this.uiTabControlMenu1.Size = new System.Drawing.Size(670, 239);
+ this.uiTabControlMenu1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
+ this.uiTabControlMenu1.TabIndex = 21;
+ //
+ // tabPage5
+ //
+ this.tabPage5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(255)))));
+ this.tabPage5.Location = new System.Drawing.Point(201, 0);
+ this.tabPage5.Name = "tabPage5";
+ this.tabPage5.Size = new System.Drawing.Size(469, 239);
+ this.tabPage5.TabIndex = 0;
+ this.tabPage5.Text = "tabPage5";
+ //
+ // tabPage6
+ //
+ this.tabPage6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
+ this.tabPage6.Location = new System.Drawing.Point(201, 0);
+ this.tabPage6.Name = "tabPage6";
+ this.tabPage6.Size = new System.Drawing.Size(469, 239);
+ this.tabPage6.TabIndex = 1;
+ this.tabPage6.Text = "tabPage6";
+ //
+ // tabPage7
+ //
+ this.tabPage7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+ this.tabPage7.Location = new System.Drawing.Point(201, 0);
+ this.tabPage7.Name = "tabPage7";
+ this.tabPage7.Size = new System.Drawing.Size(469, 239);
+ this.tabPage7.TabIndex = 2;
+ this.tabPage7.Text = "tabPage7";
+ //
+ // tabPage8
+ //
+ this.tabPage8.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+ this.tabPage8.Location = new System.Drawing.Point(201, 0);
+ this.tabPage8.Name = "tabPage8";
+ this.tabPage8.Size = new System.Drawing.Size(469, 239);
+ this.tabPage8.TabIndex = 3;
+ this.tabPage8.Text = "tabPage8";
+ //
+ // FTabControl
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 654);
+ this.Name = "FTabControl";
+ this.Symbol = 61716;
+ this.Text = "TabControl";
+ this.PagePanel.ResumeLayout(false);
+ this.uiTabControl1.ResumeLayout(false);
+ this.uiTabControlMenu1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UITabControl uiTabControl1;
+ private System.Windows.Forms.TabPage tabPage1;
+ private System.Windows.Forms.TabPage tabPage2;
+ private UITabControlMenu uiTabControlMenu1;
+ private System.Windows.Forms.TabPage tabPage5;
+ private System.Windows.Forms.TabPage tabPage6;
+ private UILine uiLine2;
+ private UILine uiLine1;
+ private System.Windows.Forms.TabPage tabPage3;
+ private System.Windows.Forms.TabPage tabPage4;
+ private System.Windows.Forms.TabPage tabPage7;
+ private System.Windows.Forms.TabPage tabPage8;
+ private System.Windows.Forms.TabPage tabPage9;
+ private System.Windows.Forms.TabPage tabPage10;
+ private System.Windows.Forms.TabPage tabPage11;
+ private System.Windows.Forms.TabPage tabPage12;
+ private System.Windows.Forms.TabPage tabPage13;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FTabControl.cs b/SunnyUI.Net5.Demo/Controls/FTabControl.cs
new file mode 100644
index 00000000..413b9775
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTabControl.cs
@@ -0,0 +1,15 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FTabControl : UITitlePage
+ {
+ public FTabControl()
+ {
+ InitializeComponent();
+ }
+
+ private bool uiTabControl1_BeforeRemoveTabPage(object sender, int index)
+ {
+ return this.ShowAskDialog("Do you want to close the tab : " + uiTabControl1.TabPages[index].Text + "?");
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Controls/FTabControl.resx b/SunnyUI.Net5.Demo/Controls/FTabControl.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTabControl.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FTextBox.Designer.cs b/SunnyUI.Net5.Demo/Controls/FTextBox.Designer.cs
new file mode 100644
index 00000000..cb590b1b
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTextBox.Designer.cs
@@ -0,0 +1,325 @@
+namespace Sunny.UI.Demo
+{
+ partial class FTextBox
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiIntegerUpDown1 = new Sunny.UI.UIIntegerUpDown();
+ this.uiTextBox1 = new Sunny.UI.UITextBox();
+ this.uiLabel1 = new Sunny.UI.UILabel();
+ this.uiLabel2 = new Sunny.UI.UILabel();
+ this.uiTextBox2 = new Sunny.UI.UITextBox();
+ this.uiLabel3 = new Sunny.UI.UILabel();
+ this.uiTextBox3 = new Sunny.UI.UITextBox();
+ this.uiDoubleUpDown1 = new Sunny.UI.UIDoubleUpDown();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiLine4 = new Sunny.UI.UILine();
+ this.uiLine5 = new Sunny.UI.UILine();
+ this.uiRichTextBox1 = new Sunny.UI.UIRichTextBox();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.uiLine3 = new Sunny.UI.UILine();
+ this.uiTextBox4 = new Sunny.UI.UITextBox();
+ this.uiContextMenuStrip1 = new Sunny.UI.UIContextMenuStrip();
+ this.aaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.PagePanel.SuspendLayout();
+ this.uiContextMenuStrip1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiTextBox4);
+ this.PagePanel.Controls.Add(this.uiLine3);
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiRichTextBox1);
+ this.PagePanel.Controls.Add(this.uiLine5);
+ this.PagePanel.Controls.Add(this.uiLine4);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiDoubleUpDown1);
+ this.PagePanel.Controls.Add(this.uiLabel3);
+ this.PagePanel.Controls.Add(this.uiTextBox3);
+ this.PagePanel.Controls.Add(this.uiLabel2);
+ this.PagePanel.Controls.Add(this.uiTextBox2);
+ this.PagePanel.Controls.Add(this.uiLabel1);
+ this.PagePanel.Controls.Add(this.uiTextBox1);
+ this.PagePanel.Controls.Add(this.uiIntegerUpDown1);
+ this.PagePanel.Size = new System.Drawing.Size(800, 530);
+ //
+ // uiIntegerUpDown1
+ //
+ this.uiIntegerUpDown1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiIntegerUpDown1.Location = new System.Drawing.Point(388, 54);
+ this.uiIntegerUpDown1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiIntegerUpDown1.Maximum = 100;
+ this.uiIntegerUpDown1.Minimum = -100;
+ this.uiIntegerUpDown1.MinimumSize = new System.Drawing.Size(100, 0);
+ this.uiIntegerUpDown1.Name = "uiIntegerUpDown1";
+ this.uiIntegerUpDown1.Size = new System.Drawing.Size(150, 29);
+ this.uiIntegerUpDown1.TabIndex = 2;
+ this.uiIntegerUpDown1.Text = "_uiIntegerUpDown1";
+ //
+ // uiTextBox1
+ //
+ this.uiTextBox1.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.uiTextBox1.FillColor = System.Drawing.Color.White;
+ this.uiTextBox1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiTextBox1.Location = new System.Drawing.Point(117, 54);
+ this.uiTextBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiTextBox1.Maximum = 2147483647D;
+ this.uiTextBox1.Minimum = -2147483648D;
+ this.uiTextBox1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiTextBox1.Name = "uiTextBox1";
+ this.uiTextBox1.Padding = new System.Windows.Forms.Padding(5);
+ this.uiTextBox1.Size = new System.Drawing.Size(221, 29);
+ this.uiTextBox1.TabIndex = 3;
+ this.uiTextBox1.Watermark = "水印文字";
+ //
+ // uiLabel1
+ //
+ this.uiLabel1.AutoSize = true;
+ this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel1.Location = new System.Drawing.Point(38, 58);
+ this.uiLabel1.Name = "uiLabel1";
+ this.uiLabel1.Size = new System.Drawing.Size(55, 21);
+ this.uiLabel1.TabIndex = 4;
+ this.uiLabel1.Text = "String";
+ this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLabel2
+ //
+ this.uiLabel2.AutoSize = true;
+ this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel2.Location = new System.Drawing.Point(38, 97);
+ this.uiLabel2.Name = "uiLabel2";
+ this.uiLabel2.Size = new System.Drawing.Size(65, 21);
+ this.uiLabel2.TabIndex = 6;
+ this.uiLabel2.Text = "Integer";
+ this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiTextBox2
+ //
+ this.uiTextBox2.CanEmpty = true;
+ this.uiTextBox2.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.uiTextBox2.DoubleValue = 5D;
+ this.uiTextBox2.FillColor = System.Drawing.Color.White;
+ this.uiTextBox2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiTextBox2.IntValue = 5;
+ this.uiTextBox2.Location = new System.Drawing.Point(117, 93);
+ this.uiTextBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiTextBox2.Maximum = 9D;
+ this.uiTextBox2.Minimum = 0D;
+ this.uiTextBox2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiTextBox2.Name = "uiTextBox2";
+ this.uiTextBox2.Padding = new System.Windows.Forms.Padding(5);
+ this.uiTextBox2.Size = new System.Drawing.Size(221, 29);
+ this.uiTextBox2.TabIndex = 5;
+ this.uiTextBox2.Text = "5";
+ this.uiTextBox2.Type = Sunny.UI.UITextBox.UIEditType.Integer;
+ this.uiTextBox2.Watermark = "水印文字";
+ //
+ // uiLabel3
+ //
+ this.uiLabel3.AutoSize = true;
+ this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel3.Location = new System.Drawing.Point(38, 136);
+ this.uiLabel3.Name = "uiLabel3";
+ this.uiLabel3.Size = new System.Drawing.Size(65, 21);
+ this.uiLabel3.TabIndex = 8;
+ this.uiLabel3.Text = "Double";
+ this.uiLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiTextBox3
+ //
+ this.uiTextBox3.CanEmpty = true;
+ this.uiTextBox3.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.uiTextBox3.FillColor = System.Drawing.Color.White;
+ this.uiTextBox3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiTextBox3.Location = new System.Drawing.Point(117, 132);
+ this.uiTextBox3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiTextBox3.Maximum = 2147483647D;
+ this.uiTextBox3.Minimum = -2147483648D;
+ this.uiTextBox3.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiTextBox3.Name = "uiTextBox3";
+ this.uiTextBox3.Padding = new System.Windows.Forms.Padding(5);
+ this.uiTextBox3.Size = new System.Drawing.Size(221, 29);
+ this.uiTextBox3.TabIndex = 7;
+ this.uiTextBox3.Type = Sunny.UI.UITextBox.UIEditType.Double;
+ this.uiTextBox3.Watermark = "水印文字";
+ //
+ // uiDoubleUpDown1
+ //
+ this.uiDoubleUpDown1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiDoubleUpDown1.Location = new System.Drawing.Point(388, 132);
+ this.uiDoubleUpDown1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiDoubleUpDown1.MinimumSize = new System.Drawing.Size(100, 0);
+ this.uiDoubleUpDown1.Name = "uiDoubleUpDown1";
+ this.uiDoubleUpDown1.Size = new System.Drawing.Size(150, 29);
+ this.uiDoubleUpDown1.TabIndex = 14;
+ this.uiDoubleUpDown1.Text = "uiDoubleUpDown1";
+ this.uiDoubleUpDown1.Value = 0D;
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(308, 20);
+ this.uiLine1.TabIndex = 20;
+ this.uiLine1.Text = "UITextBox";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine4
+ //
+ this.uiLine4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine4.Location = new System.Drawing.Point(388, 20);
+ this.uiLine4.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine4.Name = "uiLine4";
+ this.uiLine4.Size = new System.Drawing.Size(306, 20);
+ this.uiLine4.TabIndex = 23;
+ this.uiLine4.Text = "UIIntegerUpDown";
+ this.uiLine4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine5
+ //
+ this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine5.Location = new System.Drawing.Point(388, 97);
+ this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine5.Name = "uiLine5";
+ this.uiLine5.Size = new System.Drawing.Size(306, 20);
+ this.uiLine5.TabIndex = 24;
+ this.uiLine5.Text = "UIDoubleUpDown";
+ this.uiLine5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiRichTextBox1
+ //
+ this.uiRichTextBox1.AutoWordSelection = true;
+ this.uiRichTextBox1.ContextMenuStrip = this.uiContextMenuStrip1;
+ this.uiRichTextBox1.FillColor = System.Drawing.Color.White;
+ this.uiRichTextBox1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiRichTextBox1.Location = new System.Drawing.Point(388, 219);
+ this.uiRichTextBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiRichTextBox1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiRichTextBox1.Name = "uiRichTextBox1";
+ this.uiRichTextBox1.Padding = new System.Windows.Forms.Padding(2);
+ this.uiRichTextBox1.Size = new System.Drawing.Size(308, 226);
+ this.uiRichTextBox1.TabIndex = 32;
+ this.uiRichTextBox1.Text = "Blog: https://www.cnblogs.com/yhuse\nGitee: https://gitee.com/yhuse/SunnyUI\nGitHub" +
+ ": https://github.com/yhuse/SunnyUI\nSunnyUI.Net 系列文章目录\n欢迎交流,QQ群: 56829229 (SunnyU" +
+ "I技术交流群),请给源码项目点个Star吧!!!";
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(30, 180);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(308, 20);
+ this.uiLine2.TabIndex = 33;
+ this.uiLine2.Text = "UITextBox";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine3
+ //
+ this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine3.Location = new System.Drawing.Point(388, 180);
+ this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine3.Name = "uiLine3";
+ this.uiLine3.Size = new System.Drawing.Size(308, 20);
+ this.uiLine3.TabIndex = 34;
+ this.uiLine3.Text = "UIRichTextBox";
+ this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiTextBox4
+ //
+ this.uiTextBox4.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.uiTextBox4.FillColor = System.Drawing.Color.White;
+ this.uiTextBox4.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiTextBox4.Location = new System.Drawing.Point(30, 219);
+ this.uiTextBox4.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiTextBox4.Maximum = 2147483647D;
+ this.uiTextBox4.Minimum = -2147483648D;
+ this.uiTextBox4.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiTextBox4.Multiline = true;
+ this.uiTextBox4.Name = "uiTextBox4";
+ this.uiTextBox4.Padding = new System.Windows.Forms.Padding(5);
+ this.uiTextBox4.Size = new System.Drawing.Size(308, 226);
+ this.uiTextBox4.TabIndex = 35;
+ this.uiTextBox4.Text = "Blog: https://www.cnblogs.com/yhuse\r\nGitee: https://gitee.com/yhuse/SunnyUI\r\nGitH" +
+ "ub: https://github.com/yhuse/SunnyUI\r\nSunnyUI.Net 系列文章目录\r\n欢迎交流,QQ群: 56829229 (Su" +
+ "nnyUI技术交流群),请给源码项目点个Star吧!!!";
+ this.uiTextBox4.Watermark = "水印文字";
+ //
+ // uiContextMenuStrip1
+ //
+ this.uiContextMenuStrip1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiContextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.aaToolStripMenuItem});
+ this.uiContextMenuStrip1.Name = "uiContextMenuStrip1";
+ this.uiContextMenuStrip1.Size = new System.Drawing.Size(99, 30);
+ //
+ // aaToolStripMenuItem
+ //
+ this.aaToolStripMenuItem.Name = "aaToolStripMenuItem";
+ this.aaToolStripMenuItem.Size = new System.Drawing.Size(98, 26);
+ this.aaToolStripMenuItem.Text = "aa";
+ //
+ // FTextBox
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 565);
+ this.Name = "FTextBox";
+ this.Symbol = 61962;
+ this.Text = "TextBox";
+ this.Controls.SetChildIndex(this.PagePanel, 0);
+ this.PagePanel.ResumeLayout(false);
+ this.PagePanel.PerformLayout();
+ this.uiContextMenuStrip1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ private UILabel uiLabel3;
+ private UITextBox uiTextBox3;
+ private UILabel uiLabel2;
+ private UITextBox uiTextBox2;
+ private UILabel uiLabel1;
+ private UITextBox uiTextBox1;
+ private UIIntegerUpDown uiIntegerUpDown1;
+ private UIDoubleUpDown uiDoubleUpDown1;
+ private UILine uiLine4;
+ private UILine uiLine1;
+ private UILine uiLine5;
+ private UIRichTextBox uiRichTextBox1;
+ private UITextBox uiTextBox4;
+ private UILine uiLine3;
+ private UILine uiLine2;
+ private UIContextMenuStrip uiContextMenuStrip1;
+ private System.Windows.Forms.ToolStripMenuItem aaToolStripMenuItem;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FTextBox.cs b/SunnyUI.Net5.Demo/Controls/FTextBox.cs
new file mode 100644
index 00000000..1029db54
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTextBox.cs
@@ -0,0 +1,10 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FTextBox : UITitlePage
+ {
+ public FTextBox()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FTextBox.resx b/SunnyUI.Net5.Demo/Controls/FTextBox.resx
new file mode 100644
index 00000000..93ecf1d7
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTextBox.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FTransfer.Designer.cs b/SunnyUI.Net5.Demo/Controls/FTransfer.Designer.cs
new file mode 100644
index 00000000..475b3ac6
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTransfer.Designer.cs
@@ -0,0 +1,104 @@
+namespace Sunny.UI.Demo
+{
+ partial class FTransfer
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiTransfer1 = new Sunny.UI.UITransfer();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiTransfer1);
+ this.PagePanel.Size = new System.Drawing.Size(800, 480);
+ //
+ // uiTransfer1
+ //
+ this.uiTransfer1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiTransfer1.ItemsLeft.AddRange(new object[] {
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8"});
+ this.uiTransfer1.ItemsRight.AddRange(new object[] {
+ "9",
+ "10",
+ "11",
+ "12",
+ "13",
+ "14",
+ "15",
+ "16"});
+ this.uiTransfer1.Location = new System.Drawing.Point(30, 55);
+ this.uiTransfer1.Margin = new System.Windows.Forms.Padding(7, 9, 7, 9);
+ this.uiTransfer1.Name = "uiTransfer1";
+ this.uiTransfer1.Padding = new System.Windows.Forms.Padding(1);
+ this.uiTransfer1.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
+ this.uiTransfer1.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None;
+ this.uiTransfer1.Size = new System.Drawing.Size(427, 370);
+ this.uiTransfer1.TabIndex = 3;
+ this.uiTransfer1.Text = "uiTransfer1";
+ this.uiTransfer1.ItemsLeftCountChange += new System.EventHandler(this.uiTransfer1_ItemsLeftCountChange);
+ this.uiTransfer1.ItemsRightCountChange += new System.EventHandler(this.uiTransfer1_ItemsRightCountChange);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 19;
+ this.uiLine1.Text = "UITransfer";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FTransfer
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 515);
+ this.Name = "FTransfer";
+ this.Symbol = 61516;
+ this.Text = "Transfer";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UITransfer uiTransfer1;
+ private UILine uiLine1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FTransfer.cs b/SunnyUI.Net5.Demo/Controls/FTransfer.cs
new file mode 100644
index 00000000..20e3a906
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTransfer.cs
@@ -0,0 +1,22 @@
+using System;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FTransfer : UITitlePage
+ {
+ public FTransfer()
+ {
+ InitializeComponent();
+ }
+
+ private void uiTransfer1_ItemsLeftCountChange(object sender, System.EventArgs e)
+ {
+ Console.WriteLine("Left: " + uiTransfer1.ItemsLeft.Count);
+ }
+
+ private void uiTransfer1_ItemsRightCountChange(object sender, System.EventArgs e)
+ {
+ Console.WriteLine("Right: " + uiTransfer1.ItemsRight.Count);
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Controls/FTransfer.resx b/SunnyUI.Net5.Demo/Controls/FTransfer.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTransfer.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FTreeView.Designer.cs b/SunnyUI.Net5.Demo/Controls/FTreeView.Designer.cs
new file mode 100644
index 00000000..918e8bb0
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTreeView.Designer.cs
@@ -0,0 +1,167 @@
+namespace Sunny.UI.Demo
+{
+ partial class FTreeView
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("节点8");
+ System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("节点9");
+ System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("节点10");
+ System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("节点11");
+ System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("节点12");
+ System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("节点13");
+ System.Windows.Forms.TreeNode treeNode7 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] {
+ treeNode1,
+ treeNode2,
+ treeNode3,
+ treeNode4,
+ treeNode5,
+ treeNode6});
+ System.Windows.Forms.TreeNode treeNode8 = new System.Windows.Forms.TreeNode("节点14");
+ System.Windows.Forms.TreeNode treeNode9 = new System.Windows.Forms.TreeNode("节点15");
+ System.Windows.Forms.TreeNode treeNode10 = new System.Windows.Forms.TreeNode("节点16");
+ System.Windows.Forms.TreeNode treeNode11 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] {
+ treeNode8,
+ treeNode9,
+ treeNode10});
+ System.Windows.Forms.TreeNode treeNode12 = new System.Windows.Forms.TreeNode("节点2");
+ System.Windows.Forms.TreeNode treeNode13 = new System.Windows.Forms.TreeNode("节点3");
+ System.Windows.Forms.TreeNode treeNode14 = new System.Windows.Forms.TreeNode("节点4");
+ System.Windows.Forms.TreeNode treeNode15 = new System.Windows.Forms.TreeNode("节点5");
+ System.Windows.Forms.TreeNode treeNode16 = new System.Windows.Forms.TreeNode("节点6");
+ System.Windows.Forms.TreeNode treeNode17 = new System.Windows.Forms.TreeNode("节点17");
+ System.Windows.Forms.TreeNode treeNode18 = new System.Windows.Forms.TreeNode("节点18");
+ System.Windows.Forms.TreeNode treeNode19 = new System.Windows.Forms.TreeNode("节点19");
+ System.Windows.Forms.TreeNode treeNode20 = new System.Windows.Forms.TreeNode("节点7", new System.Windows.Forms.TreeNode[] {
+ treeNode17,
+ treeNode18,
+ treeNode19});
+ this.uiTreeView1 = new Sunny.UI.UITreeView();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.uiTreeView1);
+ //
+ // uiTreeView1
+ //
+ this.uiTreeView1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));
+ this.uiTreeView1.CheckBoxes = true;
+ this.uiTreeView1.FillColor = System.Drawing.Color.White;
+ this.uiTreeView1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiTreeView1.Location = new System.Drawing.Point(33, 54);
+ this.uiTreeView1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.uiTreeView1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiTreeView1.Name = "uiTreeView1";
+ treeNode1.Name = "节点8";
+ treeNode1.Text = "节点8";
+ treeNode2.Name = "节点9";
+ treeNode2.Text = "节点9";
+ treeNode3.Name = "节点10";
+ treeNode3.Text = "节点10";
+ treeNode4.Name = "节点11";
+ treeNode4.Text = "节点11";
+ treeNode5.Name = "节点12";
+ treeNode5.Text = "节点12";
+ treeNode6.Name = "节点13";
+ treeNode6.Text = "节点13";
+ treeNode7.Name = "节点0";
+ treeNode7.Text = "节点0";
+ treeNode8.Name = "节点14";
+ treeNode8.Text = "节点14";
+ treeNode9.Name = "节点15";
+ treeNode9.Text = "节点15";
+ treeNode10.Name = "节点16";
+ treeNode10.Text = "节点16";
+ treeNode11.Name = "节点1";
+ treeNode11.Text = "节点1";
+ treeNode12.Name = "节点2";
+ treeNode12.Text = "节点2";
+ treeNode13.Name = "节点3";
+ treeNode13.Text = "节点3";
+ treeNode14.Name = "节点4";
+ treeNode14.Text = "节点4";
+ treeNode15.Name = "节点5";
+ treeNode15.Text = "节点5";
+ treeNode16.Name = "节点6";
+ treeNode16.Text = "节点6";
+ treeNode17.Name = "节点17";
+ treeNode17.Text = "节点17";
+ treeNode18.Name = "节点18";
+ treeNode18.Text = "节点18";
+ treeNode19.Name = "节点19";
+ treeNode19.Text = "节点19";
+ treeNode20.Name = "节点7";
+ treeNode20.Text = "节点7";
+ this.uiTreeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+ treeNode7,
+ treeNode11,
+ treeNode12,
+ treeNode13,
+ treeNode14,
+ treeNode15,
+ treeNode16,
+ treeNode20});
+ this.uiTreeView1.SelectedNode = null;
+ this.uiTreeView1.ShowLines = true;
+ this.uiTreeView1.Size = new System.Drawing.Size(266, 313);
+ this.uiTreeView1.TabIndex = 0;
+ this.uiTreeView1.Text = null;
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(33, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 16);
+ this.uiLine1.TabIndex = 19;
+ this.uiLine1.Text = "UITreeView";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FTreeView
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "FTreeView";
+ this.Symbol = 61499;
+ this.Text = "TreeView";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UITreeView uiTreeView1;
+ private UILine uiLine1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Controls/FTreeView.cs b/SunnyUI.Net5.Demo/Controls/FTreeView.cs
new file mode 100644
index 00000000..34496724
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTreeView.cs
@@ -0,0 +1,10 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FTreeView : UITitlePage
+ {
+ public FTreeView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Controls/FTreeView.resx b/SunnyUI.Net5.Demo/Controls/FTreeView.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Controls/FTreeView.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/FMain.Designer.cs b/SunnyUI.Net5.Demo/FMain.Designer.cs
new file mode 100644
index 00000000..a7e412b4
--- /dev/null
+++ b/SunnyUI.Net5.Demo/FMain.Designer.cs
@@ -0,0 +1,127 @@
+namespace Sunny.UI.Demo
+{
+ partial class FMain
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("控件");
+ System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("窗体");
+ System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("图表");
+ System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("主题");
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FMain));
+ this.uiLogo1 = new Sunny.UI.UILogo();
+ this.uiAvatar = new Sunny.UI.UIAvatar();
+ this.StyleManager = new Sunny.UI.UIStyleManager(this.components);
+ this.Header.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // Aside
+ //
+ this.Aside.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
+ this.Aside.ItemHeight = 36;
+ this.Aside.LineColor = System.Drawing.Color.Black;
+ this.Aside.Location = new System.Drawing.Point(2, 145);
+ this.Aside.MenuStyle = Sunny.UI.UIMenuStyle.Black;
+ this.Aside.ShowOneNode = true;
+ this.Aside.ShowTips = true;
+ this.Aside.Size = new System.Drawing.Size(250, 573);
+ this.Aside.Style = Sunny.UI.UIStyle.Custom;
+ //
+ // Header
+ //
+ this.Header.Controls.Add(this.uiAvatar);
+ this.Header.Controls.Add(this.uiLogo1);
+ this.Header.Location = new System.Drawing.Point(2, 35);
+ treeNode1.ImageIndex = 1;
+ treeNode1.Name = "节点0";
+ treeNode1.Text = "控件";
+ treeNode2.Name = "节点1";
+ treeNode2.Text = "窗体";
+ treeNode3.Name = "节点2";
+ treeNode3.Text = "图表";
+ treeNode4.Name = "节点2";
+ treeNode4.Text = "主题";
+ this.Header.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+ treeNode1,
+ treeNode2,
+ treeNode3,
+ treeNode4});
+ this.Header.SelectedIndex = 0;
+ this.Header.Size = new System.Drawing.Size(1020, 110);
+ this.Header.Style = Sunny.UI.UIStyle.Custom;
+ this.Header.MenuItemClick += new Sunny.UI.UINavBar.OnMenuItemClick(this.Header_MenuItemClick);
+ //
+ // uiLogo1
+ //
+ this.uiLogo1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLogo1.Location = new System.Drawing.Point(20, 15);
+ this.uiLogo1.MaximumSize = new System.Drawing.Size(300, 80);
+ this.uiLogo1.MinimumSize = new System.Drawing.Size(300, 80);
+ this.uiLogo1.Name = "uiLogo1";
+ this.uiLogo1.Size = new System.Drawing.Size(300, 80);
+ this.uiLogo1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiLogo1.TabIndex = 3;
+ this.uiLogo1.Text = "uiLogo1";
+ //
+ // uiAvatar
+ //
+ this.uiAvatar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.uiAvatar.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiAvatar.Location = new System.Drawing.Point(939, 25);
+ this.uiAvatar.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiAvatar.Name = "uiAvatar";
+ this.uiAvatar.Size = new System.Drawing.Size(66, 70);
+ this.uiAvatar.TabIndex = 4;
+ this.uiAvatar.Text = "uiAvatar1";
+ //
+ // FMain
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1024, 720);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MinimumSize = new System.Drawing.Size(1024, 720);
+ this.Name = "FMain";
+ this.Padding = new System.Windows.Forms.Padding(2, 35, 2, 2);
+ this.ShowDragStretch = true;
+ this.ShowRadius = false;
+ this.ShowShadow = true;
+ this.Text = "SunnyUI.Net";
+ this.Selecting += new Sunny.UI.UIMainFrame.OnSelecting(this.FMain_Selecting);
+ this.Header.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UILogo uiLogo1;
+ private UIAvatar uiAvatar;
+ private UIStyleManager StyleManager;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/FMain.cs b/SunnyUI.Net5.Demo/FMain.cs
new file mode 100644
index 00000000..8595bcba
--- /dev/null
+++ b/SunnyUI.Net5.Demo/FMain.cs
@@ -0,0 +1,93 @@
+using Sunny.UI.Demo.Charts;
+using Sunny.UI.Demo.Controls;
+using Sunny.UI.Demo.Forms;
+using System;
+using System.Windows.Forms;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FMain : UIHeaderAsideMainFrame
+ {
+ public FMain()
+ {
+ InitializeComponent();
+ int pageIndex = 1000;
+ Header.SetNodePageIndex(Header.Nodes[0], pageIndex);
+ Header.SetNodeSymbol(Header.Nodes[0], 61451);
+ TreeNode parent = Aside.CreateNode("Controls", 61451, 24, pageIndex);
+ //通过设置PageIndex关联
+ Aside.CreateChildNode(parent, 61640, 24, AddPage(new FButton(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61490, 24, AddPage(new FLabel(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61770, 24, AddPage(new FCheckBox(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61842, 24, AddPage(new FRadioButton(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61962, 24, AddPage(new FTextBox(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61776, 24, AddPage(new FCombobox(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61646, 24, AddPage(new FDataGridView(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61474, 24, AddPage(new FListBox(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61499, 24, AddPage(new FTreeView(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61912, 24, AddPage(new FNavigation(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61716, 24, AddPage(new FTabControl(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61544, 24, AddPage(new FLine(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61590, 24, AddPage(new FPanel(), ++pageIndex));
+ Aside.CreateChildNode(parent, AddPage(new FFlowLayoutPanel(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61516, 24, AddPage(new FTransfer(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61447, 24, AddPage(new FAvatar(), ++pageIndex));
+ Aside.CreateChildNode(parent, 62104, 24, AddPage(new FContextMenuStrip(), ++pageIndex));
+ Aside.CreateChildNode(parent, AddPage(new FScrollBar(), ++pageIndex));
+ Aside.CreateChildNode(parent, 61668, 24, AddPage(new FMeter(), ++pageIndex));
+ Aside.CreateChildNode(parent, 62173, 24, AddPage(new FOther(), ++pageIndex));
+ Aside.SetNodeTipsText(parent.Nodes[0], "1");
+
+ pageIndex = 2000;
+ Header.SetNodePageIndex(Header.Nodes[1], pageIndex);
+ Header.SetNodeSymbol(Header.Nodes[1], 61818);
+ parent = Aside.CreateNode("Forms", 61818, 24, pageIndex);
+ //通过设置GUID关联,节点字体图标和大小由UIPage设置
+ Aside.CreateChildNode(parent, AddPage(new FDialogs(), Guid.NewGuid()));
+ Aside.CreateChildNode(parent, AddPage(new FEditor(), Guid.NewGuid()));
+ Aside.CreateChildNode(parent, AddPage(new FFrames(), Guid.NewGuid()));
+
+ pageIndex = 3000;
+ Header.SetNodePageIndex(Header.Nodes[2], pageIndex);
+ Header.SetNodeSymbol(Header.Nodes[2], 61950);
+ parent = Aside.CreateNode("Charts", 61950, 24, pageIndex);
+ //直接关联(默认自动生成GUID)
+ Aside.CreateChildNode(parent, AddPage(new FPieChart()));
+ Aside.CreateChildNode(parent, AddPage(new FDoughnutChart()));
+ Aside.CreateChildNode(parent, AddPage(new FBarChart()));
+ Aside.CreateChildNode(parent, AddPage(new FBarChartEx()));
+ Aside.CreateChildNode(parent, AddPage(new FLineChart()));
+
+ Header.SetNodeSymbol(Header.Nodes[3], 61502);
+ var styles = UIStyles.PopularStyles();
+ foreach (UIStyle style in styles)
+ {
+ Header.CreateChildNode(Header.Nodes[3], style.DisplayText(), style.Value());
+ }
+
+ Aside.SelectFirst();
+ }
+
+ private void Header_MenuItemClick(string text, int menuIndex, int pageIndex)
+ {
+ switch (menuIndex)
+ {
+ case 0:
+ case 1:
+ case 2:
+ Aside.SelectPage(pageIndex);
+ break;
+
+ case 3:
+ UIStyle style = (UIStyle)pageIndex;
+ StyleManager.Style = style;
+ break;
+ }
+ }
+
+ private void FMain_Selecting(object sender, TabControlCancelEventArgs e, UIPage page)
+ {
+ page?.Text.ConsoleWriteLine();
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/FMain.resx b/SunnyUI.Net5.Demo/FMain.resx
new file mode 100644
index 00000000..8afef9d3
--- /dev/null
+++ b/SunnyUI.Net5.Demo/FMain.resx
@@ -0,0 +1,864 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ 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
+ AQICAwIEKn/a2oYUDAx88QAAAAD90j88l8jqqVBJSEhISEhISEhNUp2r8XgrBwECAgICAgIDAQNugNrh
+ gxa4/QAAAAD9/Zuk6dFUTEhISEhISEhISEhISElUxgoBAQICAgICAgICAgIDCHG23Nrx/QAAAAAA/f3S
+ VkxISEhISEhISEhISEhISEhTxgsBAgICAgICAgICAgICAgEJd+v9AAAAAAAA/fioSEhISEhISEhISEhI
+ SEhISEhTxgsBAgICAgICAgICAgICAgIBdOz9AAAAAAAAAP3qUkhISEhISEhISEhISEhISEhTxgsBAgIC
+ AgICBAICAgICAgIp3f0AAAAAAAAAAP39q09ISEhISEhISEhISEhISEhTxgsBAgICBAICAgICBAICAgd6
+ /QAAAAAAAAAAAAD9/cpNSEhISEhISEhISEhISEhTxgsBAgICAgICAgQCAgICB5X98QAAAAAAAAAAAAAA
+ /finTUhISEhISEhISEhISEhTxgsBAgICAgQCAgICAgIGdfH9AAAAAAAAAAAAAAAAAP39yk9ISEhISEhI
+ SEhISEhTxgsBAgICAgICAgICAgqV8f0AAAAAAAAAAAAAAAAAAAD9/atSSEhISEhISEhISEhTxgsBAgIC
+ BAICBAICK5Xx/QAAAAAAAAAAAAAAAAAAAAAA/f34pk5ISEhISEhISEhTxgsBAgICAgICAgt13/39AAAA
+ AAAAAAAAAAAAAAAAAAAAAP39+NFXTUhISEhISEhTxgsBAgICAgEHLrnx/QAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA/f390qdUTUxJSEhTxgoBAgcHLHi78f39AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f3o
+ yqlYU1Gc3nAtc5S53v39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f39/f39/fj9/f39
+ /QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39/f39AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA///wD///AAD//wAB//8AAP/8AAA//wAA//AAAA//AAD/wAAAB/8AAP+AAAAB/wAA/wAAAAD/
+ AAD+AAAAAH8AAPwAAAAAPwAA+AAAAAAfAADwAAAAAB8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAA
+ AAAAAwAAwAAAAAADAACAAAAAAAMAAIAAAAAAAQAAgAAH4AABAACAAA/wAAEAAAAAH/gAAQAAAAA//AAA
+ AAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/8AAAAAAAAH/wAAQAAAAAf+AABAACAAA/wAAEAAIAA
+ B+AAAQAAgAAAAAABAACAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA8AAAAAAP
+ AADwAAAAAB8AAPgAAAAAHwAA/AAAAAA/AAD+AAAAAH8AAP8AAAAA/wAA/4AAAAH/AAD/wAAAB/8AAP/w
+ AAAP/wAA//wAAD//AAD//4AB//8AAP//+B///wAAKAAAACAAAABAAAAAAQAIAAAAAAAABAAAAAAAAAAA
+ AAAAAQAAAAEAAAAAAAA2wmUAOcJlADzDZwA7w2gAPcJoAD3EaQA/xGwAQcVtAEXGbwBGxnAAVcVzAFzF
+ dQByx34A/549AP+gPwD/n0AA/6BBAP+gRAD+okoA/qRMAP6nVAD+qFQA/qteAP6sXgD+r2cA/rRvAP62
+ dQA3afcAOGn3ADlq+AA8a/gAPGz4AEFw9wBGc/gAS3f4AFZ++ABgzIIAac6IAHjNiwBt0Y4AcNGPADmi
+ 5wA8o+cAO6PoAD2j6AA/pOgAWoH4AFyD+ABehPgAYYj3AGKJ+ABlifgAZ4z4AGuP+ABukPgAcJL4AHyb
+ +ABBpOcARaboAEqo6ABTq+kAXq/qAGSx6wBntesAabXrAHy/7QAAxf8ABsX/AAvF/wAMxv8AEsf+ABXH
+ /wAZyf4AKcv+ADjP/gA30P8APtD+AEDP/gBK0v4ATtL+AFrW/gCZk5AAmpSRAJyWkwCdl5QAnpiVAKKc
+ mQCloJ0Ap6OgAKijoQCppaIAr6uoALm2swC6trQAvru5AP2+hgDAvLoAls+WAKTRnACc3rAApN+2AKPg
+ tgCj4LgAqeK7AK7hvQC74L4A/cCKAP7CjgD+xJIA/ceYAP7KnwDJ27kA/c2mAP3RqgD70q4A/dOuAP3X
+ twCKpPkAjaf5AJOs+QCVrvkApbn5AKi8+QCv5sEAsebCALrmxwCBwO4AiMLvAJfH8ACXyfAAmMrwAJvM
+ 8ACczfEAgt39AInf/gCc0PMAoM7xALHC+gCwxPkAt8b5AKvT8gCx1/MAtdfzALXU9AC81/UAutnzAL3d
+ 9QCK4P0AleH9AJni/QCd5f0Ao+H8ALDn/ADEwcAAx8TCANXOyQDQzcwA0N7AANLR0ADV09IA1tTTANfV
+ 1ADa1NEA2NbVANrY2ADd29sA597FAPPYxAD93MIA/N3GAPDbywDp39cAyerSAM3r1QDX7t0A2e/fANbw
+ 3gD94s4A6eDZAOzn2ADq6toA9uTTAPfl1QD85tUA/OnYAMTW9wDE3fUAydz2AMPQ+gDG0voAx9T5AMrV
+ +gDP2fkA3vPlAMvn+QDF7P0Ay+j5AMru/QDM7f0A0+X3ANnn9wDW6PcA2+D6ANHu/ADW8vwA3/T8AOLh
+ 4ADl4+IA5uXkAO3r6wDv7OoA7OvsAO/t7QD17+AA8uvnAPns4QD47+QA8+7rAPDu7QDn8uUA5vPpAOb0
+ 6gDo9OkA7fTuAO7u8wDl6voA5+z7AOnt+QDs7vsA8u/xAObx+QDh9PsA5fT6AODz/ADh9PwA7vD7APTx
+ 8QD09/MA9fP0APX09AD59fMA/Pb1APb49gDx8/sA8vb7APH3/AD39/wA+Pf7APf4+wD1+fwA+fj5APz5
+ +QD6+fwA/Pr8AP///wAAAAAAAAAAAAAAAAAA5Pj4+PjmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADi5MB7
+ eXvRm52m1NQAAAAAAAAAAAAAAAAAAAAAAAD0wXcwIR4eMp9WUlJaX8/vAAAAAAAAAAAAAAAAAADi7Hkk
+ Hh4eHh40n1ZSUlJSWGHU1AAAAAAAAAAAAAAA4r00HB4eHiAeHjSfVlJSUlJSUlqk1AAAAAAAAAAAAOLA
+ MB4eHiAgHiAeNJ9XUlJSUlJSUlim2wAAAAAAAADkvTIeHh4gHiAgIB40pFZSUlZSUlJSUlim2wAAAAAA
+ APg4Hh4eICAgICAgHjSfVlJSUlZSVlZSUlrbAAAAAAD5yr13Ih4gICAgICAeNKRWUlZSUlJSUlJXXdf4
+ AAAAAMpBgLqLOCAgICAgICA3pFZSUlZSUlJWXKSoa7gAAADngisrPIG8ezUgICI5jMvvpF1XUlZWWqOr
+ YBQOa9gAAPRAKyorKz6QwXcvi/T4+Pj48Z9XVpuzbxgQDg4Y2AAAyDsqKio7KitAkeL45AAAAADv+NGs
+ cRgODw8PDhKqAOeQKyoqOyoqKyp/9OQAAAAAAADx8XEUEA4PDw8OEHIA+IkrKioqKjsqK5D4AAAAAAAA
+ AAD4dRIODw8PDxIObvj4iSsqOyoqKio7u/gAAAAAAAAAAPiyFA4PDw8PDw5r8fiJKyoqOyoqKju7+AAA
+ AAAAAAAA+LIUDg8PDw8PDm7x+IkrKioqKjsqK434AAAAAAAAAAD4qRIOEg8PDw8ObrnskioqOyoqOztB
+ u/nnAAAAAAAA7e61choSDg4SDg5yAADJPCoqKis7icOGlfjpAAAAAO34fCdwt24VDg4QErIAAPlAKys9
+ g8WGSkNElOv4+Pj432YGAQYNnrdrFg4Z2AAA54kuQruYUEZDQ0NHUJXG32goCQIEBAQLYqeqGm/WAAAA
+ 55OZUUZDQ0NDQ0REREx8CQECAgQBBAQEDGO18QAAAAD4xUlDQ0NDQ0NDRERETHwGBAICAgQBBAEEBGr4
+ AAAAAAD5UENDQ0NDQ0NERERMfAkEBAICAgQEAQQm3wAAAAAAAOvGT0NDQ0NDQ0REREx8BgQBAgICAgIE
+ Ja3cAAAAAAAAAOfGT0NDQ0NDRERETHwIBAQCAgICAiWt3wAAAAAAAAAAAOvGUENDQ0NERERMfAkBBAIC
+ AgIprd8AAAAAAAAAAAAAAM74lkxDQ0REREx8BgQBBAYlZ9/CAAAAAAAAAAAAAAAAAAD5zpRQR0RETHwG
+ BggmZLDuAAAAAAAAAAAAAAAAAAAAAAAAzefGmZSXsWd+sN/CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ +Pj4+AAAAAAAAAAAAAAAAAAA//gf///AA///AAD//AAAP/gAAB/wAAAP4AAAB+AAAAfAAAADwAAAA4AA
+ AAGAAAABgAPAAQAH4AEAD/AAAA/wAAAP8AAAD/AAAAfgAYADwAGAAAABgAAAAcAAAAPAAAAD4AAAB+AA
+ AAfwAAAP+AAAH/wAAD//AAD//8AD///8P/8oAAAAEAAAACAAAAABAAgAAAAAAAABAAAAAAAAAAAAAAAB
+ AAAAAQAAAAAAADnDZgA6xGcAPcRpAErFbgBex3gA/58+AP+gPwD/oEEA/qhUAP6rWgD+r2MA/rNtADtr
+ 9wA9bfcAO2v4ADxs+ABNevgAUXz4AFd/+ABezYIActKRAHXTkwB41pcAOqPnADuj6AA8o+gAPaToAFiA
+ +ABpjfgAcJL5AHSV+QBApegARqfoAF2x6wBhs+sAcrrtAADF/wAHxv8AG8r/ABzL/wAvzv4AOM/+AEvT
+ /gBX1f4AWdb+AHHb/gCalJEAnJaUAKCalwCmoZ8AsKyqALq2swC7trQAvbe0AI/bpwCt1qcA+MqcAMrA
+ uQDxyaUA79KrAIC+7wCZsfoApLz4ALnnxwCGxO8Aldr5AKfE9gCuwPoAq+n9ALPm+wDKx8UA0c/OAMHk
+ xQD8480A/OTOAPLj1gD65NIA/OvdAPzs3wDH3vYA0dr7AMXg9QDR5/cA3+b7ANvr+ADc7fkAz/H9ANby
+ /QDp7+IA6+rpAO3s7AD97eIA4vTnAOb26wDl6/wA7fjwAOfy+gDi9v0A6fP6AO3x/ADr+P0A8vLxAPD3
+ +wDy9fwA8fr9APb6/AD5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA////AAAAAAAAZFRRWloAAAAAAAAAAABoRBwOETUwMkgAAAAAAABkHg4PDxE1MDAwM2YAAABq
+ Hg8PDw8RNTAvMC8zAAAAUkMdDw8OEjUvLy8xOk0AaCIgPT8SPl9mRzA1OwkKAGEbGxshUGgAAGtMCwYH
+ CE5TGBsbG1YAAAAAXAgHBwZKUxgbGxtWAAAAAFwICAcGSmQYGxtBRmoAAGtJPAoGCE5qIyRCKSUuWF03
+ AgQ4OQwAAFYrJSUlJSgXAgICAgVZAABqLCUlJSUoFwICAgIVAAAAAGUtJSUlKBcCAgIVYAAAAAAAAEUq
+ JSgXAxRAAAAAAAAAAAAAAGFXXV4AAAAAAAD4PwAA4A8AAMADAACAAwAAgAEAAAABAAABgAAAA8AAAAPA
+ AAABgAAAAAEAAIABAACAAwAAwAMAAPAPAAD8PwAAKAAAAEgAAACQAAAAAQAgAAAAAABgVAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn5
+ /QL9/f0h/f39Pv39/VX9/f1p/v39ef79/X/+/f2A/f39gP39/YD9/f2A/f39fv39/XT9/f1j/f39Tf39
+ /TP7+/sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/RP9/f1B/f39av7+/Y/+/v2w/v79zf//
+ /eX//v34///9/////f////3///79//39/f///v7////////////+/v/y/v7+3P7+/sL+/v6l/v7+g/39
+ /V39/f0y+/v7CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAPv7/Qf9/f04/f39cP39/aP+/v3R///99////f////7////9/////f/5+fv/7O77/+Hk
+ +//h4/r/7/H9///////18/P/6efn//Hx7//4+Pj//v39//////////////////7+/uz+/v7C/v7+k/39
+ /V39/f0kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7+/0M/f39SP39
+ /Yz+/v3I///9+P///f////3/+vn9/+Xn+//R1/r/sMH5/5Su+f+Oqfr/g5/5/3eV+f9ykfn/u8r7////
+ ///Z19X/sKup/7m2s//Bvrv/xsLB/9HPzv/d3Nz/6unp//n4+f////////////7+/uv+/v60/v7+dvv7
+ +zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/39Bv39/UP9/f2S/v792f///f////3/+vr7/+Pm
+ +/+8yPr/k6v5/3uY+f9oiPj/R3L2/zBl+P80Zvj/NGf4/zRn+P8rYfb/mbL6///////Lx8X/kouI/5aQ
+ jP+XkI3/lY+L/5qVkv+oo6H/tK+t/8G9vP/U0tH/6Ojo//n4+f//////////+f7+/sH+/f53/fv7KQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD9/f0o/f39f/79/dP///3////9//j4+//N1fr/m7D6/3iV+f9Tefj/NWf2/zRn
+ +P83afj/Omv4/zpr+P86a/j/Omz4/zpr+P8xZfb/nLX6///////Nycb/lY+L/5qUkf+alJH/mpSR/5mT
+ kP+Yko//l5GO/5WPjP+empf/sq6s/8PAv//c2tn/9vX2///////////4/f7+uf3+/WH9+/sTAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39Cf39
+ /VP9/f23//79+f///f/4+Pv/ztX6/5it+f9ihfj/PGv4/zRn+P83avj/Omv4/zps+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zpr+P8yZvj/nLX6///////Nycb/lo+M/5qUkf+blZL/m5WS/5uVkv+alJH/mpSR/5qU
+ kf+Zko//l5GN/5eRjv+moZ7/wL27/9za2f/29fX///////7//+n9/f2V/f39MwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0b/f39e/39/d7///3////9/9zg
+ +/+dsPr/YoX4/zxr+P81afj/Omv4/zps+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zpr
+ +P8yZfj/nLX6///////Nycb/lo+M/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/mpWS/5qU
+ kf+Yko//l5KO/6ahnv/Cvbv/4+Hg//v9/f///////v7+wv39/VX7+/sIAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/Sz9/f2d/v798////f/19fv/uMb5/2+P+f9Bbvj/NGj4/zpr
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zpr+P8yZfj/nLX6////
+ ///Nycb/lo+M/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/mpSR/5iS
+ jv+Yko//rKel/9HPzv/z8fH///////7+/t39/f1y+/v7EwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA/f39N/39/bL///3+///9/+Pm+/+brvn/Unv4/zJm9v84a/j/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zpr+P8yZfj/nLX6///////Nycb/lo+M/5qU
+ kf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+Zk5D/lpCN/6Ca
+ mP+/u7n/5uXl///+///////s/f39h/v7+xoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f07/f39vP//
+ /f////3/3OL7/4ad+f9Db/j/NWn4/zps+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zpr+P8yZfj/nLX6///////Nycb/lo+M/5qUkf+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/mpSR/5iSj/+Zk5D/sa2r/+Df
+ 3v/+/v3/////9P39/ZH7+/scAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/Tj9/f29///9/////f/S2fv/eJT5/z9t
+ +P83avj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zpr+P8yZfj/nLX6///////Nycb/lo+M/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+Zk5D/l5GO/6yopf/b2dj/+vr6////
+ //b9/f2Q+/v7GQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA/f39Lf39/bT///3////9/8/Y+/9vjvn/Omn4/zhr+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zpr
+ +P8yZfj/nLX6///////Nycb/lo+M/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/mpOQ/5aRjf+noqH/2NbW//v7+//////y/f39g/v7
+ +xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD9/f0d/f39oP/+/f////3/2N37/3WS+f86avj/OGv4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zpr+P8yZfj/nLX6////
+ ///Nycb/lo+M/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5qUkf+WkIz/qKOh/9za2//+/v7/////6v39/Wz6+voEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/Qv9/f1//v799v//
+ /f/e4/v/gZr5/z9u+P84a/j/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zpr+P8yZfj/nLX6///////Nycb/lo+M/5qU
+ kf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+alJH/lpCN/62opv/h4OD//v////7+/tj9/f1NAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/Vj+/v3h///9/+jq+/+Novn/QW74/zdq
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zpr+P8yZfj/nLX6///////Nycb/lo+M/5qUkf+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/mpOQ/5eRjv+xraz/5+fm///////9/f25/f39LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA/f39Lf39/bz///3/9vb7/6Gz+v9EcPj/N2n4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zpr+P8yZfj/nLX6///////Nycb/lo+M/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5mT
+ kP+Zk5D/wL28//Pz9f/////9/v39ivv7+wwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD9/f0J/f39hv39/fz///3/7Oz7/4ui+f83aPj/NGj4/zpr+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zpr
+ +P8yZfj/nLX6///////Nycb/lo+M/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+YkY7/n5mX/9DO
+ zf/7/fv//v7/4P39/VMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f1K/f392f/+
+ /f////7/+fn9/9Xa+v+Zrvn/X4L5/zpq+P83avj/Omz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zpr+P8yZfj/nLX6////
+ ///Nycb/lo+M/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/mpSR/5mTkP+XkI3/oJqY/8/NzP/6+/r//v////v7
+ +6r7+/odAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/RL9/f2a/v79//j5+//U5Pb/1OL4//76
+ /f/6+fv/y9P7/4+m+v9Re/j/MWb4/zhq+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zpr+P8yZvj/nLX6///////Nycb/lo+M/5qU
+ kf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+Zk5D/lpCM/56Zlv+5tbP/19fX//H19v/+/////fv6//v9/fD9+/1oAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/VH+/f3g///9/9nn9v9+uuz/aLDs/6nN8//n6/n////9//b1
+ /f+6yfr/epj5/0p0+P80Z/j/Omv4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zpr+P8xZfb/nLX6///////Nycb/lY+L/5qUkf+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/mZOQ/5eR
+ jv+blZP/sayq/9DOzv/v8fP////////s4f//0rL//uTS//3////9/v6y/f37IgAAAAAAAAAAAAAAAAAA
+ AAAAAAAA/f39DP39/ZT//v3//vv7/6XP8f9Bo+j/MKDn/0un6f98uO7/udX1//Hx+v///v7/6+v9/629
+ +v9ujvn/QW/4/zVo+P86a/j/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P86a/j/Omv4/zVn+P8rYPb/mbL6///////Lx8X/k4yI/5mSj/+alJH/mpSR/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5qUkf+Yko//mJKP/6mkof/JxsX/6Onq//3/
+ ////8+7//9Ox//+1dP//oE3//8WW//35+P/9///u/f39YwAAAAAAAAAAAAAAAAAAAAAAAAAA/f39Q/39
+ /dL///3/2+j4/3C26/80oOf/OqPo/zej6P83oOf/VKrq/4u+7//F2Pb/+Pb9/////v/e4fr/n7L6/2CD
+ +f86afj/N2r4/zps+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/Omv4/zdp+P8xZvb/SXT4/2+N
+ +f90k/n/u8r7///////Z2Nb/q6ek/52Ylf+Vj4v/mJGO/5mTkP+alZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+alJH/mZOP/5eQjf+kn5z/wL27/9/f3//5/f////n4///cwv//vIT//6NO//+b
+ N///mzf//61l//7gzv/7/////f7+ofn4+hMAAAAAAAAAAAAAAAAAAAAA/f39e/7+/f7///3/qtLz/0Sk
+ 6P84ouj/PKTo/zyk6P86o+j/N6Ho/zyi5/9eq+v/m8Xz/9fi+f/++v3//vv7/8zU+/+Qp/r/V374/zdo
+ +P83avj/Omz4/zxs+P88bPj/PGz4/zps+P83afj/PGv4/2aI+f+Oqfn/scL6/9nd+//j5fr/8fH9////
+ ///19fP/5OPi/9PRz//Cv73/rqmn/5uUkv+YkY7/mpSR/5uVkv+blZL/m5WS/5uVkv+blZL/m5SR/5mT
+ kP+Wj43/n5mX/7q3tf/a2dn/9fj6///9/v//4tD//8OU//+oWv//nDr//548//+fPv//nz7//50////H
+ m//9+vr/+/7/2Pr6+kkAAAAAAAAAAAAAAAD9/f0e/f39rv/+/v/x9fv/hsLu/zKf5/86o+j/PKTo/zyk
+ 6P88pOj/PKTo/zqj6P81ouf/RaXo/2ux7P+nyvP/5On6///+/f/49v3/wsz6/4Kd+f9Ldfj/Mmf4/zhr
+ +P88bPj/Omz4/zJn+P9Wfvn/l6z5/9DY+v/6+f3////9/////f////3///79//39/f/+/v7/////////
+ ///5+fn/5ePj/8jFw/+oo6D/l5GO/5mTkP+blZL/m5WS/5uVkv+Zk5D/l5CO/5yWk/+xrqv/0dDQ//Hz
+ 9v///////+zh///Mo///rWX//51B//+dOv//nz7//6A///+gP///nz///5w4//+1dv/+6d//+/////r7
+ +30AAAAAAAAAAAAAAAD9/f1M/v393P///v/R4/X/Z7Hq/zeh5/88pOj/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/OKPn/zSh5/9Kpun/erbu/7fS9v/u7/v///7+/+3u+/+wwPr/cpH5/0Rw+P8yZ/j/Omv4/2aI
+ +f+7yPr/+fj9/////f////3//v79//79/f/9/f34/f395v39/eX9/f32/f39//7+/v/+/v7///////r5
+ +v/b2tj/sa2q/5qUkf+Zk5D/mpSR/5iSj/+Yko//q6ak/8zJyf/q6+z//f/////x7P//07H//7Rz//+g
+ R///nDj//54+//+gP///oD///6A///+gP///oD///548//+jUv//1rj/+/////r9/qv6+vobAAAAAAAA
+ AAD9/f12//79///+/f+m0fP/QaPn/zqj6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zqj
+ 6P83ouj/N6Hn/1Sp6v+Mve//xdf2//Pz+/////7/4uT9/6K0+v9ghPj/cZD5/8/W+v///v3////9//7+
+ /f/9/f32/f39v/39/Yv9/f1q/f39WP39/Vf9/f1o/f39iP39/bz9/f3z/f39///////+//7/5eTk/7Wx
+ sP+Yko//lo+L/6Wfnf/BwL3/4uLi//r+////+Pb//9i7//+6f///o0///5w3//+ePP//oD///6A///+g
+ P///oD///6A///+gP///oD///58+//+bOv//xZT//fn5//r+/9T6+/tFAAAAAPv9/Q79/f2b///+//H1
+ +/+Gwu//MqDn/zqj6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/OqPo/zei
+ 6P8/o+f/X6vr/5nE8f/W4Pn/+vj9//v6/f/N1fr/09v6///++/////3//f39//39/df9/f17/f39L/39
+ /QIAAAAAAAAAAAAAAAAAAAAAAAAAAP39/Sv9/f10/f390f39/f/+/////////+Tj4v+7uLX/ure1/9ra
+ 2f/2+v3///39///hzf//wZH//6ZU//+bN///njz//58///+gP///oD///6A///+gP///oD///6A///+g
+ P///oD///58+//+cOP//t3v//uri//r+//j6+/tqAAAAAP39/S/+/f2+///+/+Dq+P93uez/NKDn/zqj
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P86o+j/NaLn/0em
+ 6P9rsOz/pMjz/+Lo+f/9+/v////9//7+/f/9/f3//f39yP39/U79/f0DAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA/f39Rv39/cH9/f3//v7+//v7+//u7u7/8fPz////////6d3//8mg//+s
+ Y///nT7//508//+fPv//oD///6A///+gP///oD///6A///+gP///oD///6A///+gP///oD///58///+d
+ Ov//rGb//t/O//r////6+/uKAAAAAP39/Uv+/f3b///+/87h9v9ksOr/N6Hn/zyj6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zij5/8xoOf/TaXp/7DO
+ 8//5+Pv///79//39/f/9/f3S/f39SgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAP39/UH9/f3L/f39//7+/v////////Ps///TsP//sm///59E//+dOv//nz7//6A///+g
+ P///oD///6A///+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+ePP//oU3//tOz//r/
+ ///6+/6o+vn6Gf39/WT+/v30///9/67V8/9Epef/OqPo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zqk6P81oef/W63p/8Pd9f////3//v39//39
+ /fD9/f1xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD9/f1n/f396/39/f/9/////ujg//+0df//mjL//588//+fP///oD///6A///+gP///oD///6A///+g
+ P///oD///6A///+gP///oD///6A///+gP///oD///6A///+fPv//mzr//sma//v7///7/f/A+vr7Mf39
+ /Xf//v3///79/5bM8f8xn+f/OqPo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zqj6P8yoOf/hcHu//Hz+/////7//f39//39/bL7+/shAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0Z/f39qP39
+ /f/9/v///vj4///Djf//mjT//58+//+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+g
+ P///oD///6A///+gP///oD///6A///+fPv//nDf//8GL//318//7/v/V+vv7Rv39/X///v7/+/n7/5LI
+ 8f8yn+f/OqPo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zqj6P8/o+j/pNDx///+/f///v3//f39/P39/XYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39bP39/fb9/v7//f/////U
+ sv//ok3//54+//+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+g
+ P///oD///6A///+fPv//nDj//7yE//3u6//6/v/l+vv7Vv39/X///v7/+Pj7/47G7/80n+f/OqPo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zii
+ 5/9Xquj/wtv1/////v/+/v3//f392/39/U0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39Q/39/dL9/f7//f////7i0///rmz//506//+f
+ P///oD///6A///+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+f
+ Pv//nDr//7h///3r5v/6/v/w+vv7Yf39/X///v3/8/X6/4rE7v80oOf/OqPo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKPo/zeh6P9osur/0uL1////
+ /v/+/f3//f39w/39/TUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA/f39Kv39/bn9/f7//f////7o3v//tHj//5w6//+fPv//oD///6A///+g
+ P///oD///6A///+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+fPv//nDr//7V5//3o
+ 4P/6///5+vv7av39/X///v3/7vP5/4XB7v80oOf/OqPo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/OqPo/zWh6P9xtev/2uf2/////v/+/f3//f39uP39
+ /SkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA/f39IP39/a/9/f7//f////7r5P//uH3//5w6//+fPv//oD///6A///+gP///oD///6A///+g
+ P///oD///6A///+gP///oD///6A///+gP///oD///6A///+fPv//nTr//7Jy//3k2v/6/v/++vv7b/39
+ /X///v3/8fP6/4bC7v80oOf/OqPo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/OqPo/zeh6P9vtOv/2eb2/////v/+/f3//f39vv39/S8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39Jf39
+ /bP9/f7//f////7q4v//t3v//5w6//+fPv//oD///6A///+gP///oD///6A///+gP///oD///6A///+g
+ P///oD///6A///+gP///oD///6A///+fPv//nTr//7N0//3l2//6/v/9+vv7bv39/X///v3/9fX6/4vE
+ 7/80oOf/OqPo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKPo/zeh6P9nser/0eL1/////v/+/f3//f390f39/UIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/v7OP39/cb9/f7//f////7o
+ 3f//tXX//506//+fPv//oD///6A///+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+g
+ P///oD///6A///+fPv//nDr//7Z6//3p4f/6/v/4+vv7af39/X///v7/+fn7/4/G7/80n+f/OqPo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zii
+ 5/9SqOn/u9n1/////f/+/v3//f398fv7+2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/v7Wv39/en9/f7//f////7ey///q2L//506//+g
+ Pv//oD///6A///+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+f
+ Pv//nDj//7qA//3u6P/6/v/v+vv7YP39/X///v3//fr7/5LJ8f8yn+f/OqPo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zqj6P86oef/msvx//36
+ +//+/v3/+/v7//v7+5r+/v4NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD9/f0H/f39jv39/f/9/v7//f/////Rr///nkj//5w4//+fPv//oD///6A///+g
+ P///oD///6A///+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+fPv//nDf//76H//3x
+ 7//6/v/j+vv7VP39/XX//v3////9/6DP8/86oOj/OqPo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zei6P8sneb/gL/u/+/z+v///vv//fv9//v7
+ +937+/tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD9/f1G/f391P39/f/7/f3//f////7m1P//wpD//6la//+cOv//njz//58+//+gP///oD///6A///+g
+ P///oD///6A///+gP///oD///6A///+gP///oD///6A///+fPv//nDf//8OO//329v/7/f/T+vv7Rf39
+ /WH+/v3x///+/7nY9f9Qp+j/OKLn/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P86o+j/NKHn/0Wl6P9zuOz/u9r1//j5+/////3//v39//39/f/9/f2x/f39JQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/R/9/f2o/f39//39
+ /f/++/3///b1///5+v/++Pb//9zC//+8hf//o07//5w3//+ePP//oD///6A///+gP///oD///6A///+g
+ P///oD///6A///+gP///oD///6A///+fPv//nD7//syg//v9///7+/6++vr6MP39/Uj+/f3X///+/9Lj
+ 9v9psur/N6Hn/zyj6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/OqPo/zeh
+ 6P88oef/ZbLq/6fQ8f/l7Pn///39//P2/f/x+P3////9//39/f/9/f35/f39nv39/SMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39HP39/ZT9/f31/f39///////s9e7/zeDD/+Pc
+ wf//7ub///7////z7v//07L//7V0//+gSP//nDj//54+//+gP///oD///6A///+gP///oD///6A///+g
+ P///oD///6A///+ePP//pFX//te9//r////6+/uk+vn6Fv39/Sv9/f26///9/+Xs+f98vO3/NKDn/zqj
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zqj6P83ouj/N6Do/1et6v+Vx+7/1OT1///9
+ +//7+v7/q+f+/1zW//+Y3///9vj9/////f/9/f3//f399/39/av9/f1E/f39BQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAP39/QL9/f0+/f39pP39/fT9/f3///7///37+/+v4r3/YMl9/3TEef+4z5//89/K///x
+ 6////v///uvi///MpP//rWX//50///+dOv//nz7//6A///+gP///oD///6A///+gP///oD///58///+d
+ Ov//sG3//uLU//r////6+/uHAAAAAP39/Qr9/f2Y//79//j4+v+Mxe//MZ/n/zqj6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P88o+j/OKLn/zGf5/9Rqen/icLu/8Xe9f/9+fv///7+/83u//982f//IMn//wDC
+ //8dyf//pOP////7/f////3//f39//39/f/9/f3S/f39iv39/Vf9/f01/f39Iv39/SL9/f0z/f39U/39
+ /Yb9/f3O/f39//39/v////////3+/8Tozf9dy3//L8Fh/y/DY/9NxW//jcWC/8vRqP/65dX///X1//76
+ /f/+4dD//8SW//+pXP//nDr//548//+fPv//oD///6A///+gP///oD///58+//+cN///u4L//u/q//v+
+ //X6+/tmAAAAAAAAAAD9/f1y/v79/f///f+w1fP/SaXo/zii6P88pOj/PKTo/zyk6P88pOj/PKTo/zqi
+ 6P80oOf/Sabo/3i67P+42PP/9vX5/////f/g8f7/j9///zzN//8Dw///AMT//wDF//8AxP//J83//6Lj
+ ///2+P3////7///9/f/9/f3//f39//39/eX9/f3D/f39sf39/bH9/f3C/f394/39/f/9/f3//v3+////
+ ///6+vn/vObH/1/Mgv81wWT/N8Nm/zjEZ/80xGb/N8Ro/17FdP+fyY3/3NW0///n2///+fr//vn6///d
+ xv//vof//6RQ//+bN///njz//6A///+gP///oD///58+//+eP///y6D//fv///v9/tD6+vtAAAAAAAAA
+ AAD9/f1I/v392P///v/c6Pb/crbr/zWh5/88o+j/PKTo/zyk6P86o+j/NaHn/z6i5/9qtOv/q9Lz/+nu
+ +P////3/7vX//5/j//9L0f//DMX//wDE//8Axf//AMb//wDG//8Axv//AMT//x3J//+P3f//5/P+///9
+ /f////3///79//79/f/+/f3//f39//39/f/9/f3//v3+///+//////////7//+jz6f+m3rb/VMl6/zDB
+ Yf84w2b/OsRn/zrEZ/86xGf/N8Rn/zTDZf8/xWz/bcR3/63Klf/p2sD//+zk///+///+8/H//9S1//+2
+ d///oUr//5w4//+fPv//oD///548//+qX//+3sj/+/////r7+6b6+foWAAAAAAAAAAD9/f0a/f39qf/+
+ /f/49vr/i8Xv/zCf5/86o+j/OqPo/zeh6P86oef/Xq/q/5rJ7//Z5vb///37//r6/v+s5///WdT//xfH
+ //8AxP//AMX//wDG//8Axv//AMb//wDG//8Axv//AMb//wDE//8Xx///VtP//6Xk///p8/7//vv9////
+ +/////3///79//39/f////////////77/f/p8+n/t+XE/3jSlP9IxXD/MsJj/zjEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/82xGb/McNk/0jGb/96w3r/us2e//PeyP//7uj///7///7u5f//zqn//69o//+d
+ P///nTr//5s0//+7gP/+7+r/+////fr7+3gAAAAAAAAAAAAAAAAAAAAA/f39df7+/fv///3/tNbz/0un
+ 6f80oOf/MJ/n/1Gq6f+Ow+7/yuD2//75+v///f3/y+z+/3vY//8gyf//AMP//wDF//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axf//AMP//x/I//9c0///f9z//7Hm/v/H6f//4vP+////
+ ///l8+j/tuTC/5Xcq/9905f/Tsh1/y/BYf83w2X/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OMRn/zbEZv8vw2T/T8Vw/5HEgv/Qz6b/++HQ///18////v///uXU///Fl///qV7//55J///N
+ p//9/f//+/7/0/r6+kQAAAAAAAAAAAAAAAAAAAAA/f39PP39/c3///7/6O75/3i77v9Bo+f/ebvs/7rZ
+ 8//49fn////9/9vx/v+J3f//Os3//wPD//8AxP//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDF//8AxP//AMP//ybH//81yf//neT///////+x47//RcNs/zLB
+ Yv8xwmL/NcNl/zjEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/84xGf/NMRm/zrEav9ixHT/osaK/+DUsv//5tj///r7///5+v/+3Mb//82r//7o2//9/////f3+mvn4
+ 9g4AAAAAAAAAAAAAAAAAAAAA/f39CP39/Y7//f3///v9/8De9v+o0fH/6u/5/////f/s9f//neP//0jQ
+ //8JxP//AMT//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMX//wDE//8Awv//e+D///////+b4LH/LMBe/zfDZf84xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zjE
+ Z/8yw2X/QcVu/3HEdv+wypP/7Ni9///q4P//+v3//fr7//36+v/9/f7p/f39XAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAP39/Un9/f3a//79//v6+///+/3/8/n+/6jm//9X1P//F8f//wDE//8Axf//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDF//8Aw///fuH///////+d4LL/L8Fg/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/N8Nm/zDD
+ ZP9JxnD/gcJ7/77KmP/v5tf//vr6//3+///9/f2p/f39GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv7
+ +wz9/v6S/f39///++//s9f3/jNz//xfI//8Aw///AMX//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDF
+ //8Aw///fuH///////+d4LL/L8Fg/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zjEZ/81w2b/McNk/2bH
+ ev/Q4MP///r7//7+/ur9/f1fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f1B+/v70v/9
+ +//u9f3/etj//wbE//8Axf//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDF//8Aw///fuH/////
+ //+d4LL/L8Fg/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/84w2b/NMFi/3jTlP/i8+b///////39
+ /qL9/f0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4F+/v7fP79/fj///3/2O/+/0nQ
+ //8Aw///AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDF//8Aw///fuH///////+d4LL/L8Fg/zjD
+ Zv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zjEZ/8ywmL/W8p9/8Xoz////v////3+2fv9/UoAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39Jv39/bP//v3///39/6jl/v8fyf//AMT//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDF//8Aw///fuH///////+d4LL/L8Fg/zjDZv86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zTCZP9HxG7/qN+3//v6+v///v/4/f39gPv9+wcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/U79/f3a///9//X5/f+U3v//Gcf//wDE//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDF//8Aw///fuH///////+d4LL/L8Fg/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/N8Nl/0HD
+ a/+Q1qP/6vPr///////+/f6v+/37JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAP39/Qf9/f10/f397////f/v9f3/h9r//xXG//8AxP//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDF
+ //8Aw///fuH///////+d4LL/L8Fg/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/83w2b/PsNo/4PUmv/i8eX///7///79
+ /tD7/ftDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD9/f0W/f39kv79/fv///3/6fP9/33X//8Pxf//AMT//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDF//8Aw///fuH/////
+ //+d4LL/L8Fg/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zfDZv83wmT/ddCQ/9rv3/////////7/4v39+1/4/f4BAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39JP39
+ /aj+/f3///79/+Pz/f991///E8b//wDE//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDF//8Aw///fuH///////+d4LL/L8Fg/zjD
+ Zv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/NcNl/z7CaP920JD/0e7Z///+/////v/s/f39dfv9+wsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/S39/f2w/v39///+
+ /f/o8/3/i9v//xzI//8AxP//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDF//8Aw///fuH///////+d4LL/L8Fg/zjDZv86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zjEZ/80wmT/RMRt/4fV
+ nP/b8d////7////9//D9/f2C+/37EwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0w/f39sP79/f////3/8/b9/5vg
+ //8hyv//AMP//wDF//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDF//8Aw///fuH///////+d4LL/L8Fg/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OMNm/zHBYf9KxnP/mdmr/+bz6P////////7/7f39
+ /YL7/fsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39Lf39/aX+/f35///9//n5/v+r5v//TND//w/F
+ //8AxP//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDF
+ //8Aw///fuH///////+d4LL/L8Fg/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zjEZ/80wmX/PMJm/2bNhf+x4r//8fbx///+///+/f7k/f39d/v9+xIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/SH9/f2M/f397P/+/f///f3/3u/+/4nb//8hyv//AMP//wDF
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDF//8Aw///fuH/////
+ //+d4LL/L8Fg/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/84xGf/NcNl/y/C
+ Yf9LxnP/jtei/9Tu2f///f3///////79/dL7/f1i+/37CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD9/f0S/f39a/39/dP//v3////9//j4/f+t5///Ydb//x3J//8Aw///AMX//wDF
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDF//8Aw///fuH///////+d4LL/L8Fg/zjD
+ Zv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OMNm/zXDZf8wwWH/SsVx/3vTlf+05ML/7/Xx////
+ /////v/6/f39tPv9/Ub+/f0CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA/f39A/39/UT9/f2o/f398//+/f///v3/8fX+/6jm/v9g1v//LMn//wDD//8AxP//AMX//wDF
+ //8Axv//AMb//wDG//8Axv//AMb//wDF//8Aw///fuH///////+d4LL/L8Fg/zjDZv86xGf/OsRn/zrE
+ Z/84xGf/OMNn/zfDZv80wmP/L8Ff/0rFcf970pX/seK//+jz6f///v////7///79/t79/f2G+/39KAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD9/f0d/f39cP39/cX+/f39//79///+/f/v9f7/uOf+/33c//9W0v//Gsj//wDD//8AxP//AMT//wDF
+ //8Axf//AMX//wDF//8Aw///fuH///////+d4LL/L8Bf/zfDZf83w2b/N8Nl/zTCY/8ywmL/L8Fg/0PD
+ a/9szYn/itmk/7Pjwv/o8+n///3//////////v7w/f39qf39/VD7/fsLAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39
+ /TP9/f2D/f39y/79/f3//v3////7//v6/f/j8f7/pOX//2zb//9f1P//S87//yvI//8DxP//AMP//wDD
+ //8Awf//eeD///////+Z36//J79a/y/AX/80wWH/S8Vx/2rNhv980pX/itij/6rhuv/X7tz/+Pn4///+
+ //////////7+8P39/bL9/f1o/f39HgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0F/f39Ov39
+ /Xz9/f25/v397//+/f///v3///79//v5/f/q8/7/1u7+/7fm/v+Q4v//dN7//2za//9m2f//tuv+////
+ ///F69D/htef/5Lcq/+f4LT/t+XD/9Xs2P/m8ef/9vn2///+//////////7////+/t/9/f2l/f39Zf39
+ /SIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0p/f39Yf39
+ /ZP9/f3B//396//9/f///v3////9/////f////3///39//n5/f/4+f3/+vv9///+/v/5+vn/9fj1///9
+ /v/////////////+/////v////7//v/+/t3+/f2z/f39hP39/U/9/f0XAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/Qj9/f0x/f39W/39
+ /X/9/f2g/v39vf79/dX//f3p//79+P/+/f///v3//v39//39/f/+/f7///7////+//T//f7j/v3+zv79
+ /rT+/f6V/f39cv39/U79/f0jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0S/f39Lv39
+ /Ub9/f1Z/f39aP39/XP9/f17/f39f/39/X79/f15/f39cP39/WT9/f1T/f39Pv39/SX7/fsIAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+AAD////wAAAP//
+ /wAAAP///wAAAP//+AAAAD///wAAAP//4AAAAA///wAAAP//gAAAAAP//wAAAP//AAAAAAD//wAAAP/8
+ AAAAAAB//wAAAP/4AAAAAAAf/wAAAP/wAAAAAAAP/wAAAP/gAAAAAAAH/wAAAP/AAAAAAAAD/wAAAP+A
+ AAAAAAAB/wAAAP8AAAAAAAAA/wAAAP4AAAAAAAAAfwAAAPwAAAAAAAAAfwAAAPwAAAAAAAAAPwAAAPgA
+ AAAAAAAAHwAAAPAAAAAAAAAAHwAAAPAAAAAAAAAADwAAAOAAAAAAAAAADwAAAOAAAAAAAAAABwAAAMAA
+ AAAAAAAABwAAAMAAAAAAAAAAAwAAAMAAAAAAAAAAAwAAAIAAAAAAAAAAAwAAAIAAAAAAAAAAAQAAAIAA
+ AAAAAAAAAQAAAAAAAAA+AAAAAQAAAAAAAAD/gAAAAQAAAAAAAAP/wAAAAAAAAAAAAAf/4AAAAAAAAAAA
+ AAf/4AAAAAAAAAAAAA//8AAAAAAAAAAAAA//8AAAAAAAAAAAAA//8AAAAAAAAAAAAA//8AAAAAAAAAAA
+ AA//8AAAAAAAAAAAAA//8AAAAAAAAAAAAA//8AAAAAAAAAAAAAf/4AAAAAAAAAAAAAf/4AAAAAAAAAAA
+ AAP/wAAAAAAAAAAAAAH/gAAAAAAAAAAAAAB+AAAAAQAAAAAAAAAAAAAAAQAAAIAAAAAAAAAAAQAAAIAA
+ AAAAAAAAAQAAAIAAAAAAAAAAAwAAAMAAAAAAAAAAAwAAAMAAAAAAAAAAAwAAAMAAAAAAAAAABwAAAOAA
+ AAAAAAAABwAAAOAAAAAAAAAADwAAAPAAAAAAAAAADwAAAPAAAAAAAAAAHwAAAPgAAAAAAAAAHwAAAPwA
+ AAAAAAAAPwAAAPwAAAAAAAAAfwAAAP4AAAAAAAAAfwAAAP8AAAAAAAAA/wAAAP+AAAAAAAAB/wAAAP/A
+ AAAAAAAD/wAAAP/gAAAAAAAH/wAAAP/wAAAAAAAP/wAAAP/4AAAAAAAf/wAAAP/8AAAAAAB//wAAAP//
+ AAAAAAD//wAAAP//wAAAAAP//wAAAP//4AAAAA///wAAAP///AAAAD///wAAAP///wAAAf///wAAAP//
+ //AAD////wAAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx9T7C8PR
+ +x7T3fs7/f39ZP39/Yv+/f2h/v39qf39/ar9/f2q/f39qf39/Z39/f2E/Pz8Wejn5jTd29oa3dzbBwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALzM
+ +g/h5/w+/f39gv7+/bv+/v3d/v796/39/Pj19vv+6+z7//Hy/P/8+/v/8/Hx//f39v38/Pz1/v7+5/7+
+ /tn9/f2u/f39c+3s6zHX1dQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK7B
+ +gHY4fsh/Pz9Y/39/b/9/fzv8fP8/93j+/+7x/r/mK74/3GU+P9rjvj/XoT4/5Os+f/w7+//tbCu/6+r
+ p/+0sK3/wsC+/9PR0P/p6Oj/9fT0//38/eX+/v6w8fDwTd3a2hYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAvcz6COHn/EL9/f21/v796vDy+//G0fr/j6b5/1+E9/9Kdvj/QW/3/zdp+P84avj/NWf3/3eZ
+ +P/u7Ov/pqGd/5iSj/+Yko//mpWS/5+Zl/+no6D/vbq4/9vZ2P/z8vL9/v7+4P39/Z/s7Osv2NbUBAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAALfI+gPr7/wi/f39m/7+/ezq7fv/ucb5/2yN+P9DcPj/Nmn4/zpr+P87bPj/PGz4/zxs
+ +P88bPj/N2n4/3ia+f/u7ez/qKKf/5qUkf+blZL/mpSR/5qUkf+ak5D/mJKP/5uVkv+sqKX/0tDO//Du
+ 7v/9/v7d/f39f9vZ2RMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOvv/Dn9/f2t/Pz8993j+v+Cnfn/THf4/zpr+P86a/j/O2z4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/N2n4/3ia+f/u7ez/qKKf/5qUkf+blZL/m5WS/5uVkv+blZL/mpWS/5qU
+ kf+Zk5D/n5qW/7axr//n5uX//Pv78f39/Y/x8PAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2x/oG6u/8SP7+/dz3+Pz+rLz5/1qB+P82aff/O2v4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/N2n4/3ia+f/u7ez/qKKf/5qUkf+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/mpSR/5iSj/+knpz/ycbE//j39/r+/v3D8fDvLtHPzgMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr7/xJ/f39y/X2/P+xwPr/TXf4/zpr
+ +P87bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/N2n4/3ia+f/u7ez/qKKf/5qU
+ kf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5qUkf+Zk5D/nZeV/8vIxv/09PP8/f39sPDw
+ 7y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyNX6A+7x/Dr+/f3d9vf8/5Wr
+ +f9Fcfj/Omv4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/N2n4/3ia
+ +f/u7ez/qKKf/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/mpSR/5qV
+ kv+7t7b/9fT1/P7+/sDs6+sfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8PP8JP39
+ /bD3+Pz/t8T6/0h0+P86a/j/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/N2n4/3ia+f/u7ez/qKKf/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5qUkP+alZL/zMnI//f4+Pr4+PeJ3trYEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADS4fkK/f39n/z8/PixwPr/UHj4/zlr+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/N2n4/3ia+f/u7ez/qKKf/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+alJH/nZeV/8nHxv/7+/zv/f39d+ff2AIAAAAAAAAAAAAA
+ AAAAAAAAAAAAANHl+AL2+fxH/f397vT0+/91k/j/N2n4/ztr+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/N2n4/3ia+f/u7ez/qKKf/5qUkf+blZL/m5WS/5uV
+ kv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/mZOQ/6SenP/m5uX+/f391/Xv
+ 6ScAAAAAAAAAAAAAAAAAAAAAAAAAAOHt+SX9/f26+Pr8/+7y+//U2vr/lav5/055+P85a/j/O2v4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/N2n4/3ia+f/u7ez/qKKf/5qU
+ kf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5qUkf+Zk5D/nZeU/62o
+ pv/l5eX//P38//v7+5Lz4dASAAAAAAAAAAAAAAAAAAAAAP39/Wr+/v3sy+D0/5DD7//S4vf/7fD7/7/M
+ +/9zlPj/P274/zlq+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/N2n3/3ia
+ +P/u7ez/p6Ke/5qUkf+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/mpSR/5mT
+ kP+jnZv/ycfG/+rq6//76t7//ujY//z9/tn68+xCAAAAAAAAAAAAAAAA5vL6FP39/cX29/v/drrs/zah
+ 5/9Pqen/hr/v/9jl+P/u7/z/tsX6/3GR+P9Abvj/Omv4/zts+P88bPj/PGz4/zxs+P88bPj/O2v4/zlq
+ 9/88bPf/RnL3/4Sh+f/v7u3/rKek/5mTkP+Zko//mpSR/5qVkv+blZL/m5WS/5uVkv+blZL/mpSR/5qU
+ kf+ak5D/op2a/8XCwf/o5+f//u3g///Mo///p1f//7Jw//318fv8/f2h99m+BAAAAAAAAAAA5PH6Rf7+
+ /fTR5ff/Safo/zmi5/85o+f/PqPo/2Sw6/+mzPP/6e37/+Xn+/+WrPr/WYD4/zhp+P86a/j/PGz4/zxs
+ +P86a/j/Omr4/16E+P+DoPj/uMT6/9Tb+//4+Pf/2djW/7y5tv+qpaP/mZOQ/5mTkP+blZL/m5WS/5uV
+ kv+blJH/mJKP/5uUkv+2s7H/2tra//fw7f/+3MP//7Nu//+iR///nTv//6BG//3exv/7/f3Y+eveJAAA
+ AADM5fcP/f39jfb5/P+fzfD/NqDn/zuj6P88pOj/PKTo/zmj5/89o+f/aLHs/63P8//r8Pv/4OT7/5Kq
+ +f9Tffj/Omv4/zlr+P9Ufvj/orX6/+ns+//9/f3//v79/v79/fj9/f34/v7+/v39/f/y8fH/zsvJ/6ij
+ oP+Zk5D/mpSR/5mTkP+clZP/tLCu/9bV1f/48e7//+HJ//+2dP//oEf//548//+fPv//nz///507//7A
+ jP/89fD/+vDmYPvSqwPH4/Yi/v39xObx+v9vt+v/OqLn/zyk6P88pOj/PKTo/zyk6P87o+f/OaLn/0im
+ 6f+Hvu//ydz2/+zu+//K0/z/cpH4/1qA+P/AzPr/9vf8//7+/f39/f3g/f39qf39/Y39/f2M/f39p/39
+ /d79/f38+fn5/93c2/+loJ7/l5GN/6ain//GxML/7+7u//zp3P//w5L//6lX//+ePv//nz7//6A///+g
+ P///oD///589//+sYf/96tz/+vz9lvvauhL8/f1I/v794cfg9v9Mqun/OqPo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zuj6P86ouf/Sqbo/4/B8P/P4Pj/6+37/+Dl+v/+/vz//f398vT2/Izk6vowAAAAAAAA
+ AAAAAAAAAAAAAO3t8Sz3+PiG/f398f7+/v/h4N7/zMrJ/+zr6f/97uT//8aY//+pWf//nTr//58+//+g
+ P///oD///6A///+gP///oD///58+//+kTP/+1bj/+v39zfzXsyb9/f1x/v7977DT8v9Hpuj/O6Po/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P87o+j/OqPn/z+k5/9drOv/0+L3//38/P/9/f31/f39mMPT
+ +REAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADf3eAP/f39kf39/fP7+/v/+vXy///XuP//tHP//6BE//+e
+ Pv//nz7//6A///+gP///oD///6A///+gP///oD///58///+gRP/+xpn/+v3+3vrt4j/9/f2Z/v79/IPC
+ 7v87o+f/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zii5/9Xren/4e35//79
+ /f/8/PyvzNz5HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6+XhGf39/af9/f3//fPv//+u
+ ZP//nTn//58///+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+dPP/+uHb/+/r87Pr7
+ /Gf9/f2n/fv8/3K77f83oef/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zqi
+ 5/96ve3/+/v8//39/f3t8/tfxNv3AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7uPaAvn1
+ 8lj9/f37/f39//++hf//nkD//6A///+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+e
+ O///smz//PTz9Pr8/ID9/f2p+fn7/2+47P84oef/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKPo/0Sl5/+jzfD//v79//39/eHm8fouAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAPrz7if9/f3b/f7+//7StP//o0z//58+//+gP///oD///6A///+gP///oD///6A///+g
+ P///oD///6A///+ePP//rmb//PDt+/r8/JP9/f2p9Pf6/2u26/84ouf/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/O6Po/0in6P+01PL//v79//39/dLm8foeAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz17hf9/f3L/f7+//7Yv///pE///58+//+gP///oD///6A///+g
+ P///oD///6A///+gP///oD///6A///+ePP//q2D//O3n/vr8/J39/f2p9vf7/2u36/84ouf/PKTo/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/O6Po/0in6P+z1PL//v79//39/dfm8vojAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr07Rz9/f3Q/f7+//7Yvf//pU///58+//+g
+ P///oD///6A///+gP///oD///6A///+gP///oD///6A///+ePP//rGL//O7o/fr8/Jz9/f2p+vn7/2+4
+ 7P84oef/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKPo/0Kk6P+fy/H//v79//39
+ /e7l8vo7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbz6zT9/f3o/f7+//7Q
+ rv//okn//58+//+gP///oD///6A///+gP///oD///6A///+gP///oD///6A///+ePP//r2b//PLu+vr8
+ /JL9/f2n/vz8/3a87v84oef/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zeh
+ 5/9yuez/+vn7//z8+//7+/uB0O36CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4uzYCfb3
+ 8Xf8/f3//P7+//7InP//o0z//549//+fPv//oD///6A///+gP///oD///6A///+gP///oD///6A///+e
+ O///s23//Pb18/r7/H79/f2X/v79+47E8P8+o+f/PKTo/zyk6P88pOj/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P87o+j/OKLn/0mn6P+Oxe//+Pn7//79/P/8/PzS7Pf8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA9fnzOv39/c39/P3//fn5//7u5P/+1LD//6xg//+ePv//nz3//6A///+gP///oD///6A///+g
+ P///oD///6A///+ePf/+unr/+/v86/r6+2b9/f1u/v797rXV8/9Jp+j/O6Po/zyk6P88pOj/PKTo/zyk
+ 6P88pOj/O6Po/zmi6P9Jp+j/ebvs/9Hk9v/m9Pz/xuz9/+74/f/9/f39/f390Oz4/D277PkIAAAAAAAA
+ AAAAAAAAAAAAAMnt3Qfw+fQ3/f39yv39/fzx+PP/uN+8/8vZtf/07uP//+zh//7Pqf//qlz//59B//+f
+ Pf//nz7//6A///+gP///oD///58///+hRv/+yaL/+v393frt4j39/f1E/v394M7j9f9Oqun/OqPo/zyk
+ 6P88pOj/PKTo/zyj6P86ouf/OqLn/2Gx6v+z1vP/6fH5/8vu/v9r2P7/K8v//5bh/v/+/f3//f39/f39
+ /c3q+Pt04/b5MuT29xrl9vQa5vbyMO349HD9/f3K/f39/P79/v+35cT/Ush4/1TFcf+ay5H/5uHK//3w
+ 6v/+4c7//r+K//+iSf//njz//58+//+gP///oD///58+//+lTv/+2cD/+v39y/zXtSXH4/Yh/f39wenz
+ +v95uuz/OKLn/zyj6P87o+j/OqPn/z6j5/9dsOr/rtPy/+fv+f/O8P3/fNv+/xvH//8AxP//AMX//xHI
+ //+V4f7/6/f8//79/f/9/f3//f395v39/c/9/f3O/f395f39/f/+/f7/7vfw/7Djv/9GxnD/N8Jl/zfE
+ Zv82xGf/X8V1/6TMlf/q48///PLu//7fyf/+vYT//6JI//+ePv//nz7//589//6xav/97uP/+vv8kvra
+ uhDL5fcN/f39iPn6+/+m0PH/NKDn/zqj6P85oef/SKfo/47E7v/T5vb/5fP8/5/k/v81zf//C8b//wDF
+ //8Axf//AMb//wDF//8byP//btj+/9Lv/v/5+v3//v78//79/f/9/f3//v7+//n6+f/a8N//i9ei/0vH
+ dP82w2X/OcNm/zrEZ/85xGf/OMNm/0HDaf97yIL/wNOp//nr3//+7+f//tGu//+waP//nT3//5w4//7G
+ mP/89/T++PDmXPjTqwIAAAAA5PH6Qf7+/fLY6ff/Tqnp/0Ol6P+Iwu7/zeL2/+n1/P+v5/7/Ps3//wfF
+ //8Axf//AMb//wDG//8Axv//AMb//wDG//8Axf//AMT//yLJ//9M0f//idz+/7no/v/w+fL/pt+3/27R
+ jv9PyHb/NMJj/znDZv86xGf/OsRn/zrEZ/86xGf/OsRn/znEZ/81w2X/P8Rq/4bGg//M06z/+O7k//7v
+ 5v/+zKX//rFx//7jz//8/f7V9+zdIQAAAAAAAAAA5vL6EP39/cH5+fz/nMzx/6/U8v/q8/r/zu/9/2HW
+ /v8eyP//AMX//wDF//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDF//8AxP//DsT//1/X
+ ///g9eb/Wct+/zXCZP83w2b/OcRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/85xGf/OMRm/zvD
+ aP9WxHL/p8yU/+XexP/+7+n//uzj//339Pr9/f2b79y9AwAAAAAAAAAAAAAAAPz8/GP9/f3q+/r7/97y
+ /f9j1///Hcn//wDE//8Axf//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMT//1TX///e9OX/U8t7/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/84w2b/N8Nn/1rDcf+30qT/9fLs//39/tX29ew8AAAAAAAAAAAAAAAAAAAAAN3w
+ +iH8/Py0+fr7/6Ti/v8Hxf//AMX//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMT//1TX///e9OX/U8t7/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OMNm/zTCY/+V2KX/8/fx//39/Yvn5s8PAAAAAAAA
+ AAAAAAAAAAAAALzk+AHk8/pA/v396+33/f9J0f7/A8X//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMT//1TX///e9OX/U8t7/zjDZv86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/N8Nm/2DMgv/k8+j+/v3+0d/t
+ 2iIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADI7PsI/f39l/7+/fa26f3/L8v//wDF//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMT//1TX///e9OX/U8t7/zjD
+ Zv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/84w2b/UMd2/7Xi
+ wf/9/f3s/P38bsLjwQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxu78H/39/ab7/P3+wen9/ybJ
+ //8Bxf//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMT//1TX
+ ///e9OX/U8t7/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zjD
+ Zv9HxXD/ueXF//j7+fjy+fSAu+fHDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAren9Auf3
+ /TL9/f3X+fv9/57h/v8lyf//AMX//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMT//1TX///e9OX/U8t7/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/N8Nm/0jFcP+X26v/9vr3+v79/rfd8+MaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADk9/1A/f39xPn7/f/D6v3/Msz//wPF//8Axf//AMb//wDG//8Axv//AMb//wDG
+ //8Axv//AMb//wDG//8Axv//AMT//1TX///e9OX/U8t7/zjDZv86xGf/OsRn/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/znDZv83w2b/VMh5/7zmxv/3+/f7/f39pub26ycAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACe5v0F5Pf9QP39/dX8/P39uur+/0vR//8GxP//AMX//wDG
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMT//1TX///e9OX/U8t7/zjDZv86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/N8Nm/znCZf9nzof/vOXI//n7+fn9/f245vbrJ6jjuwIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOT3/S/9/f2h/v399fD3
+ /f+O3/7/MMz//wbF//8Axf//AMX//wDG//8Axv//AMb//wDG//8Axv//AMT//1TX///e9OX/U8t7/zjD
+ Zv86xGf/OsRn/zrEZ/86xGf/OcNm/zfDZf85w2f/VMp7/5jbrP/r9u3+/v7+7fH59ILb8+MaAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDn
+ /QKy6/0b/f39jv39/eb0+v3/zO7+/2bY/v8oyv//AMT//wDF//8Axf//AMb//wDG//8Axv//AMT//1TX
+ ///e9OX/U8t7/zjDZv86xGf/OcRn/zjDZ/83w2X/M8Ji/03HdP9/1Jn/z+zW//P59f/+/f7U/P39c7Hm
+ wg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAqen9Btf0/Tj9/f2p/v395fv7/f7b8v3/m+L+/1zV/v8iyv//G8j//wnF
+ //8AxP//AMP//1LW///d9OX/Ucp5/zTCY/87w2f/R8Zw/0zIdf9z0I//pN+2/9jv3//5+/n7/v7+2f39
+ /ZLc8+MmtOfEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 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
+ +P88bPj/PGz4/zxs+P86a/j/Yon4/9bU0v+emJX/m5WS/5uVkv+blZL/m5WS/5uVkv+blZL/m5WS/5qU
+ kf+loJ7/2dfX/PPy8YPd0MURAAAAAAAAAAAAAAAAAAAAAPD1+2j4+PvvcJD4/zxs+P88bPj/PGz4/zxs
+ +P88bPj/PGz4/zxs+P88bPj/PGz4/zpr+P9iifj/1tTS/56Ylf+blZL/m5WS/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5qUkf+po6H/8vLy4/Hq404AAAAAAAAAAAAAAADR5fgo9vn73Nfn9//I0/n/iKP5/0d0
+ +P87a/j/PGz4/zxs+P88bPj/PGz4/zxs+P88bPj/Omv3/2KJ+P/W1NL/npiV/5uVkv+blZL/m5WS/5uV
+ kv+blZL/m5WS/5qUkf+alJH/oZuZ/7q2tP/x6+f/+/n4xvHbxhYAAAAArtX0BO30+3PW6Pf6aLXr/4nC
+ 7//C2Pf/ssP6/26Q+P89bPj/O2v4/zxs+P88bPj/O2v4/zpq9/89bff/a474/9fV0/+fmZb/mZOQ/5qU
+ kf+blZL/m5WS/5qUkf+alJH/nJWS/66qqP/a1ND/9NnE//6/iP/95tT09ebXVwAAAADA3vYi9vn8xJbK
+ 8P88o+f/O6Pn/02o6f+Wx/H/y933/6O3+f9mivj/QG/4/ztr+P9Ld/j/fJr4/7fH+v7b4fv98vLx/djW
+ 1P66trT/opyZ/5qUkf+alJH/nZaU/6qlo//Uzsr/89zJ//6+hf//pEz//54+//3Cjf/69fCr886rE9rs
+ +E3x9vvlZ7Tq/zqi5/88pOj/O6Pn/0Ck5/9er+v/tdT0/87Z+f+Mpfn/VHz4/7DB+v/t8Pz+/f393v39
+ /bf9/f22/f393PTz8/3V09L/npiV/56Zlv/DwL//6N/Z//3Kn///rV///59A//+fPv//nz7//qte//vx
+ 6Nb43cM0/P39hdTn9/ZFpuj/O6Po/zyk6P88pOj/PKTo/zuj6P89o+f/ZLHr/7zX9f/n6/r//f387uzw
+ +4i7zPAVAAAAAAAAAADP0uAT8/P0hP39/e3k4+L/6uDY//7PqP//rF7//548//+fPv//oD///6A///+f
+ Pv//oUX//N/I8Pro1mX9/f2vttnz/D2j5/87o+j/PKTo/zyk6P88pOj/PKTo/zuj5/86o+f/hMDu//L2
+ +//x9fubts31GgAAAAAAAAAAAAAAAAAAAADb1tcZ+ff2lfz5+P/+zqX//6JI//+fP///nz7//6A///+g
+ P///oD///58///+ePv/80ar3+vf2iPz8/MSfz/H/OKLn/zyk6P88pOj/PKTo/zyk6P88pOj/PKPo/zyj
+ 5/+u1fL//Pz8987h9zUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADu5d8w/f399f7Xt///n0L//58+//+g
+ P///oD///6A///+gP///oD///548//7Gl/z6+Pir+vv8xZrM8P85ouf/PKTo/zyk6P88pOj/PKTo/zyk
+ 6P87o+j/QqXn/8jg9f/9/f3kz+T3FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPLp3hL9/f3f/ePR//+i
+ SP//nz7//6A///+gP///oD///6A///+gP///nj3//sKP/vr39br7+/zFmszw/zmi5/88pOj/PKTo/zyk
+ 6P88pOj/PKTo/zuj6P9Cpej/x+D1//39/enO6PgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+vdGP39
+ /eX94s///6JI//+fPv//oD///6A///+gP///oD///6A///+ePf/+w5D++vf2ufz8/MSh0PL/OaLn/zyk
+ 6P88pOj/PKTo/zyk6P88pOj/PKPo/zui5/+p0vL//Pv7++Hx+Uik3PQCAAAAAAAAAAAAAAAAAAAAAM/g
+ xwLt8ORC/P39+f3bwP//oUb//58+//+gP///oD///6A///+gP///oD///548//7ImPv6+fiq/f39rbzb
+ 9fw/pOf/O6Po/zyk6P88pOj/O6Po/zuj6P9Epuj/aLXr/7/f9v/y+fz/+Pv8ur/p9zKa3+8BAAAAAAAA
+ AACs4M0B1+zbL/v8+rby9/L/6urZ//zTr//+tG///6FE//+fPv//nz7//6A///+fP///nz///NOu9vr3
+ 9Yf9/f2C2Oj39kan6P87o+j/PKTo/zyj6P86ouf/S6jo/6HO8f/J5vn/gt39/5fi/f/9/f34+fv8uNPx
+ +EDJ7vEWze/rFtLv5T76/Pu0/f39963ivP95zYr/ytu4//jk0//+xZX//qdT//+ePf//nz7//58+//+i
+ R//84c3v+ujXY9ns+Evz9/vkbLbr/zmi5/87o+f/UKro/5jL8P/K5vj/hN79/yjK/v8AxP//B8b//4jf
+ /f/g9P3//Pz8+f39/OT9/f3j/Pz8+eX06f+j37b/PcRq/zfDZv9AxGr/csd+/9DewP/15NL//sSR//6o
+ Vv//njz//q9k//vz7NT03sIyveD2IPf6+8GczfD/QaTo/36+7f+83fX/o+L8/03S/v8Nx///AcX//wDF
+ //8Axf//Esf+/0rS/v+T4f7/xez9/+T06P+p4rv/btGO/0XFb/85w2b/OcNm/znDZv86w2f/VsZ0/5bP
+ lv/m38X//N3D//62dv/+yZ3/+vbxqOjSpxKq2fQD6/X7b+Xw+fq93fX/r+f8/1zW/v8Nxv//AMX//wDG
+ //8Axv//AMb//wDG//8Axv//AMX//wPE//9A0P//sebC/0HFbP84w2b/OcRn/zrEZ/86xGf/OsRn/zrE
+ Z/85xGb/OsNn/13Fdf+l0Zz/7ejY//z18fPu6tVSAAAAAAAAAADM6fgk+/v72c3t/P8cyf//A8X//wDF
+ //8Axv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMX//zjQ//+v5sH/QcVt/zrEZ/86xGf/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OMNm/z3CZ/+84L3/+fr4wuPhxBQAAAAAAAAAAAAAAADm9Ptj9vr97U7T
+ /v8Fxv//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDG//8Axf//OND//6/mwf9BxW3/OsRn/zrE
+ Z/86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/87w2j/aM6I//L48+Df7dlKAAAAAAAAAAAAAAAAAAAAALXm
+ +hnx+fyYyO79/kHP/v8Axf//AMb//wDG//8Axv//AMb//wDG//8Axv//AMb//wDF//840P//r+bB/0HF
+ bf86xGf/OsRn/zrEZ/86xGf/OsRn/zrEZ/86xGf/OcNm/17Lgf/I6tL76fbsfLvetw8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAK/o/Bb2+/280e/9+EHP/v8Gxv//AMX//wDG//8Axv//AMb//wDG//8Axv//AMX//zjQ
+ //+v5sH/QcVt/zrEZ/86xGf/OsRn/zrEZ/86xGf/OcNm/zvEaP9fzIH/zOzV8/b6+KS25MALAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAALTr/TT2+/27yu79/lDT/v8CxP//AMX//wDG//8Axv//AMb//wDG
+ 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
+
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FDialogs.Designer.cs b/SunnyUI.Net5.Demo/Forms/FDialogs.Designer.cs
new file mode 100644
index 00000000..005f5927
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FDialogs.Designer.cs
@@ -0,0 +1,691 @@
+namespace Sunny.UI.Demo
+{
+ partial class FDialogs
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.btnError = new Sunny.UI.UISymbolButton();
+ this.btnWarn = new Sunny.UI.UISymbolButton();
+ this.btnSuccess = new Sunny.UI.UISymbolButton();
+ this.btnAsk = new Sunny.UI.UISymbolButton();
+ this.btnAuto = new Sunny.UI.UISymbolButton();
+ this.btnStatus2 = new Sunny.UI.UISymbolButton();
+ this.btnInfo = new Sunny.UI.UISymbolButton();
+ this.btnPasswordInput = new Sunny.UI.UISymbolButton();
+ this.btnDoubleInput = new Sunny.UI.UISymbolButton();
+ this.btnIntInput = new Sunny.UI.UISymbolButton();
+ this.btnStringInput = new Sunny.UI.UISymbolButton();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.uiLine3 = new Sunny.UI.UILine();
+ this.uiLine4 = new Sunny.UI.UILine();
+ this.uiSymbolButton1 = new Sunny.UI.UISymbolButton();
+ this.uiLine5 = new Sunny.UI.UILine();
+ this.uiSymbolButton2 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton4 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton5 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton6 = new Sunny.UI.UISymbolButton();
+ this.uiLine6 = new Sunny.UI.UILine();
+ this.btnEN = new Sunny.UI.UISymbolButton();
+ this.btnCH = new Sunny.UI.UISymbolButton();
+ this.uiLine7 = new Sunny.UI.UILine();
+ this.uiSymbolButton7 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton8 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton9 = new Sunny.UI.UISymbolButton();
+ this.uiLine8 = new Sunny.UI.UILine();
+ this.uiSymbolButton3 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton10 = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton11 = new Sunny.UI.UISymbolButton();
+ this.uiLine9 = new Sunny.UI.UILine();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiLine9);
+ this.PagePanel.Controls.Add(this.uiSymbolButton11);
+ this.PagePanel.Controls.Add(this.uiLine8);
+ this.PagePanel.Controls.Add(this.uiSymbolButton3);
+ this.PagePanel.Controls.Add(this.uiSymbolButton10);
+ this.PagePanel.Controls.Add(this.uiLine7);
+ this.PagePanel.Controls.Add(this.uiSymbolButton7);
+ this.PagePanel.Controls.Add(this.uiSymbolButton8);
+ this.PagePanel.Controls.Add(this.uiSymbolButton9);
+ this.PagePanel.Controls.Add(this.btnEN);
+ this.PagePanel.Controls.Add(this.btnCH);
+ this.PagePanel.Controls.Add(this.uiLine6);
+ this.PagePanel.Controls.Add(this.uiLine5);
+ this.PagePanel.Controls.Add(this.uiSymbolButton2);
+ this.PagePanel.Controls.Add(this.uiSymbolButton4);
+ this.PagePanel.Controls.Add(this.uiSymbolButton5);
+ this.PagePanel.Controls.Add(this.uiSymbolButton6);
+ this.PagePanel.Controls.Add(this.uiLine4);
+ this.PagePanel.Controls.Add(this.uiSymbolButton1);
+ this.PagePanel.Controls.Add(this.uiLine3);
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.btnPasswordInput);
+ this.PagePanel.Controls.Add(this.btnDoubleInput);
+ this.PagePanel.Controls.Add(this.btnIntInput);
+ this.PagePanel.Controls.Add(this.btnStringInput);
+ this.PagePanel.Controls.Add(this.btnInfo);
+ this.PagePanel.Controls.Add(this.btnStatus2);
+ this.PagePanel.Controls.Add(this.btnAuto);
+ this.PagePanel.Controls.Add(this.btnError);
+ this.PagePanel.Controls.Add(this.btnWarn);
+ this.PagePanel.Controls.Add(this.btnSuccess);
+ this.PagePanel.Controls.Add(this.btnAsk);
+ this.PagePanel.Size = new System.Drawing.Size(800, 514);
+ //
+ // btnError
+ //
+ this.btnError.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnError.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.btnError.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.btnError.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.btnError.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.btnError.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnError.Location = new System.Drawing.Point(600, 53);
+ this.btnError.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnError.Name = "btnError";
+ this.btnError.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnError.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.btnError.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.btnError.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.btnError.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.btnError.Size = new System.Drawing.Size(100, 35);
+ this.btnError.Style = Sunny.UI.UIStyle.Red;
+ this.btnError.StyleCustomMode = true;
+ this.btnError.Symbol = 61532;
+ this.btnError.TabIndex = 29;
+ this.btnError.Text = "Error";
+ this.btnError.Click += new System.EventHandler(this.btnError_Click);
+ //
+ // btnWarn
+ //
+ this.btnWarn.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnWarn.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.btnWarn.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.btnWarn.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.btnWarn.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.btnWarn.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnWarn.Location = new System.Drawing.Point(486, 53);
+ this.btnWarn.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnWarn.Name = "btnWarn";
+ this.btnWarn.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnWarn.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.btnWarn.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.btnWarn.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.btnWarn.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.btnWarn.Size = new System.Drawing.Size(100, 35);
+ this.btnWarn.Style = Sunny.UI.UIStyle.Orange;
+ this.btnWarn.StyleCustomMode = true;
+ this.btnWarn.Symbol = 61553;
+ this.btnWarn.TabIndex = 28;
+ this.btnWarn.Text = "Warn";
+ this.btnWarn.Click += new System.EventHandler(this.btnWarn_Click);
+ //
+ // btnSuccess
+ //
+ this.btnSuccess.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnSuccess.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.btnSuccess.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.btnSuccess.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.btnSuccess.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.btnSuccess.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnSuccess.Location = new System.Drawing.Point(372, 53);
+ this.btnSuccess.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnSuccess.Name = "btnSuccess";
+ this.btnSuccess.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnSuccess.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.btnSuccess.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.btnSuccess.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.btnSuccess.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.btnSuccess.Size = new System.Drawing.Size(100, 35);
+ this.btnSuccess.Style = Sunny.UI.UIStyle.Green;
+ this.btnSuccess.StyleCustomMode = true;
+ this.btnSuccess.Symbol = 61528;
+ this.btnSuccess.TabIndex = 27;
+ this.btnSuccess.Text = "Success";
+ this.btnSuccess.Click += new System.EventHandler(this.btnSuccess_Click);
+ //
+ // btnAsk
+ //
+ this.btnAsk.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnAsk.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnAsk.Location = new System.Drawing.Point(30, 52);
+ this.btnAsk.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnAsk.Name = "btnAsk";
+ this.btnAsk.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnAsk.Size = new System.Drawing.Size(100, 35);
+ this.btnAsk.StyleCustomMode = true;
+ this.btnAsk.Symbol = 61529;
+ this.btnAsk.TabIndex = 26;
+ this.btnAsk.Text = "Query";
+ this.btnAsk.Click += new System.EventHandler(this.btnAsk_Click);
+ //
+ // btnAuto
+ //
+ this.btnAuto.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnAuto.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnAuto.Location = new System.Drawing.Point(144, 53);
+ this.btnAuto.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnAuto.Name = "btnAuto";
+ this.btnAuto.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnAuto.Size = new System.Drawing.Size(100, 35);
+ this.btnAuto.Symbol = 61732;
+ this.btnAuto.TabIndex = 31;
+ this.btnAuto.Text = "Auto";
+ this.btnAuto.Click += new System.EventHandler(this.btnAuto_Click);
+ //
+ // btnStatus2
+ //
+ this.btnStatus2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnStatus2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnStatus2.Location = new System.Drawing.Point(30, 210);
+ this.btnStatus2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnStatus2.Name = "btnStatus2";
+ this.btnStatus2.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnStatus2.Size = new System.Drawing.Size(155, 35);
+ this.btnStatus2.Symbol = 57595;
+ this.btnStatus2.TabIndex = 36;
+ this.btnStatus2.Text = "进度提示框";
+ this.btnStatus2.Click += new System.EventHandler(this.btnStatus2_Click);
+ //
+ // btnInfo
+ //
+ this.btnInfo.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnInfo.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
+ this.btnInfo.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165)))));
+ this.btnInfo.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.btnInfo.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.btnInfo.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnInfo.Location = new System.Drawing.Point(258, 53);
+ this.btnInfo.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnInfo.Name = "btnInfo";
+ this.btnInfo.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnInfo.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
+ this.btnInfo.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165)))));
+ this.btnInfo.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.btnInfo.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129)))));
+ this.btnInfo.Size = new System.Drawing.Size(100, 35);
+ this.btnInfo.Style = Sunny.UI.UIStyle.Gray;
+ this.btnInfo.StyleCustomMode = true;
+ this.btnInfo.Symbol = 61530;
+ this.btnInfo.TabIndex = 37;
+ this.btnInfo.Text = "Info";
+ this.btnInfo.Click += new System.EventHandler(this.btnInfo_Click);
+ //
+ // btnPasswordInput
+ //
+ this.btnPasswordInput.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnPasswordInput.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnPasswordInput.Location = new System.Drawing.Point(543, 131);
+ this.btnPasswordInput.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnPasswordInput.Name = "btnPasswordInput";
+ this.btnPasswordInput.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnPasswordInput.Size = new System.Drawing.Size(155, 35);
+ this.btnPasswordInput.Symbol = 61545;
+ this.btnPasswordInput.TabIndex = 46;
+ this.btnPasswordInput.Text = "密码输入框";
+ this.btnPasswordInput.Click += new System.EventHandler(this.btnPasswordInput_Click);
+ //
+ // btnDoubleInput
+ //
+ this.btnDoubleInput.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnDoubleInput.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnDoubleInput.Location = new System.Drawing.Point(372, 131);
+ this.btnDoubleInput.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnDoubleInput.Name = "btnDoubleInput";
+ this.btnDoubleInput.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnDoubleInput.Size = new System.Drawing.Size(155, 35);
+ this.btnDoubleInput.Symbol = 62022;
+ this.btnDoubleInput.TabIndex = 45;
+ this.btnDoubleInput.Text = "浮点数输入框";
+ this.btnDoubleInput.Click += new System.EventHandler(this.btnDoubleInput_Click);
+ //
+ // btnIntInput
+ //
+ this.btnIntInput.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnIntInput.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnIntInput.Location = new System.Drawing.Point(201, 131);
+ this.btnIntInput.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnIntInput.Name = "btnIntInput";
+ this.btnIntInput.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnIntInput.Size = new System.Drawing.Size(155, 35);
+ this.btnIntInput.Symbol = 62022;
+ this.btnIntInput.TabIndex = 44;
+ this.btnIntInput.Text = "整数输入框";
+ this.btnIntInput.Click += new System.EventHandler(this.btnIntInput_Click);
+ //
+ // btnStringInput
+ //
+ this.btnStringInput.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnStringInput.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnStringInput.Location = new System.Drawing.Point(30, 131);
+ this.btnStringInput.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnStringInput.Name = "btnStringInput";
+ this.btnStringInput.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnStringInput.Size = new System.Drawing.Size(155, 35);
+ this.btnStringInput.Symbol = 62022;
+ this.btnStringInput.TabIndex = 43;
+ this.btnStringInput.Text = "字符串输入框";
+ this.btnStringInput.Click += new System.EventHandler(this.btnStringInput_Click);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 47;
+ this.uiLine1.Text = "UIMessageDialog";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(30, 99);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(670, 20);
+ this.uiLine2.TabIndex = 48;
+ this.uiLine2.Text = "UIInputDialog";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine3
+ //
+ this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine3.Location = new System.Drawing.Point(30, 178);
+ this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine3.Name = "uiLine3";
+ this.uiLine3.Size = new System.Drawing.Size(155, 20);
+ this.uiLine3.TabIndex = 49;
+ this.uiLine3.Text = "UIStatusForm";
+ this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLine4
+ //
+ this.uiLine4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine4.Location = new System.Drawing.Point(372, 178);
+ this.uiLine4.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine4.Name = "uiLine4";
+ this.uiLine4.Size = new System.Drawing.Size(328, 20);
+ this.uiLine4.TabIndex = 51;
+ this.uiLine4.Text = "UISelectDialog";
+ this.uiLine4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiSymbolButton1
+ //
+ this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton1.Location = new System.Drawing.Point(372, 210);
+ this.uiSymbolButton1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton1.Name = "uiSymbolButton1";
+ this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton1.Size = new System.Drawing.Size(155, 35);
+ this.uiSymbolButton1.Symbol = 61655;
+ this.uiSymbolButton1.TabIndex = 50;
+ this.uiSymbolButton1.Text = "下拉选择框";
+ this.uiSymbolButton1.Click += new System.EventHandler(this.uiSymbolButton1_Click);
+ //
+ // uiLine5
+ //
+ this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine5.Location = new System.Drawing.Point(30, 257);
+ this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine5.Name = "uiLine5";
+ this.uiLine5.Size = new System.Drawing.Size(670, 20);
+ this.uiLine5.TabIndex = 58;
+ this.uiLine5.Text = "UINotifier";
+ this.uiLine5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiSymbolButton2
+ //
+ this.uiSymbolButton2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton2.Location = new System.Drawing.Point(30, 289);
+ this.uiSymbolButton2.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton2.Name = "uiSymbolButton2";
+ this.uiSymbolButton2.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton2.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton2.StyleCustomMode = true;
+ this.uiSymbolButton2.Symbol = 61530;
+ this.uiSymbolButton2.TabIndex = 57;
+ this.uiSymbolButton2.Text = "Info";
+ this.uiSymbolButton2.Click += new System.EventHandler(this.uiSymbolButton2_Click);
+ //
+ // uiSymbolButton4
+ //
+ this.uiSymbolButton4.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton4.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton4.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton4.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton4.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton4.Location = new System.Drawing.Point(372, 289);
+ this.uiSymbolButton4.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton4.Name = "uiSymbolButton4";
+ this.uiSymbolButton4.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton4.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton4.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton4.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton4.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton4.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton4.Style = Sunny.UI.UIStyle.Red;
+ this.uiSymbolButton4.StyleCustomMode = true;
+ this.uiSymbolButton4.Symbol = 61532;
+ this.uiSymbolButton4.TabIndex = 55;
+ this.uiSymbolButton4.Text = "Error";
+ this.uiSymbolButton4.Click += new System.EventHandler(this.uiSymbolButton4_Click);
+ //
+ // uiSymbolButton5
+ //
+ this.uiSymbolButton5.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton5.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton5.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiSymbolButton5.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton5.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton5.Location = new System.Drawing.Point(258, 289);
+ this.uiSymbolButton5.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton5.Name = "uiSymbolButton5";
+ this.uiSymbolButton5.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton5.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton5.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiSymbolButton5.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton5.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton5.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton5.Style = Sunny.UI.UIStyle.Orange;
+ this.uiSymbolButton5.StyleCustomMode = true;
+ this.uiSymbolButton5.Symbol = 61553;
+ this.uiSymbolButton5.TabIndex = 54;
+ this.uiSymbolButton5.Text = "Warn";
+ this.uiSymbolButton5.Click += new System.EventHandler(this.uiSymbolButton5_Click);
+ //
+ // uiSymbolButton6
+ //
+ this.uiSymbolButton6.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton6.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton6.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiSymbolButton6.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton6.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton6.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton6.Location = new System.Drawing.Point(144, 289);
+ this.uiSymbolButton6.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton6.Name = "uiSymbolButton6";
+ this.uiSymbolButton6.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton6.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton6.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiSymbolButton6.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton6.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton6.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton6.Style = Sunny.UI.UIStyle.Green;
+ this.uiSymbolButton6.StyleCustomMode = true;
+ this.uiSymbolButton6.Symbol = 61528;
+ this.uiSymbolButton6.TabIndex = 53;
+ this.uiSymbolButton6.Text = "Success";
+ this.uiSymbolButton6.Click += new System.EventHandler(this.uiSymbolButton6_Click);
+ //
+ // uiLine6
+ //
+ this.uiLine6.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine6.Location = new System.Drawing.Point(30, 415);
+ this.uiLine6.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine6.Name = "uiLine6";
+ this.uiLine6.Size = new System.Drawing.Size(328, 20);
+ this.uiLine6.TabIndex = 59;
+ this.uiLine6.Text = "ULocalize";
+ this.uiLine6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // btnEN
+ //
+ this.btnEN.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnEN.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnEN.Location = new System.Drawing.Point(144, 447);
+ this.btnEN.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnEN.Name = "btnEN";
+ this.btnEN.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnEN.Size = new System.Drawing.Size(100, 35);
+ this.btnEN.Symbol = 57571;
+ this.btnEN.TabIndex = 61;
+ this.btnEN.Text = "EN";
+ this.btnEN.Click += new System.EventHandler(this.btnEN_Click);
+ //
+ // btnCH
+ //
+ this.btnCH.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnCH.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnCH.Location = new System.Drawing.Point(30, 447);
+ this.btnCH.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnCH.Name = "btnCH";
+ this.btnCH.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnCH.Size = new System.Drawing.Size(100, 35);
+ this.btnCH.StyleCustomMode = true;
+ this.btnCH.Symbol = 57571;
+ this.btnCH.TabIndex = 60;
+ this.btnCH.Text = "CH";
+ this.btnCH.Click += new System.EventHandler(this.btnCH_Click);
+ //
+ // uiLine7
+ //
+ this.uiLine7.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine7.Location = new System.Drawing.Point(30, 336);
+ this.uiLine7.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine7.Name = "uiLine7";
+ this.uiLine7.Size = new System.Drawing.Size(328, 20);
+ this.uiLine7.TabIndex = 66;
+ this.uiLine7.Text = "UIMessageTip";
+ this.uiLine7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiSymbolButton7
+ //
+ this.uiSymbolButton7.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton7.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton7.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton7.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton7.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton7.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton7.Location = new System.Drawing.Point(258, 368);
+ this.uiSymbolButton7.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton7.Name = "uiSymbolButton7";
+ this.uiSymbolButton7.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton7.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
+ this.uiSymbolButton7.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128)))));
+ this.uiSymbolButton7.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton7.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89)))));
+ this.uiSymbolButton7.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton7.Style = Sunny.UI.UIStyle.Red;
+ this.uiSymbolButton7.StyleCustomMode = true;
+ this.uiSymbolButton7.Symbol = 61532;
+ this.uiSymbolButton7.TabIndex = 64;
+ this.uiSymbolButton7.Text = "Error";
+ this.uiSymbolButton7.Click += new System.EventHandler(this.uiSymbolButton7_Click);
+ //
+ // uiSymbolButton8
+ //
+ this.uiSymbolButton8.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton8.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton8.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiSymbolButton8.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton8.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton8.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton8.Location = new System.Drawing.Point(144, 368);
+ this.uiSymbolButton8.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton8.Name = "uiSymbolButton8";
+ this.uiSymbolButton8.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton8.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton8.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86)))));
+ this.uiSymbolButton8.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton8.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43)))));
+ this.uiSymbolButton8.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton8.Style = Sunny.UI.UIStyle.Orange;
+ this.uiSymbolButton8.StyleCustomMode = true;
+ this.uiSymbolButton8.Symbol = 61553;
+ this.uiSymbolButton8.TabIndex = 63;
+ this.uiSymbolButton8.Text = "Warn";
+ this.uiSymbolButton8.Click += new System.EventHandler(this.uiSymbolButton8_Click);
+ //
+ // uiSymbolButton9
+ //
+ this.uiSymbolButton9.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton9.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton9.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiSymbolButton9.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton9.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton9.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton9.Location = new System.Drawing.Point(30, 368);
+ this.uiSymbolButton9.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton9.Name = "uiSymbolButton9";
+ this.uiSymbolButton9.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton9.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolButton9.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81)))));
+ this.uiSymbolButton9.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton9.RectSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35)))));
+ this.uiSymbolButton9.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton9.Style = Sunny.UI.UIStyle.Green;
+ this.uiSymbolButton9.StyleCustomMode = true;
+ this.uiSymbolButton9.Symbol = 61528;
+ this.uiSymbolButton9.TabIndex = 62;
+ this.uiSymbolButton9.Text = "Success";
+ this.uiSymbolButton9.Click += new System.EventHandler(this.uiSymbolButton9_Click);
+ //
+ // uiLine8
+ //
+ this.uiLine8.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine8.Location = new System.Drawing.Point(372, 336);
+ this.uiLine8.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine8.Name = "uiLine8";
+ this.uiLine8.Size = new System.Drawing.Size(328, 20);
+ this.uiLine8.TabIndex = 69;
+ this.uiLine8.Text = "UILoginForm";
+ this.uiLine8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiSymbolButton3
+ //
+ this.uiSymbolButton3.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton3.Location = new System.Drawing.Point(486, 368);
+ this.uiSymbolButton3.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton3.Name = "uiSymbolButton3";
+ this.uiSymbolButton3.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton3.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton3.Symbol = 62144;
+ this.uiSymbolButton3.TabIndex = 68;
+ this.uiSymbolButton3.Text = "Login";
+ this.uiSymbolButton3.Click += new System.EventHandler(this.uiSymbolButton3_Click);
+ //
+ // uiSymbolButton10
+ //
+ this.uiSymbolButton10.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton10.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton10.Location = new System.Drawing.Point(372, 368);
+ this.uiSymbolButton10.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton10.Name = "uiSymbolButton10";
+ this.uiSymbolButton10.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton10.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton10.Symbol = 61447;
+ this.uiSymbolButton10.TabIndex = 67;
+ this.uiSymbolButton10.Text = "Login";
+ this.uiSymbolButton10.Click += new System.EventHandler(this.uiSymbolButton10_Click);
+ //
+ // uiSymbolButton11
+ //
+ this.uiSymbolButton11.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton11.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton11.Location = new System.Drawing.Point(201, 210);
+ this.uiSymbolButton11.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton11.Name = "uiSymbolButton11";
+ this.uiSymbolButton11.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton11.Size = new System.Drawing.Size(155, 35);
+ this.uiSymbolButton11.Symbol = 61806;
+ this.uiSymbolButton11.TabIndex = 70;
+ this.uiSymbolButton11.Text = "等待提示框";
+ this.uiSymbolButton11.Click += new System.EventHandler(this.uiSymbolButton11_Click);
+ //
+ // uiLine9
+ //
+ this.uiLine9.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine9.Location = new System.Drawing.Point(201, 178);
+ this.uiLine9.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine9.Name = "uiLine9";
+ this.uiLine9.Size = new System.Drawing.Size(155, 20);
+ this.uiLine9.TabIndex = 71;
+ this.uiLine9.Text = "UIWaitingForm";
+ this.uiLine9.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FDialogs
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 549);
+ this.Name = "FDialogs";
+ this.Symbol = 62160;
+ this.Text = "Dialogs";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UISymbolButton btnError;
+ private UISymbolButton btnWarn;
+ private UISymbolButton btnSuccess;
+ private UISymbolButton btnAsk;
+ private UISymbolButton btnAuto;
+ private UISymbolButton btnStatus2;
+ private UISymbolButton btnInfo;
+ private UISymbolButton btnPasswordInput;
+ private UISymbolButton btnDoubleInput;
+ private UISymbolButton btnIntInput;
+ private UISymbolButton btnStringInput;
+ private UILine uiLine3;
+ private UILine uiLine2;
+ private UILine uiLine1;
+ private UILine uiLine4;
+ private UISymbolButton uiSymbolButton1;
+ private UILine uiLine5;
+ private UISymbolButton uiSymbolButton2;
+ private UISymbolButton uiSymbolButton4;
+ private UISymbolButton uiSymbolButton5;
+ private UISymbolButton uiSymbolButton6;
+ private UISymbolButton btnEN;
+ private UISymbolButton btnCH;
+ private UILine uiLine6;
+ private UILine uiLine7;
+ private UISymbolButton uiSymbolButton7;
+ private UISymbolButton uiSymbolButton8;
+ private UISymbolButton uiSymbolButton9;
+ private UILine uiLine8;
+ private UISymbolButton uiSymbolButton3;
+ private UISymbolButton uiSymbolButton10;
+ private UISymbolButton uiSymbolButton11;
+ private UILine uiLine9;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FDialogs.cs b/SunnyUI.Net5.Demo/Forms/FDialogs.cs
new file mode 100644
index 00000000..764771e6
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FDialogs.cs
@@ -0,0 +1,199 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FDialogs : UITitlePage
+ {
+ public FDialogs()
+ {
+ InitializeComponent();
+ }
+
+ private void btnAsk_Click(object sender, EventArgs e)
+ {
+ if (ShowAskDialog("确认信息提示框"))
+ {
+ ShowSuccessTip("您点击了确定按钮");
+ }
+ else
+ {
+ ShowErrorTip("您点击了取消按钮");
+ }
+ }
+
+ private void btnAuto_Click(object sender, EventArgs e)
+ {
+ UIMessageDialog.ShowMessageDialog("跟随界面主题风格信息提示框", UILocalize.InfoTitle, false, Style);
+ }
+
+ private void btnSuccess_Click(object sender, EventArgs e)
+ {
+ ShowSuccessDialog("正确信息提示框");
+ }
+
+ private void btnWarn_Click(object sender, EventArgs e)
+ {
+ ShowWarningDialog("警告信息提示框");
+ }
+
+ private void btnError_Click(object sender, EventArgs e)
+ {
+ ShowErrorDialog("错误信息提示框");
+ }
+
+ private void btnStatus2_Click(object sender, EventArgs e)
+ {
+ ShowStatusForm(100, "数据加载中......");
+ for (int i = 0; i < 88; i++)
+ {
+ SystemEx.Delay(50);
+ SetStatusFormDescription("数据加载中(" + i + "%)......");
+ StatusFormStepIt();
+ }
+
+ HideStatusForm();
+ }
+
+ private void btnInfo_Click(object sender, EventArgs e)
+ {
+ ShowInfoDialog("默认信息提示框");
+ }
+
+ private void btnStringInput_Click(object sender, EventArgs e)
+ {
+ string value = "请输入字符串";
+ if (this.InputStringDialog(ref value))
+ {
+ ShowInfoDialog(value);
+ }
+ }
+
+ private void btnIntInput_Click(object sender, EventArgs e)
+ {
+ int value = 0;
+ if (this.InputIntegerDialog(ref value))
+ {
+ ShowInfoDialog(value.ToString());
+ }
+ }
+
+ private void btnDoubleInput_Click(object sender, EventArgs e)
+ {
+ double value = 0;
+ if (this.InputDoubleDialog(ref value))
+ {
+ ShowInfoDialog(value.ToString("F2"));
+ }
+ }
+
+ private void btnPasswordInput_Click(object sender, EventArgs e)
+ {
+ string value = "";
+ if (this.InputPasswordDialog(ref value))
+ {
+ ShowInfoDialog(value);
+ }
+ }
+
+ private void uiSymbolButton1_Click(object sender, EventArgs e)
+ {
+ List items = new List() { "0", "1", "2", "3", "4" };
+ int index = 2;
+ if (this.ShowSelectDialog(ref index, items))
+ {
+ ShowInfoDialog(index.ToString());
+ }
+ }
+
+ private void uiSymbolButton2_Click(object sender, EventArgs e)
+ {
+ ShowInfoNotifier("Info");
+ }
+
+ private void uiSymbolButton6_Click(object sender, EventArgs e)
+ {
+ ShowSuccessNotifier("Success");
+ }
+
+ private void uiSymbolButton5_Click(object sender, EventArgs e)
+ {
+ ShowWarningNotifier("Warning");
+ }
+
+ private void uiSymbolButton4_Click(object sender, EventArgs e)
+ {
+ ShowErrorNotifier("Error");
+ }
+
+ private void btnCH_Click(object sender, EventArgs e)
+ {
+ UILocalizeHelper.SetCH();
+ }
+
+ private void btnEN_Click(object sender, EventArgs e)
+ {
+ UILocalizeHelper.SetEN();
+ }
+
+ private void uiSymbolButton9_Click(object sender, EventArgs e)
+ {
+ ShowSuccessTip("轻便消息提示框 - 成功");
+ }
+
+ private void uiSymbolButton8_Click(object sender, EventArgs e)
+ {
+ ShowWarningTip("轻便消息提示框 - 警告");
+ }
+
+ private void uiSymbolButton7_Click(object sender, EventArgs e)
+ {
+ ShowErrorTip("轻便消息提示框 - 错误");
+ }
+
+ private void uiSymbolButton10_Click(object sender, EventArgs e)
+ {
+ FLogin frm = new FLogin();
+ frm.ShowDialog();
+ if (frm.IsLogin)
+ {
+ UIMessageTip.ShowOk("登录成功");
+ }
+
+ frm.Dispose();
+ }
+
+ private void uiSymbolButton3_Click(object sender, EventArgs e)
+ {
+ UILoginForm frm = new UILoginForm();
+ frm.ShowInTaskbar = true;
+ frm.Text = "Login";
+ frm.Title = "SunnyUI.Net Login Form";
+ frm.SubText = "SunnyUI.Net V2.2.5";
+ frm.OnLogin += Frm_OnLogin;
+ frm.LoginImage = UILoginForm.UILoginImage.Login2;
+ frm.ShowDialog();
+ if (frm.IsLogin)
+ {
+ UIMessageTip.ShowOk("登录成功");
+ }
+
+ frm.Dispose();
+ }
+
+ private bool Frm_OnLogin(string userName, string password)
+ {
+ return userName == "admin" && password == "admin";
+ }
+
+ private void uiSymbolButton11_Click(object sender, EventArgs e)
+ {
+ ShowWaitForm();
+ Thread.Sleep(3000);
+ SetWaitFormDescription(UILocalize.SystemProcessing + "50%");
+ Thread.Sleep(3000);
+ HideWaitForm();
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FDialogs.resx b/SunnyUI.Net5.Demo/Forms/FDialogs.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FDialogs.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FEdit.Designer.cs b/SunnyUI.Net5.Demo/Forms/FEdit.Designer.cs
new file mode 100644
index 00000000..18f8a89e
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FEdit.Designer.cs
@@ -0,0 +1,282 @@
+namespace Sunny.UI.Demo.Forms
+{
+ partial class FEdit
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.edtName = new Sunny.UI.UITextBox();
+ this.uiLabel2 = new Sunny.UI.UILabel();
+ this.uiLabel3 = new Sunny.UI.UILabel();
+ this.rbMale = new Sunny.UI.UIRadioButton();
+ this.rbFemale = new Sunny.UI.UIRadioButton();
+ this.edtAge = new Sunny.UI.UITextBox();
+ this.uiLabel4 = new Sunny.UI.UILabel();
+ this.cbDepartment = new Sunny.UI.UIComboBox();
+ this.uiLabel5 = new Sunny.UI.UILabel();
+ this.uiLabel6 = new Sunny.UI.UILabel();
+ this.edtDate = new Sunny.UI.UIDatePicker();
+ this.edtAddress = new Sunny.UI.UITextBox();
+ this.uiLabel1 = new Sunny.UI.UILabel();
+ this.SuspendLayout();
+ //
+ // pnlBtm
+ //
+ this.pnlBtm.Location = new System.Drawing.Point(1, 304);
+ this.pnlBtm.Size = new System.Drawing.Size(518, 55);
+ this.pnlBtm.TabIndex = 7;
+ //
+ // edtName
+ //
+ this.edtName.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.edtName.EnterAsTab = true;
+ this.edtName.FillColor = System.Drawing.Color.White;
+ this.edtName.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.edtName.Location = new System.Drawing.Point(150, 55);
+ this.edtName.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.edtName.Maximum = 2147483647D;
+ this.edtName.Minimum = -2147483648D;
+ this.edtName.Name = "edtName";
+ this.edtName.Padding = new System.Windows.Forms.Padding(5);
+ this.edtName.Size = new System.Drawing.Size(340, 29);
+ this.edtName.TabIndex = 0;
+ //
+ // uiLabel2
+ //
+ this.uiLabel2.AutoSize = true;
+ this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel2.Location = new System.Drawing.Point(56, 59);
+ this.uiLabel2.Name = "uiLabel2";
+ this.uiLabel2.Size = new System.Drawing.Size(42, 21);
+ this.uiLabel2.TabIndex = 4;
+ this.uiLabel2.Text = "姓名";
+ this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLabel3
+ //
+ this.uiLabel3.AutoSize = true;
+ this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel3.Location = new System.Drawing.Point(56, 99);
+ this.uiLabel3.Name = "uiLabel3";
+ this.uiLabel3.Size = new System.Drawing.Size(42, 21);
+ this.uiLabel3.TabIndex = 6;
+ this.uiLabel3.Text = "性别";
+ this.uiLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // rbMale
+ //
+ this.rbMale.Checked = true;
+ this.rbMale.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.rbMale.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.rbMale.Location = new System.Drawing.Point(150, 95);
+ this.rbMale.Name = "rbMale";
+ this.rbMale.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.rbMale.Size = new System.Drawing.Size(82, 29);
+ this.rbMale.TabIndex = 1;
+ this.rbMale.Text = "男";
+ //
+ // rbFemale
+ //
+ this.rbFemale.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.rbFemale.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.rbFemale.Location = new System.Drawing.Point(238, 95);
+ this.rbFemale.Name = "rbFemale";
+ this.rbFemale.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0);
+ this.rbFemale.Size = new System.Drawing.Size(82, 29);
+ this.rbFemale.TabIndex = 2;
+ this.rbFemale.Text = "女";
+ //
+ // edtAge
+ //
+ this.edtAge.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.edtAge.FillColor = System.Drawing.Color.White;
+ this.edtAge.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.edtAge.Location = new System.Drawing.Point(150, 135);
+ this.edtAge.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.edtAge.Maximum = 2147483647D;
+ this.edtAge.Minimum = -2147483648D;
+ this.edtAge.Name = "edtAge";
+ this.edtAge.Padding = new System.Windows.Forms.Padding(5);
+ this.edtAge.Size = new System.Drawing.Size(170, 29);
+ this.edtAge.TabIndex = 3;
+ this.edtAge.Text = "0";
+ this.edtAge.Type = Sunny.UI.UITextBox.UIEditType.Integer;
+ //
+ // uiLabel4
+ //
+ this.uiLabel4.AutoSize = true;
+ this.uiLabel4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel4.Location = new System.Drawing.Point(56, 139);
+ this.uiLabel4.Name = "uiLabel4";
+ this.uiLabel4.Size = new System.Drawing.Size(42, 21);
+ this.uiLabel4.TabIndex = 10;
+ this.uiLabel4.Text = "年龄";
+ this.uiLabel4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // cbDepartment
+ //
+ this.cbDepartment.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList;
+ this.cbDepartment.FillColor = System.Drawing.Color.White;
+ this.cbDepartment.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.cbDepartment.Items.AddRange(new object[] {
+ "研发部",
+ "采购部",
+ "生产部",
+ "销售部",
+ "人事部",
+ "财务部",
+ "行政部",
+ "其他"});
+ this.cbDepartment.Location = new System.Drawing.Point(150, 175);
+ this.cbDepartment.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.cbDepartment.MinimumSize = new System.Drawing.Size(63, 0);
+ this.cbDepartment.Name = "cbDepartment";
+ this.cbDepartment.Padding = new System.Windows.Forms.Padding(0, 0, 30, 0);
+ this.cbDepartment.Size = new System.Drawing.Size(170, 29);
+ this.cbDepartment.TabIndex = 4;
+ this.cbDepartment.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLabel5
+ //
+ this.uiLabel5.AutoSize = true;
+ this.uiLabel5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel5.Location = new System.Drawing.Point(56, 179);
+ this.uiLabel5.Name = "uiLabel5";
+ this.uiLabel5.Size = new System.Drawing.Size(42, 21);
+ this.uiLabel5.TabIndex = 12;
+ this.uiLabel5.Text = "部门";
+ this.uiLabel5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // uiLabel6
+ //
+ this.uiLabel6.AutoSize = true;
+ this.uiLabel6.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel6.Location = new System.Drawing.Point(56, 219);
+ this.uiLabel6.Name = "uiLabel6";
+ this.uiLabel6.Size = new System.Drawing.Size(42, 21);
+ this.uiLabel6.TabIndex = 13;
+ this.uiLabel6.Text = "生日";
+ this.uiLabel6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // edtDate
+ //
+ this.edtDate.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList;
+ this.edtDate.FillColor = System.Drawing.Color.White;
+ this.edtDate.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.edtDate.Location = new System.Drawing.Point(150, 215);
+ this.edtDate.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.edtDate.MaxLength = 10;
+ this.edtDate.MinimumSize = new System.Drawing.Size(63, 0);
+ this.edtDate.Name = "edtDate";
+ this.edtDate.Padding = new System.Windows.Forms.Padding(0, 0, 30, 0);
+ this.edtDate.Size = new System.Drawing.Size(170, 29);
+ this.edtDate.SymbolDropDown = 61555;
+ this.edtDate.SymbolNormal = 61555;
+ this.edtDate.TabIndex = 5;
+ this.edtDate.Text = "2020-05-08";
+ this.edtDate.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
+ this.edtDate.Value = new System.DateTime(2020, 5, 8, 0, 0, 0, 0);
+ //
+ // edtAddress
+ //
+ this.edtAddress.Cursor = System.Windows.Forms.Cursors.IBeam;
+ this.edtAddress.FillColor = System.Drawing.Color.White;
+ this.edtAddress.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.edtAddress.Location = new System.Drawing.Point(150, 254);
+ this.edtAddress.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.edtAddress.Maximum = 2147483647D;
+ this.edtAddress.Minimum = -2147483648D;
+ this.edtAddress.Name = "edtAddress";
+ this.edtAddress.Padding = new System.Windows.Forms.Padding(5);
+ this.edtAddress.Size = new System.Drawing.Size(340, 29);
+ this.edtAddress.TabIndex = 6;
+ //
+ // uiLabel1
+ //
+ this.uiLabel1.AutoSize = true;
+ this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLabel1.Location = new System.Drawing.Point(56, 258);
+ this.uiLabel1.Name = "uiLabel1";
+ this.uiLabel1.Size = new System.Drawing.Size(42, 21);
+ this.uiLabel1.TabIndex = 15;
+ this.uiLabel1.Text = "住址";
+ this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FEdit
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(520, 362);
+ this.Controls.Add(this.edtAddress);
+ this.Controls.Add(this.uiLabel1);
+ this.Controls.Add(this.edtDate);
+ this.Controls.Add(this.uiLabel6);
+ this.Controls.Add(this.uiLabel5);
+ this.Controls.Add(this.cbDepartment);
+ this.Controls.Add(this.uiLabel4);
+ this.Controls.Add(this.edtAge);
+ this.Controls.Add(this.rbFemale);
+ this.Controls.Add(this.rbMale);
+ this.Controls.Add(this.uiLabel3);
+ this.Controls.Add(this.edtName);
+ this.Controls.Add(this.uiLabel2);
+ this.Name = "FEdit";
+ this.Text = "UIEditFrom";
+ this.Controls.SetChildIndex(this.pnlBtm, 0);
+ this.Controls.SetChildIndex(this.uiLabel2, 0);
+ this.Controls.SetChildIndex(this.edtName, 0);
+ this.Controls.SetChildIndex(this.uiLabel3, 0);
+ this.Controls.SetChildIndex(this.rbMale, 0);
+ this.Controls.SetChildIndex(this.rbFemale, 0);
+ this.Controls.SetChildIndex(this.edtAge, 0);
+ this.Controls.SetChildIndex(this.uiLabel4, 0);
+ this.Controls.SetChildIndex(this.cbDepartment, 0);
+ this.Controls.SetChildIndex(this.uiLabel5, 0);
+ this.Controls.SetChildIndex(this.uiLabel6, 0);
+ this.Controls.SetChildIndex(this.edtDate, 0);
+ this.Controls.SetChildIndex(this.uiLabel1, 0);
+ this.Controls.SetChildIndex(this.edtAddress, 0);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private UITextBox edtName;
+ private UILabel uiLabel2;
+ private UILabel uiLabel3;
+ private UIRadioButton rbMale;
+ private UIRadioButton rbFemale;
+ private UITextBox edtAge;
+ private UILabel uiLabel4;
+ private UIComboBox cbDepartment;
+ private UILabel uiLabel5;
+ private UILabel uiLabel6;
+ private UIDatePicker edtDate;
+ private UITextBox edtAddress;
+ private UILabel uiLabel1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FEdit.cs b/SunnyUI.Net5.Demo/Forms/FEdit.cs
new file mode 100644
index 00000000..da10ed1d
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FEdit.cs
@@ -0,0 +1,55 @@
+namespace Sunny.UI.Demo.Forms
+{
+ public partial class FEdit : UIEditForm
+ {
+ public FEdit()
+ {
+ InitializeComponent();
+ }
+
+ protected override bool CheckData()
+ {
+ return CheckEmpty(edtName, "请输入姓名")
+ && CheckEmpty(edtAge, "请输入年龄")
+ && CheckRange(edtAge, 18, 60, "输入年龄范围18~60")
+ && CheckEmpty(cbDepartment, "请选择部门")
+ && CheckEmpty(edtDate, "请选择生日");
+ }
+
+ private Person person;
+
+ public Person Person
+ {
+ get
+ {
+ if (person == null)
+ {
+ person = new Person();
+ }
+
+ person.Name = edtName.Text;
+ person.Age = edtAge.IntValue;
+ person.Birthday = edtDate.Value;
+ person.Address = edtAddress.Text;
+ if (rbMale.Checked)
+ person.Sex = Sex.Male;
+ if (rbFemale.Checked)
+ person.Sex = Sex.Female;
+ person.Department = cbDepartment.Text;
+ return person;
+ }
+
+ set
+ {
+ person = value;
+ edtName.Text = value.Name;
+ edtAge.IntValue = value.Age;
+ edtDate.Value = value.Birthday;
+ edtAddress.Text = value.Address;
+ cbDepartment.SelectedIndex = cbDepartment.Items.IndexOf(value.Department);
+ rbMale.Checked = value.Sex == Sex.Male;
+ rbFemale.Checked = value.Sex == Sex.Female;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FEdit.resx b/SunnyUI.Net5.Demo/Forms/FEdit.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FEdit.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FEditor.Designer.cs b/SunnyUI.Net5.Demo/Forms/FEditor.Designer.cs
new file mode 100644
index 00000000..8e5bd55b
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FEditor.Designer.cs
@@ -0,0 +1,132 @@
+namespace Sunny.UI.Demo.Forms
+{
+ partial class FEditor
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.btnEdit = new Sunny.UI.UISymbolButton();
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.btnAdd = new Sunny.UI.UISymbolButton();
+ this.uiSymbolButton1 = new Sunny.UI.UISymbolButton();
+ this.uiLine2 = new Sunny.UI.UILine();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiLine2);
+ this.PagePanel.Controls.Add(this.uiSymbolButton1);
+ this.PagePanel.Controls.Add(this.btnAdd);
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.btnEdit);
+ //
+ // btnEdit
+ //
+ this.btnEdit.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnEdit.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnEdit.Location = new System.Drawing.Point(152, 57);
+ this.btnEdit.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnEdit.Name = "btnEdit";
+ this.btnEdit.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnEdit.Size = new System.Drawing.Size(100, 35);
+ this.btnEdit.Symbol = 61508;
+ this.btnEdit.TabIndex = 0;
+ this.btnEdit.Text = "编辑";
+ this.btnEdit.Click += new System.EventHandler(this.btnEdit_Click);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 19;
+ this.uiLine1.Text = "UIEditForm";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // btnAdd
+ //
+ this.btnAdd.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnAdd.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.btnAdd.Location = new System.Drawing.Point(30, 57);
+ this.btnAdd.MinimumSize = new System.Drawing.Size(1, 1);
+ this.btnAdd.Name = "btnAdd";
+ this.btnAdd.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.btnAdd.Size = new System.Drawing.Size(100, 35);
+ this.btnAdd.Symbol = 61543;
+ this.btnAdd.TabIndex = 20;
+ this.btnAdd.Text = "增加";
+ this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
+ //
+ // uiSymbolButton1
+ //
+ this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiSymbolButton1.Location = new System.Drawing.Point(30, 149);
+ this.uiSymbolButton1.MinimumSize = new System.Drawing.Size(1, 1);
+ this.uiSymbolButton1.Name = "uiSymbolButton1";
+ this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
+ this.uiSymbolButton1.Size = new System.Drawing.Size(100, 35);
+ this.uiSymbolButton1.Symbol = 61543;
+ this.uiSymbolButton1.TabIndex = 21;
+ this.uiSymbolButton1.Text = "增加";
+ this.uiSymbolButton1.Click += new System.EventHandler(this.uiSymbolButton1_Click);
+ //
+ // uiLine2
+ //
+ this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.Location = new System.Drawing.Point(30, 114);
+ this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine2.Name = "uiLine2";
+ this.uiLine2.Size = new System.Drawing.Size(670, 20);
+ this.uiLine2.TabIndex = 22;
+ this.uiLine2.Text = "UIEditForm 代码生成";
+ this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // FEditor
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "FEditor";
+ this.Symbol = 61508;
+ this.Text = "Editor";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UISymbolButton btnEdit;
+ private UILine uiLine1;
+ private UISymbolButton btnAdd;
+ private UILine uiLine2;
+ private UISymbolButton uiSymbolButton1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FEditor.cs b/SunnyUI.Net5.Demo/Forms/FEditor.cs
new file mode 100644
index 00000000..0128082c
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FEditor.cs
@@ -0,0 +1,92 @@
+using System;
+
+namespace Sunny.UI.Demo.Forms
+{
+ public partial class FEditor : UITitlePage
+ {
+ public FEditor()
+ {
+ InitializeComponent();
+ }
+
+ private void btnEdit_Click(object sender, System.EventArgs e)
+ {
+ Person person = new Person();
+ person.Name = "SunnyUI";
+ person.Sex = Sex.Male;
+ person.Age = 18;
+ person.Department = "研发部";
+ person.Birthday = new DateTime(2002, 1, 1);
+
+ FEdit frm = new FEdit();
+ frm.Person = person;
+ frm.ShowDialog();
+ if (frm.IsOK)
+ {
+ this.ShowSuccessDialog(frm.Person.ToString());
+ }
+
+ frm.Dispose();
+ }
+
+ private void btnAdd_Click(object sender, EventArgs e)
+ {
+ FEdit frm = new FEdit();
+ frm.ShowDialog();
+ if (frm.IsOK)
+ {
+ this.ShowSuccessDialog(frm.Person.ToString());
+ }
+
+ frm.Dispose();
+ }
+
+ private void uiSymbolButton1_Click(object sender, EventArgs e)
+ {
+ UIEditOption option = new UIEditOption();
+ option.AutoLabelWidth = true;
+ option.Text = "增加";
+ option.AddText("Name", "姓名", "", true);
+ option.AddInteger("Age", "年龄", 20);
+ option.AddDate("Birthday", "生日", DateTime.Now);
+
+ UIEditForm frm = new UIEditForm(option);
+ frm.ShowDialog();
+
+ if (frm.IsOK)
+ {
+ Console.WriteLine("姓名: " + frm["Name"]);
+ Console.WriteLine("年龄: " + frm["Age"]);
+ Console.WriteLine("生日: " + frm["Birthday"]);
+ }
+
+ frm.Dispose();
+ }
+ }
+
+ public class Person
+ {
+ public string Name { get; set; }
+
+ public int Age { get; set; }
+
+ public Sex Sex { get; set; }
+
+ public string Department { get; set; }
+
+ public DateTime Birthday { get; set; }
+
+ public string Address { get; set; }
+
+ public override string ToString()
+ {
+ return Name + ", " + Age + ", " + Department;
+ }
+ }
+
+ public enum Sex
+ {
+ Male,
+ Female
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Forms/FEditor.resx b/SunnyUI.Net5.Demo/Forms/FEditor.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FEditor.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FFrames.Designer.cs b/SunnyUI.Net5.Demo/Forms/FFrames.Designer.cs
new file mode 100644
index 00000000..95acadf9
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FFrames.Designer.cs
@@ -0,0 +1,202 @@
+namespace Sunny.UI.Demo
+{
+ partial class FFrames
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiLine1 = new Sunny.UI.UILine();
+ this.btnAM = new Sunny.UI.UIImageButton();
+ this.btnAHMF = new Sunny.UI.UIImageButton();
+ this.btnHAMF = new Sunny.UI.UIImageButton();
+ this.btnHAM = new Sunny.UI.UIImageButton();
+ this.btnAHM = new Sunny.UI.UIImageButton();
+ this.btnHMF = new Sunny.UI.UIImageButton();
+ this.btnHM = new Sunny.UI.UIImageButton();
+ this.PagePanel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.btnAM)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnAHMF)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnHAMF)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnHAM)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnAHM)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnHMF)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnHM)).BeginInit();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiLine1);
+ this.PagePanel.Controls.Add(this.btnAM);
+ this.PagePanel.Controls.Add(this.btnAHMF);
+ this.PagePanel.Controls.Add(this.btnHAMF);
+ this.PagePanel.Controls.Add(this.btnHAM);
+ this.PagePanel.Controls.Add(this.btnAHM);
+ this.PagePanel.Controls.Add(this.btnHMF);
+ this.PagePanel.Controls.Add(this.btnHM);
+ this.PagePanel.Size = new System.Drawing.Size(892, 592);
+ //
+ // uiLine1
+ //
+ this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.Location = new System.Drawing.Point(30, 20);
+ this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine1.Name = "uiLine1";
+ this.uiLine1.Size = new System.Drawing.Size(670, 20);
+ this.uiLine1.TabIndex = 48;
+ this.uiLine1.Text = "UIMainFrame";
+ this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // btnAM
+ //
+ this.btnAM.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnAM.Image = global::Sunny.UI.Demo.Properties.Resources.AM;
+ this.btnAM.ImageHover = global::Sunny.UI.Demo.Properties.Resources.AM1;
+ this.btnAM.Location = new System.Drawing.Point(30, 381);
+ this.btnAM.Name = "btnAM";
+ this.btnAM.Size = new System.Drawing.Size(160, 120);
+ this.btnAM.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
+ this.btnAM.TabIndex = 7;
+ this.btnAM.TabStop = false;
+ this.btnAM.Text = null;
+ this.btnAM.Click += new System.EventHandler(this.btnAM_Click);
+ //
+ // btnAHMF
+ //
+ this.btnAHMF.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnAHMF.Image = global::Sunny.UI.Demo.Properties.Resources.AHMF;
+ this.btnAHMF.ImageHover = global::Sunny.UI.Demo.Properties.Resources.AHMF1;
+ this.btnAHMF.Location = new System.Drawing.Point(430, 381);
+ this.btnAHMF.Name = "btnAHMF";
+ this.btnAHMF.Size = new System.Drawing.Size(160, 120);
+ this.btnAHMF.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
+ this.btnAHMF.TabIndex = 6;
+ this.btnAHMF.TabStop = false;
+ this.btnAHMF.Text = null;
+ this.btnAHMF.Click += new System.EventHandler(this.btnAHMF_Click);
+ //
+ // btnHAMF
+ //
+ this.btnHAMF.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnHAMF.Image = global::Sunny.UI.Demo.Properties.Resources.HAMF;
+ this.btnHAMF.ImageHover = global::Sunny.UI.Demo.Properties.Resources.HAMF1;
+ this.btnHAMF.Location = new System.Drawing.Point(230, 221);
+ this.btnHAMF.Name = "btnHAMF";
+ this.btnHAMF.Size = new System.Drawing.Size(160, 120);
+ this.btnHAMF.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
+ this.btnHAMF.TabIndex = 5;
+ this.btnHAMF.TabStop = false;
+ this.btnHAMF.Text = null;
+ this.btnHAMF.Click += new System.EventHandler(this.btnHAMF_Click);
+ //
+ // btnHAM
+ //
+ this.btnHAM.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnHAM.Image = global::Sunny.UI.Demo.Properties.Resources.HAM;
+ this.btnHAM.ImageHover = global::Sunny.UI.Demo.Properties.Resources.HAM1;
+ this.btnHAM.Location = new System.Drawing.Point(30, 221);
+ this.btnHAM.Name = "btnHAM";
+ this.btnHAM.Size = new System.Drawing.Size(160, 120);
+ this.btnHAM.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
+ this.btnHAM.TabIndex = 4;
+ this.btnHAM.TabStop = false;
+ this.btnHAM.Text = null;
+ this.btnHAM.Click += new System.EventHandler(this.btnHAM_Click);
+ //
+ // btnAHM
+ //
+ this.btnAHM.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnAHM.Image = global::Sunny.UI.Demo.Properties.Resources.AHM;
+ this.btnAHM.ImageHover = global::Sunny.UI.Demo.Properties.Resources.AHM1;
+ this.btnAHM.Location = new System.Drawing.Point(230, 381);
+ this.btnAHM.Name = "btnAHM";
+ this.btnAHM.Size = new System.Drawing.Size(160, 120);
+ this.btnAHM.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
+ this.btnAHM.TabIndex = 3;
+ this.btnAHM.TabStop = false;
+ this.btnAHM.Text = null;
+ this.btnAHM.Click += new System.EventHandler(this.btnAHM_Click);
+ //
+ // btnHMF
+ //
+ this.btnHMF.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnHMF.Image = global::Sunny.UI.Demo.Properties.Resources.HMF;
+ this.btnHMF.ImageHover = global::Sunny.UI.Demo.Properties.Resources.HMF1;
+ this.btnHMF.Location = new System.Drawing.Point(230, 61);
+ this.btnHMF.Name = "btnHMF";
+ this.btnHMF.Size = new System.Drawing.Size(160, 120);
+ this.btnHMF.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
+ this.btnHMF.TabIndex = 2;
+ this.btnHMF.TabStop = false;
+ this.btnHMF.Text = null;
+ this.btnHMF.Click += new System.EventHandler(this.btnHMF_Click);
+ //
+ // btnHM
+ //
+ this.btnHM.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnHM.Image = global::Sunny.UI.Demo.Properties.Resources.HM;
+ this.btnHM.ImageHover = global::Sunny.UI.Demo.Properties.Resources.HM1;
+ this.btnHM.Location = new System.Drawing.Point(30, 61);
+ this.btnHM.Name = "btnHM";
+ this.btnHM.Size = new System.Drawing.Size(160, 120);
+ this.btnHM.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
+ this.btnHM.TabIndex = 1;
+ this.btnHM.TabStop = false;
+ this.btnHM.Text = null;
+ this.btnHM.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
+ this.btnHM.Click += new System.EventHandler(this.btnHM_Click);
+ //
+ // FFrames
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(892, 627);
+ this.Name = "FFrames";
+ this.Symbol = 61674;
+ this.Text = "Frames";
+ this.PagePanel.ResumeLayout(false);
+ this.PagePanel.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.btnAM)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnAHMF)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnHAMF)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnHAM)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnAHM)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnHMF)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.btnHM)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ private UIImageButton btnHM;
+ private UIImageButton btnAM;
+ private UIImageButton btnAHMF;
+ private UIImageButton btnHAMF;
+ private UIImageButton btnHAM;
+ private UIImageButton btnAHM;
+ private UIImageButton btnHMF;
+ private UILine uiLine1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FFrames.cs b/SunnyUI.Net5.Demo/Forms/FFrames.cs
new file mode 100644
index 00000000..a4106f86
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FFrames.cs
@@ -0,0 +1,54 @@
+using System.Windows.Forms;
+
+namespace Sunny.UI.Demo
+{
+ public partial class FFrames : UITitlePage
+ {
+ public FFrames()
+ {
+ InitializeComponent();
+ }
+
+ private void ShowFrame(UIMainFrame frame)
+ {
+ frame.WindowState = FormWindowState.Maximized;
+ frame.ShowDialog();
+ frame.Dispose();
+ }
+
+ private void btnHM_Click(object sender, System.EventArgs e)
+ {
+ ShowFrame(new FHeaderMain());
+ }
+
+ private void btnHMF_Click(object sender, System.EventArgs e)
+ {
+ ShowFrame(new FHeaderMainFooter());
+ }
+
+ private void btnHAM_Click(object sender, System.EventArgs e)
+ {
+ ShowFrame(new FHeaderAsideMain());
+ }
+
+ private void btnHAMF_Click(object sender, System.EventArgs e)
+ {
+ ShowFrame(new FHeaderAsideMainFooter());
+ }
+
+ private void btnAM_Click(object sender, System.EventArgs e)
+ {
+ ShowFrame(new FAsideMain());
+ }
+
+ private void btnAHM_Click(object sender, System.EventArgs e)
+ {
+ ShowFrame(new FAsideHeaderMain());
+ }
+
+ private void btnAHMF_Click(object sender, System.EventArgs e)
+ {
+ ShowFrame(new FAsideHeaderMainFooter());
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FFrames.resx b/SunnyUI.Net5.Demo/Forms/FFrames.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FFrames.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FLogin.Designer.cs b/SunnyUI.Net5.Demo/Forms/FLogin.Designer.cs
new file mode 100644
index 00000000..0e011d55
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FLogin.Designer.cs
@@ -0,0 +1,55 @@
+namespace Sunny.UI.Demo
+{
+ partial class FLogin
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FLogin));
+ this.SuspendLayout();
+ //
+ // lblTitle
+ //
+ this.lblTitle.Text = "SunnyUI.Net Login Form";
+ //
+ // FLogin
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
+ this.ClientSize = new System.Drawing.Size(750, 450);
+ this.LoginImage = Sunny.UI.UILoginForm.UILoginImage.Login6;
+ this.Name = "FLogin";
+ this.Text = "SunnyUI.Net Login Form";
+ this.ButtonLoginClick += new System.EventHandler(this.FLogin_ButtonLoginClick);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FLogin.cs b/SunnyUI.Net5.Demo/Forms/FLogin.cs
new file mode 100644
index 00000000..61a6abf7
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FLogin.cs
@@ -0,0 +1,20 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FLogin : UILoginForm
+ {
+ public FLogin()
+ {
+ InitializeComponent();
+ }
+
+ private void FLogin_ButtonLoginClick(object sender, System.EventArgs e)
+ {
+ this.ShowInfoTip("DSFSDF");
+ // if (UserName == "admin" && Password == "admin")
+ // {
+ // IsLogin = true;
+ // Close();
+ // }
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/FLogin.resx b/SunnyUI.Net5.Demo/Forms/FLogin.resx
new file mode 100644
index 00000000..72cbe4af
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/FLogin.resx
@@ -0,0 +1,812 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAu4AAAHCCAMAAACHRbwoAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAL9UExURQCg6v///4nb+Amj653X/xKn6x2r6wej6xCn6wii6xGn6gej6hCm6wei6hur6wCf6Ryq
+ 6wCg6ez6/Ryr6f///Qmj6hGm6hqq6wmj6Q+m6g+n6gCf6Buq7M7z+wSg6wul6g2l6xGm7QWi6hip6hCl
+ 6gSi6xWo6gCf6xmq6gKh6iiv7CWu7B6r7A6m7C2x7SCs6wik6wuk7DCz7f3//yKt7Bep7Pz+/fv9/BWn
+ 6hWn7B2s6xmp7De17QWi7QyV1A+n7Suw7B2q7QCe6zSz7BWp7D647iqx7SKr7TS07y+y6wym6gKh7DCx
+ 7heq7COu7hOW1P7+/Cav7hKY1Tq27vn9/iuv7haq6hSZ1x2c1xeZ1Qej7QaS0xys7Qul7Pj6+yCt7hmp
+ 5zO17Q2l7RKo7hCX1xua1EG57yOv7CKe1xmq7Smg10m78De17zu28AKP0wmU1iqw7xur7eb1+zGk2RCk
+ 5hea2ACa6iiv7h6r7lC98i2x7yWu7tfu+TCz7/L6/Qii7cLExRmr7d/y+8Tl9Bap7hum5PT09RKa2gma
+ 3o/S/WvG9rDh+Tml3M7p9xGh4oDO+O3v8AuX2QCM0tPV11625Aie46Tb+Dqz7Ruh3eqeNXnM9nPJ9Vi/
+ 8WTE9Lje8ojK6Wy85QBjr63Z8Nre4hGe3uaTKOGGGLvl+nnD5+bl5USr3orR9V3B9K+3vZfU/sTp+1Wy
+ 4dvHjIbQ/PDe2AR0u+PLlpjP7NC4fcCrdfG0ZJrW/5XX9Sap5M7a5gyExr+mY9mXXuqkRyaFx9zn8t/S
+ tePZvtXHqurVo/fOlfjHg/W+c+Ts98y8jK3N7Uyv3iij3NXBnMqwkOCmd+2rVf789n3B8aLW7p6+2/7k
+ scq4cv3QZvy/SjKr4vDfw/3Zopqamf3diLvN3eSzhMd+IzCS1UOW0tpvD/Tu4v7uzsSPUbN5RdWQLVui
+ 2M+JPIGw24aEgY685myjz6udjdeURFSRxKumoadfEOacWp/l+JyMd9OuXIdlSZlqM9FGFldUThTK7zgA
+ AJ2ASURBVHhe7b0HfBvXle8PPuxgZoBBMwgMBsBi0IneCJBoJMHeexHFIoqkeu+SVS1bLnHvva3jxI5L
+ 7DTvbuxkUzdvNz1vk+w/Zd8mW7K9v/Z/7/0//3MGo05SlCxbJjhfyxLYcYnfnPmde889V1YhIbFqkOQu
+ sYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQu
+ sYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQu
+ sYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQu
+ sYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQu
+ sYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQu
+ sYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ3SQhsWqQSUhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISFyKXvxXQqIcAX2X/ohvSIKXKGOsZ/+U3qg6+1Cm1wf0iPimhEQZUArt8EcLf1tlAVHu
+ 8Bb8X4UPJcFLlBtaEDr8DVrXCiHdKmuSyapQ9ILcMchLspdYmei1GMtRwoJb0YPOm+B/IaTj31a9FqwM
+ RHr4sFaL74L/tVb8kKh7weQIV4OExEcaVCooXngMXl3bJGhZH/ACdbRd7aXVNK02G83wD+2l7bTdDh+x
+ 26tkKH1Zk1UL3wHfgG9SUr/wHSUkPopYm6qqqmRNqHRAFgjY7XWkiqZJmsR/ABJQwX/4HnxbLTw4Rdd5
+ XQE7yhvvB3pZVRW6n9IfCYmPJmjQIaTDIwjbEMZVavgf9U2TKoBUq+FfVLzwZgkaPkqTLpVZjTG/225F
+ hcO1IrgijPESEh8tBJ+OIrWCN5fZXUIcp+VCLHepBVULIiflF1B6DwgfLgyM9HhNkGBxaLrOZUcXhDFe
+ krvER4WSFgWpg+HGdBNiOgpXRcsFk6JWQXBXi/JeBCMoHj/XBZJ3CVeFGqI8CYYeIzx+c/i+GPEl5Uvc
+ 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
+ AndsCPtSr2veapTTkJhioQ12nZGTXrvMKq2fSlw76F9kMnva1ISrNefrwZYBfCLWZIGJxokakDo2iIF/
+ RK1eB7AADGvLIBkGqdvxmQo/d9lPUULiIqyypkBA6/FpseYXtX51UhIkj9OTWhkkrjhXQy7z3PYrgS4G
+ V2+9wlYqV6CqCtyTrKpKErvENSMEcy3vppusgQB4hKuVEpgfSFtBinhvkNmxI5JZcDVXq/mLK3AEyy6E
+ dToer/PatdomkHoT/CTJyEhcGxAnUez6JjpjBEN8TdN6Z79Er21qggwS7hEu4dxtrCIrHRkGb+GmkMvl
+ f+F7IdOFVFTYKwV/4HIpHY1A0rTXhdcjVjjA84MrS9q9IXFtgHC0kJ3qmzIEbnq7xllsjO8lww9G3irY
+ oQAeFkaqaLXLhckrrgzhzI2wPeT8HP2Fci9dGdhRUjDrcHOIx40kaYdojt9WeGL4nfHqxMcSElcLiKcK
+ Us0mkxs0Cw/en5JKdwr4TjhRCFHeXjdB0wkSjxVQeUHBoG/cDLWw3FW0cC4xmnS8NACvHSd94Gq62L5I
+ Ype4dqpk3d1z+VNVmAheN/B7VVUFArIqu9cbB8CjTMjPyXxhUPkY1BOJOq83AJeON1D6ThISEhISEhIS
+ EhISEhISEhISEhISEhISEhISEhISEhISEquH/yQhsWqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQu
+ sYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQu
+ sYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrGKkOQusYqQ5C6xipDkLrFq+E//
+ 6f8HWxjI7gG4iUMAAAAASUVORK5CYII=
+
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMain.Designer.cs b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMain.Designer.cs
new file mode 100644
index 00000000..2f3b8427
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMain.Designer.cs
@@ -0,0 +1,61 @@
+namespace Sunny.UI.Demo
+{
+ partial class FAsideHeaderMain
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.SuspendLayout();
+ //
+ // Header
+ //
+ this.Header.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(76)))), ((int)(((byte)(76)))));
+ this.Header.ForeColor = System.Drawing.Color.White;
+ this.Header.Size = new System.Drawing.Size(774, 57);
+ this.Header.Style = Sunny.UI.UIStyle.Custom;
+ this.Header.StyleCustomMode = true;
+ //
+ // Aside
+ //
+ this.Aside.Size = new System.Drawing.Size(250, 685);
+ this.Aside.Style = Sunny.UI.UIStyle.Blue;
+ this.Aside.MenuItemClick += new Sunny.UI.UINavMenu.OnMenuItemClick(this.Aside_MenuItemClick);
+ //
+ // FAsideHeaderMain
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1024, 720);
+ this.Name = "FAsideHeaderMain";
+ this.Style = Sunny.UI.UIStyle.Blue;
+ this.Text = "FAsideHeaderMain";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMain.cs b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMain.cs
new file mode 100644
index 00000000..c58fb58e
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMain.cs
@@ -0,0 +1,31 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FAsideHeaderMain : UIAsideHeaderMainFrame
+ {
+ public FAsideHeaderMain()
+ {
+ InitializeComponent();
+
+ //设置关联
+ Aside.TabControl = MainTabControl;
+
+ //增加页面到Main
+ AddPage(new FPage1(), 1001);
+ AddPage(new FPage2(), 1002);
+ AddPage(new FPage3(), 1003);
+
+ //设置Header节点索引
+ Aside.CreateNode("Page1", 1001);
+ Aside.CreateNode("Page2", 1002);
+ Aside.CreateNode("Page3", 1003);
+
+ //显示默认界面
+ Aside.SelectFirst();
+ }
+
+ private void Aside_MenuItemClick(System.Windows.Forms.TreeNode node, NavMenuItem item, int pageIndex)
+ {
+ Header.Text = "PageIndex: " + pageIndex;
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMain.resx b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMain.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMain.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMainFooter.Designer.cs b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMainFooter.Designer.cs
new file mode 100644
index 00000000..8e8e66c0
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMainFooter.Designer.cs
@@ -0,0 +1,67 @@
+namespace Sunny.UI.Demo
+{
+ partial class FAsideHeaderMainFooter
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.SuspendLayout();
+ //
+ // Footer
+ //
+ this.Footer.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181)))));
+ this.Footer.Location = new System.Drawing.Point(250, 664);
+ this.Footer.Size = new System.Drawing.Size(774, 56);
+ this.Footer.Style = Sunny.UI.UIStyle.Custom;
+ this.Footer.StyleCustomMode = true;
+ //
+ // Header
+ //
+ this.Header.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(76)))), ((int)(((byte)(76)))));
+ this.Header.ForeColor = System.Drawing.Color.White;
+ this.Header.Size = new System.Drawing.Size(774, 57);
+ this.Header.Style = Sunny.UI.UIStyle.Custom;
+ this.Header.StyleCustomMode = true;
+ //
+ // Aside
+ //
+ this.Aside.Size = new System.Drawing.Size(250, 685);
+ this.Aside.MenuItemClick += new Sunny.UI.UINavMenu.OnMenuItemClick(this.Aside_MenuItemClick);
+ //
+ // FAsideHeaderMainFooter
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1024, 720);
+ this.Name = "FAsideHeaderMainFooter";
+ this.Text = "FAsideHeaderMainFooter";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMainFooter.cs b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMainFooter.cs
new file mode 100644
index 00000000..57fe51f0
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMainFooter.cs
@@ -0,0 +1,31 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FAsideHeaderMainFooter : UIAsideHeaderMainFooterFrame
+ {
+ public FAsideHeaderMainFooter()
+ {
+ InitializeComponent();
+
+ //设置关联
+ Aside.TabControl = MainTabControl;
+
+ //增加页面到Main
+ AddPage(new FPage1(), 1001);
+ AddPage(new FPage2(), 1002);
+ AddPage(new FPage3(), 1003);
+
+ //设置Header节点索引
+ Aside.CreateNode("Page1", 1001);
+ Aside.CreateNode("Page2", 1002);
+ Aside.CreateNode("Page3", 1003);
+
+ //显示默认界面
+ Aside.SelectFirst();
+ }
+
+ private void Aside_MenuItemClick(System.Windows.Forms.TreeNode node, NavMenuItem item, int pageIndex)
+ {
+ Footer.Text = Header.Text = "PageIndex: " + pageIndex;
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMainFooter.resx b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMainFooter.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FAsideHeaderMainFooter.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FAsideMain.Designer.cs b/SunnyUI.Net5.Demo/Forms/Frames/FAsideMain.Designer.cs
new file mode 100644
index 00000000..f7f1a7db
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FAsideMain.Designer.cs
@@ -0,0 +1,53 @@
+namespace Sunny.UI.Demo
+{
+ partial class FAsideMain
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.SuspendLayout();
+ //
+ // Aside
+ //
+ this.Aside.LineColor = System.Drawing.Color.Black;
+ this.Aside.Size = new System.Drawing.Size(250, 685);
+ this.Aside.Style = Sunny.UI.UIStyle.Blue;
+ //
+ // FAsideMain
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1024, 720);
+ this.Name = "FAsideMain";
+ this.Style = Sunny.UI.UIStyle.Blue;
+ this.Text = "FAsideMain";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FAsideMain.cs b/SunnyUI.Net5.Demo/Forms/Frames/FAsideMain.cs
new file mode 100644
index 00000000..0308398d
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FAsideMain.cs
@@ -0,0 +1,26 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FAsideMain : UIAsideMainFrame
+ {
+ public FAsideMain()
+ {
+ InitializeComponent();
+
+ //设置关联
+ Aside.TabControl = MainTabControl;
+
+ //增加页面到Main
+ AddPage(new FTitlePage1(), 1001);
+ AddPage(new FTitlePage2(), 1002);
+ AddPage(new FTitlePage3(), 1003);
+
+ //设置Header节点索引
+ Aside.CreateNode("Page1", 1001);
+ Aside.CreateNode("Page2", 1002);
+ Aside.CreateNode("Page3", 1003);
+
+ //显示默认界面
+ Aside.SelectFirst();
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FAsideMain.resx b/SunnyUI.Net5.Demo/Forms/Frames/FAsideMain.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FAsideMain.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMain.Designer.cs b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMain.Designer.cs
new file mode 100644
index 00000000..d6347eeb
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMain.Designer.cs
@@ -0,0 +1,76 @@
+namespace Sunny.UI.Demo
+{
+ partial class FHeaderAsideMain
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiLogo1 = new Sunny.UI.UILogo();
+ this.Header.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // Aside
+ //
+ this.Aside.LineColor = System.Drawing.Color.Black;
+ this.Aside.Size = new System.Drawing.Size(250, 575);
+ this.Aside.Style = Sunny.UI.UIStyle.Blue;
+ //
+ // Header
+ //
+ this.Header.Controls.Add(this.uiLogo1);
+ this.Header.Size = new System.Drawing.Size(1024, 110);
+ this.Header.Style = Sunny.UI.UIStyle.Blue;
+ //
+ // uiLogo1
+ //
+ this.uiLogo1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLogo1.Location = new System.Drawing.Point(15, 15);
+ this.uiLogo1.MaximumSize = new System.Drawing.Size(300, 80);
+ this.uiLogo1.MinimumSize = new System.Drawing.Size(300, 80);
+ this.uiLogo1.Name = "uiLogo1";
+ this.uiLogo1.Size = new System.Drawing.Size(300, 80);
+ this.uiLogo1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiLogo1.TabIndex = 1;
+ this.uiLogo1.Text = "uiLogo1";
+ //
+ // FHeaderAsideMain
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1024, 720);
+ this.Name = "FHeaderAsideMain";
+ this.Style = Sunny.UI.UIStyle.Blue;
+ this.Text = "FHeaderAsideMain";
+ this.Header.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UILogo uiLogo1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMain.cs b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMain.cs
new file mode 100644
index 00000000..96cfd4fe
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMain.cs
@@ -0,0 +1,26 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FHeaderAsideMain : UIHeaderAsideMainFrame
+ {
+ public FHeaderAsideMain()
+ {
+ InitializeComponent();
+
+ //设置关联
+ Aside.TabControl = MainTabControl;
+
+ //增加页面到Main
+ AddPage(new FTitlePage1(), 1001);
+ AddPage(new FTitlePage2(), 1002);
+ AddPage(new FTitlePage3(), 1003);
+
+ //设置Header节点索引
+ Aside.CreateNode("Page1", 1001);
+ Aside.CreateNode("Page2", 1002);
+ Aside.CreateNode("Page3", 1003);
+
+ //显示默认界面
+ Aside.SelectFirst();
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMain.resx b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMain.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMain.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMainFooter.Designer.cs b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMainFooter.Designer.cs
new file mode 100644
index 00000000..76b9dcfd
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMainFooter.Designer.cs
@@ -0,0 +1,83 @@
+namespace Sunny.UI.Demo
+{
+ partial class FHeaderAsideMainFooter
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiLogo1 = new Sunny.UI.UILogo();
+ this.Header.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // Footer
+ //
+ this.Footer.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181)))));
+ this.Footer.Location = new System.Drawing.Point(250, 664);
+ this.Footer.Size = new System.Drawing.Size(774, 56);
+ this.Footer.Style = Sunny.UI.UIStyle.Custom;
+ this.Footer.StyleCustomMode = true;
+ //
+ // Aside
+ //
+ this.Aside.Size = new System.Drawing.Size(250, 575);
+ this.Aside.Style = Sunny.UI.UIStyle.Blue;
+ this.Aside.MenuItemClick += new Sunny.UI.UINavMenu.OnMenuItemClick(this.Aside_MenuItemClick);
+ //
+ // Header
+ //
+ this.Header.Controls.Add(this.uiLogo1);
+ this.Header.Size = new System.Drawing.Size(1024, 110);
+ this.Header.Style = Sunny.UI.UIStyle.Blue;
+ //
+ // uiLogo1
+ //
+ this.uiLogo1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLogo1.Location = new System.Drawing.Point(15, 15);
+ this.uiLogo1.MaximumSize = new System.Drawing.Size(300, 80);
+ this.uiLogo1.MinimumSize = new System.Drawing.Size(300, 80);
+ this.uiLogo1.Name = "uiLogo1";
+ this.uiLogo1.Size = new System.Drawing.Size(300, 80);
+ this.uiLogo1.TabIndex = 2;
+ this.uiLogo1.Text = "uiLogo1";
+ //
+ // FHeaderAsideMainFooter
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1024, 720);
+ this.Name = "FHeaderAsideMainFooter";
+ this.Style = Sunny.UI.UIStyle.Blue;
+ this.Text = "FHeaderAsideMainFooter";
+ this.Header.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UILogo uiLogo1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMainFooter.cs b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMainFooter.cs
new file mode 100644
index 00000000..f3e5e058
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMainFooter.cs
@@ -0,0 +1,31 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FHeaderAsideMainFooter : UIHeaderAsideMainFooterFrame
+ {
+ public FHeaderAsideMainFooter()
+ {
+ InitializeComponent();
+
+ //设置关联
+ Aside.TabControl = MainTabControl;
+
+ //增加页面到Main
+ AddPage(new FTitlePage1(), 1001);
+ AddPage(new FTitlePage2(), 1002);
+ AddPage(new FTitlePage3(), 1003);
+
+ //设置Header节点索引
+ Aside.CreateNode("Page1", 1001);
+ Aside.CreateNode("Page2", 1002);
+ Aside.CreateNode("Page3", 1003);
+
+ //显示默认界面
+ Aside.SelectFirst();
+ }
+
+ private void Aside_MenuItemClick(System.Windows.Forms.TreeNode node, NavMenuItem item, int pageIndex)
+ {
+ Footer.Text = "PageIndex: " + pageIndex;
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMainFooter.resx b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMainFooter.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderAsideMainFooter.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMain.Designer.cs b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMain.Designer.cs
new file mode 100644
index 00000000..d06678a6
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMain.Designer.cs
@@ -0,0 +1,82 @@
+namespace Sunny.UI.Demo
+{
+ partial class FHeaderMain
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Page1");
+ System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Page2");
+ System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Page3");
+ this.uiLogo1 = new Sunny.UI.UILogo();
+ this.Header.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // Header
+ //
+ this.Header.Controls.Add(this.uiLogo1);
+ this.Header.Location = new System.Drawing.Point(0, 35);
+ treeNode1.Name = "节点0";
+ treeNode1.Text = "Page1";
+ treeNode2.Name = "节点1";
+ treeNode2.Text = "Page2";
+ treeNode3.Name = "节点2";
+ treeNode3.Text = "Page3";
+ this.Header.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+ treeNode1,
+ treeNode2,
+ treeNode3});
+ this.Header.Size = new System.Drawing.Size(1024, 110);
+ //
+ // uiLogo1
+ //
+ this.uiLogo1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLogo1.Location = new System.Drawing.Point(15, 15);
+ this.uiLogo1.MaximumSize = new System.Drawing.Size(300, 80);
+ this.uiLogo1.MinimumSize = new System.Drawing.Size(300, 80);
+ this.uiLogo1.Name = "uiLogo1";
+ this.uiLogo1.Size = new System.Drawing.Size(300, 80);
+ this.uiLogo1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiLogo1.TabIndex = 0;
+ this.uiLogo1.Text = "uiLogo1";
+ //
+ // FHeaderMain
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1024, 720);
+ this.Name = "FHeaderMain";
+ this.Text = "FHeaderMain";
+ this.Header.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UILogo uiLogo1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMain.cs b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMain.cs
new file mode 100644
index 00000000..2df5c0e9
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMain.cs
@@ -0,0 +1,26 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FHeaderMain : UIHeaderMainFrame
+ {
+ public FHeaderMain()
+ {
+ InitializeComponent();
+
+ //设置关联
+ Header.TabControl = MainTabControl;
+
+ //增加页面到Main
+ AddPage(new FTitlePage1(), 1001);
+ AddPage(new FTitlePage2(), 1002);
+ AddPage(new FTitlePage3(), 1003);
+
+ //设置Header节点索引
+ Header.SetNodePageIndex(Header.Nodes[0], 1001);
+ Header.SetNodePageIndex(Header.Nodes[1], 1002);
+ Header.SetNodePageIndex(Header.Nodes[2], 1003);
+
+ //显示默认界面
+ Header.SelectedIndex = 0;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMain.resx b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMain.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMain.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMainFooter.Designer.cs b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMainFooter.Designer.cs
new file mode 100644
index 00000000..f5a3f944
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMainFooter.Designer.cs
@@ -0,0 +1,77 @@
+namespace Sunny.UI.Demo
+{
+ partial class FHeaderMainFooter
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiLogo1 = new Sunny.UI.UILogo();
+ this.Header.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // Footer
+ //
+ this.Footer.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181)))));
+ this.Footer.Location = new System.Drawing.Point(0, 664);
+ this.Footer.Size = new System.Drawing.Size(1024, 56);
+ this.Footer.Style = Sunny.UI.UIStyle.Custom;
+ this.Footer.StyleCustomMode = true;
+ this.Footer.Text = "";
+ //
+ // Header
+ //
+ this.Header.Controls.Add(this.uiLogo1);
+ this.Header.Size = new System.Drawing.Size(1024, 110);
+ this.Header.MenuItemClick += new Sunny.UI.UINavBar.OnMenuItemClick(this.Header_MenuItemClick);
+ //
+ // uiLogo1
+ //
+ this.uiLogo1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLogo1.Location = new System.Drawing.Point(15, 15);
+ this.uiLogo1.MaximumSize = new System.Drawing.Size(300, 80);
+ this.uiLogo1.MinimumSize = new System.Drawing.Size(300, 80);
+ this.uiLogo1.Name = "uiLogo1";
+ this.uiLogo1.Size = new System.Drawing.Size(300, 80);
+ this.uiLogo1.TabIndex = 1;
+ this.uiLogo1.Text = "uiLogo1";
+ //
+ // FHeaderMainFooter
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1024, 720);
+ this.Name = "FHeaderMainFooter";
+ this.Text = "FHeaderMainFooter";
+ this.Header.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UILogo uiLogo1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMainFooter.cs b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMainFooter.cs
new file mode 100644
index 00000000..e508a71c
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMainFooter.cs
@@ -0,0 +1,31 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FHeaderMainFooter : UIHeaderMainFooterFrame
+ {
+ public FHeaderMainFooter()
+ {
+ InitializeComponent();
+
+ //设置关联
+ Header.TabControl = MainTabControl;
+
+ //增加页面到Main
+ AddPage(new FTitlePage1(), 1001);
+ AddPage(new FTitlePage2(), 1002);
+ AddPage(new FTitlePage3(), 1003);
+
+ //设置Header节点索引
+ Header.CreateNode("Page1", 1001);
+ Header.CreateNode("Page2", 1002);
+ Header.CreateNode("Page3", 1003);
+
+ //显示默认界面
+ Header.SelectedIndex = 0;
+ }
+
+ private void Header_MenuItemClick(string text, int menuIndex, int pageIndex)
+ {
+ Footer.Text = "PageIndex: " + pageIndex;
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMainFooter.resx b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMainFooter.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Frames/FHeaderMainFooter.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FPage1.Designer.cs b/SunnyUI.Net5.Demo/Forms/Pages/FPage1.Designer.cs
new file mode 100644
index 00000000..71b009b3
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FPage1.Designer.cs
@@ -0,0 +1,67 @@
+namespace Sunny.UI.Demo
+{
+ partial class FPage1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel();
+ this.SuspendLayout();
+ //
+ // uiSymbolLabel1
+ //
+ this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0);
+ this.uiSymbolLabel1.Name = "uiSymbolLabel1";
+ this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0);
+ this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 450);
+ this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiSymbolLabel1.StyleCustomMode = true;
+ this.uiSymbolLabel1.Symbol = 61530;
+ this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiSymbolLabel1.SymbolSize = 64;
+ this.uiSymbolLabel1.TabIndex = 0;
+ this.uiSymbolLabel1.Text = "This is Page1";
+ //
+ // FPage1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Controls.Add(this.uiSymbolLabel1);
+ this.Name = "FPage1";
+ this.Text = "FPage1";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UISymbolLabel uiSymbolLabel1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FPage1.cs b/SunnyUI.Net5.Demo/Forms/Pages/FPage1.cs
new file mode 100644
index 00000000..3ba5432d
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FPage1.cs
@@ -0,0 +1,10 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FPage1 : UIPage
+ {
+ public FPage1()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FPage1.resx b/SunnyUI.Net5.Demo/Forms/Pages/FPage1.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FPage1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FPage2.Designer.cs b/SunnyUI.Net5.Demo/Forms/Pages/FPage2.Designer.cs
new file mode 100644
index 00000000..3a66d1ba
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FPage2.Designer.cs
@@ -0,0 +1,67 @@
+namespace Sunny.UI.Demo
+{
+ partial class FPage2
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel();
+ this.SuspendLayout();
+ //
+ // uiSymbolLabel1
+ //
+ this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0);
+ this.uiSymbolLabel1.Name = "uiSymbolLabel1";
+ this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0);
+ this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 450);
+ this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiSymbolLabel1.StyleCustomMode = true;
+ this.uiSymbolLabel1.Symbol = 61528;
+ this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolLabel1.SymbolSize = 64;
+ this.uiSymbolLabel1.TabIndex = 1;
+ this.uiSymbolLabel1.Text = "This is Page2";
+ //
+ // FPage2
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Controls.Add(this.uiSymbolLabel1);
+ this.Name = "FPage2";
+ this.Text = "FPage2";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UISymbolLabel uiSymbolLabel1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FPage2.cs b/SunnyUI.Net5.Demo/Forms/Pages/FPage2.cs
new file mode 100644
index 00000000..0934075c
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FPage2.cs
@@ -0,0 +1,10 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FPage2 : UIPage
+ {
+ public FPage2()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FPage2.resx b/SunnyUI.Net5.Demo/Forms/Pages/FPage2.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FPage2.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FPage3.Designer.cs b/SunnyUI.Net5.Demo/Forms/Pages/FPage3.Designer.cs
new file mode 100644
index 00000000..eeef82a7
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FPage3.Designer.cs
@@ -0,0 +1,67 @@
+namespace Sunny.UI.Demo
+{
+ partial class FPage3
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel();
+ this.SuspendLayout();
+ //
+ // uiSymbolLabel1
+ //
+ this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0);
+ this.uiSymbolLabel1.Name = "uiSymbolLabel1";
+ this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0);
+ this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 450);
+ this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiSymbolLabel1.StyleCustomMode = true;
+ this.uiSymbolLabel1.Symbol = 61553;
+ this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolLabel1.SymbolSize = 64;
+ this.uiSymbolLabel1.TabIndex = 2;
+ this.uiSymbolLabel1.Text = "This is Page3";
+ //
+ // FPage3
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Controls.Add(this.uiSymbolLabel1);
+ this.Name = "FPage3";
+ this.Text = "FPage3";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UISymbolLabel uiSymbolLabel1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FPage3.cs b/SunnyUI.Net5.Demo/Forms/Pages/FPage3.cs
new file mode 100644
index 00000000..37850407
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FPage3.cs
@@ -0,0 +1,10 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FPage3 : UIPage
+ {
+ public FPage3()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FPage3.resx b/SunnyUI.Net5.Demo/Forms/Pages/FPage3.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FPage3.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage1.Designer.cs b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage1.Designer.cs
new file mode 100644
index 00000000..c4aa8dc0
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage1.Designer.cs
@@ -0,0 +1,72 @@
+namespace Sunny.UI.Demo
+{
+ partial class FTitlePage1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiSymbolLabel1);
+ //
+ // uiSymbolLabel1
+ //
+ this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0);
+ this.uiSymbolLabel1.Name = "uiSymbolLabel1";
+ this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0);
+ this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 415);
+ this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiSymbolLabel1.StyleCustomMode = true;
+ this.uiSymbolLabel1.Symbol = 61530;
+ this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
+ this.uiSymbolLabel1.SymbolSize = 64;
+ this.uiSymbolLabel1.TabIndex = 1;
+ this.uiSymbolLabel1.Text = "This is TitlePage1";
+ //
+ // FTitlePage1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "FTitlePage1";
+ this.Text = "FTitlePage1";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UISymbolLabel uiSymbolLabel1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage1.cs b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage1.cs
new file mode 100644
index 00000000..fe23f9ce
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage1.cs
@@ -0,0 +1,10 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FTitlePage1 : UITitlePage
+ {
+ public FTitlePage1()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage1.resx b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage1.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage2.Designer.cs b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage2.Designer.cs
new file mode 100644
index 00000000..07116113
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage2.Designer.cs
@@ -0,0 +1,72 @@
+namespace Sunny.UI.Demo
+{
+ partial class FTitlePage2
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiSymbolLabel1);
+ //
+ // uiSymbolLabel1
+ //
+ this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0);
+ this.uiSymbolLabel1.Name = "uiSymbolLabel1";
+ this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0);
+ this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 415);
+ this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiSymbolLabel1.StyleCustomMode = true;
+ this.uiSymbolLabel1.Symbol = 61528;
+ this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40)))));
+ this.uiSymbolLabel1.SymbolSize = 64;
+ this.uiSymbolLabel1.TabIndex = 2;
+ this.uiSymbolLabel1.Text = "This is TitlePage2";
+ //
+ // FTitlePage2
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "FTitlePage2";
+ this.Text = "FTitlePage2";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UISymbolLabel uiSymbolLabel1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage2.cs b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage2.cs
new file mode 100644
index 00000000..1d3a0d13
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage2.cs
@@ -0,0 +1,10 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FTitlePage2 : UITitlePage
+ {
+ public FTitlePage2()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage2.resx b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage2.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage2.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage3.Designer.cs b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage3.Designer.cs
new file mode 100644
index 00000000..78e09e33
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage3.Designer.cs
@@ -0,0 +1,72 @@
+namespace Sunny.UI.Demo
+{
+ partial class FTitlePage3
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel();
+ this.PagePanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // PagePanel
+ //
+ this.PagePanel.Controls.Add(this.uiSymbolLabel1);
+ //
+ // uiSymbolLabel1
+ //
+ this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0);
+ this.uiSymbolLabel1.Name = "uiSymbolLabel1";
+ this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0);
+ this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 415);
+ this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom;
+ this.uiSymbolLabel1.StyleCustomMode = true;
+ this.uiSymbolLabel1.Symbol = 61553;
+ this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40)))));
+ this.uiSymbolLabel1.SymbolSize = 64;
+ this.uiSymbolLabel1.TabIndex = 3;
+ this.uiSymbolLabel1.Text = "This is TitlePage3";
+ //
+ // FTitlePage3
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "FTitlePage3";
+ this.Text = "FTitlePage3";
+ this.PagePanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private UISymbolLabel uiSymbolLabel1;
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage3.cs b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage3.cs
new file mode 100644
index 00000000..84bb26da
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage3.cs
@@ -0,0 +1,10 @@
+namespace Sunny.UI.Demo
+{
+ public partial class FTitlePage3 : UITitlePage
+ {
+ public FTitlePage3()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage3.resx b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage3.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Forms/Pages/FTitlePage3.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Program.cs b/SunnyUI.Net5.Demo/Program.cs
new file mode 100644
index 00000000..2f1c3d9b
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Program.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Windows.Forms;
+
+namespace Sunny.UI.Demo
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.SetHighDpiMode(HighDpiMode.SystemAware);
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new FMain());
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Properties/Resources.Designer.cs b/SunnyUI.Net5.Demo/Properties/Resources.Designer.cs
new file mode 100644
index 00000000..abece634
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Properties/Resources.Designer.cs
@@ -0,0 +1,573 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace Sunny.UI.Demo.Properties {
+ using System;
+
+
+ ///
+ /// 一个强类型的资源类,用于查找本地化的字符串等。
+ ///
+ // 此类是由 StronglyTypedResourceBuilder
+ // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+ // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // (以 /str 作为命令选项),或重新生成 VS 项目。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 返回此类使用的缓存的 ResourceManager 实例。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Sunny.UI.Demo.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 重写当前线程的 CurrentUICulture 属性,对
+ /// 使用此强类型资源类的所有资源查找执行重写。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap AHM {
+ get {
+ object obj = ResourceManager.GetObject("AHM", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap AHM1 {
+ get {
+ object obj = ResourceManager.GetObject("AHM1", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap AHMF {
+ get {
+ object obj = ResourceManager.GetObject("AHMF", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap AHMF1 {
+ get {
+ object obj = ResourceManager.GetObject("AHMF1", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ajax {
+ get {
+ object obj = ResourceManager.GetObject("ajax", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap AM {
+ get {
+ object obj = ResourceManager.GetObject("AM", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap AM1 {
+ get {
+ object obj = ResourceManager.GetObject("AM1", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap atalanta {
+ get {
+ object obj = ResourceManager.GetObject("atalanta", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap barcelona {
+ get {
+ object obj = ResourceManager.GetObject("barcelona", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap benfica {
+ get {
+ object obj = ResourceManager.GetObject("benfica", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap betis {
+ get {
+ object obj = ResourceManager.GetObject("betis", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap brescia {
+ get {
+ object obj = ResourceManager.GetObject("brescia", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ChartDarkStyle {
+ get {
+ object obj = ResourceManager.GetObject("ChartDarkStyle", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ChartDefaultStyle {
+ get {
+ object obj = ResourceManager.GetObject("ChartDefaultStyle", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ChartPlainStyle {
+ get {
+ object obj = ResourceManager.GetObject("ChartPlainStyle", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap chievo {
+ get {
+ object obj = ResourceManager.GetObject("chievo", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap dashboard {
+ get {
+ object obj = ResourceManager.GetObject("dashboard", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap dashboard0 {
+ get {
+ object obj = ResourceManager.GetObject("dashboard0", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap deportivo {
+ get {
+ object obj = ResourceManager.GetObject("deportivo", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap feyenoord {
+ get {
+ object obj = ResourceManager.GetObject("feyenoord", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap HAM {
+ get {
+ object obj = ResourceManager.GetObject("HAM", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap HAM1 {
+ get {
+ object obj = ResourceManager.GetObject("HAM1", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap HAMF {
+ get {
+ object obj = ResourceManager.GetObject("HAMF", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap HAMF1 {
+ get {
+ object obj = ResourceManager.GetObject("HAMF1", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap heerenveen {
+ get {
+ object obj = ResourceManager.GetObject("heerenveen", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap HM {
+ get {
+ object obj = ResourceManager.GetObject("HM", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap HM1 {
+ get {
+ object obj = ResourceManager.GetObject("HM1", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap HMF {
+ get {
+ object obj = ResourceManager.GetObject("HMF", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap HMF1 {
+ get {
+ object obj = ResourceManager.GetObject("HMF1", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap inter {
+ get {
+ object obj = ResourceManager.GetObject("inter", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap lazio {
+ get {
+ object obj = ResourceManager.GetObject("lazio", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap mallorca {
+ get {
+ object obj = ResourceManager.GetObject("mallorca", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap milan {
+ get {
+ object obj = ResourceManager.GetObject("milan", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap parma {
+ get {
+ object obj = ResourceManager.GetObject("parma", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap porto {
+ get {
+ object obj = ResourceManager.GetObject("porto", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap psv {
+ get {
+ object obj = ResourceManager.GetObject("psv", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap real_madrid {
+ get {
+ object obj = ResourceManager.GetObject("real_madrid", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap real_sociedad {
+ get {
+ object obj = ResourceManager.GetObject("real_sociedad", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap relationship {
+ get {
+ object obj = ResourceManager.GetObject("relationship", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap relationship0 {
+ get {
+ object obj = ResourceManager.GetObject("relationship0", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap roma {
+ get {
+ object obj = ResourceManager.GetObject("roma", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap save {
+ get {
+ object obj = ResourceManager.GetObject("save", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap save0 {
+ get {
+ object obj = ResourceManager.GetObject("save0", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap sevilla {
+ get {
+ object obj = ResourceManager.GetObject("sevilla", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap SunnyLogin {
+ get {
+ object obj = ResourceManager.GetObject("SunnyLogin", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap SunnyUI {
+ get {
+ object obj = ResourceManager.GetObject("SunnyUI", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap SunnyUISmall {
+ get {
+ object obj = ResourceManager.GetObject("SunnyUISmall", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap udinese {
+ get {
+ object obj = ResourceManager.GetObject("udinese", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap valencia {
+ get {
+ object obj = ResourceManager.GetObject("valencia", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap villareal {
+ get {
+ object obj = ResourceManager.GetObject("villareal", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap zaragoza {
+ get {
+ object obj = ResourceManager.GetObject("zaragoza", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/SunnyUI.Net5.Demo/Properties/Resources.resx b/SunnyUI.Net5.Demo/Properties/Resources.resx
new file mode 100644
index 00000000..40d1d635
--- /dev/null
+++ b/SunnyUI.Net5.Demo/Properties/Resources.resx
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ ..\Resources\AHM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\AHM1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\AHMF.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\AHMF1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ajax.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\AM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\AM1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\atalanta.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\barcelona.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\benfica.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\betis.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\brescia.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ChartDarkStyle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ChartDefaultStyle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ChartPlainStyle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\chievo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\dashboard.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\dashboard0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\deportivo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\feyenoord.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\HAM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\HAM1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\HAMF.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\HAMF1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\heerenveen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\HM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\HM1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\HMF.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\HMF1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\inter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\lazio.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\mallorca.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\milan.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\parma.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\porto.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\psv.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\real_madrid.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\real_sociedad.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\relationship.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\relationship0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\roma.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\save0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\sevilla.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\SunnyLogin.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\SunnyUI.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\SunnyUISmall.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\udinese.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\valencia.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\villareal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\zaragoza.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/Resources/AHM.png b/SunnyUI.Net5.Demo/Resources/AHM.png
new file mode 100644
index 00000000..b1f6cd7e
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/AHM.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/AHM1.png b/SunnyUI.Net5.Demo/Resources/AHM1.png
new file mode 100644
index 00000000..9f23b541
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/AHM1.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/AHMF.png b/SunnyUI.Net5.Demo/Resources/AHMF.png
new file mode 100644
index 00000000..a6bed5f3
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/AHMF.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/AHMF1.png b/SunnyUI.Net5.Demo/Resources/AHMF1.png
new file mode 100644
index 00000000..c8163977
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/AHMF1.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/AM.png b/SunnyUI.Net5.Demo/Resources/AM.png
new file mode 100644
index 00000000..013a0ef7
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/AM.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/AM1.png b/SunnyUI.Net5.Demo/Resources/AM1.png
new file mode 100644
index 00000000..505bf960
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/AM1.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/ChartDarkStyle.png b/SunnyUI.Net5.Demo/Resources/ChartDarkStyle.png
new file mode 100644
index 00000000..9f79a944
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/ChartDarkStyle.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/ChartDefaultStyle.png b/SunnyUI.Net5.Demo/Resources/ChartDefaultStyle.png
new file mode 100644
index 00000000..99293d02
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/ChartDefaultStyle.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/ChartPlainStyle.png b/SunnyUI.Net5.Demo/Resources/ChartPlainStyle.png
new file mode 100644
index 00000000..eabd6882
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/ChartPlainStyle.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/HAM.png b/SunnyUI.Net5.Demo/Resources/HAM.png
new file mode 100644
index 00000000..5681c96c
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/HAM.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/HAM1.png b/SunnyUI.Net5.Demo/Resources/HAM1.png
new file mode 100644
index 00000000..2aa822c6
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/HAM1.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/HAMF.png b/SunnyUI.Net5.Demo/Resources/HAMF.png
new file mode 100644
index 00000000..c09e7535
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/HAMF.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/HAMF1.png b/SunnyUI.Net5.Demo/Resources/HAMF1.png
new file mode 100644
index 00000000..22a9687f
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/HAMF1.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/HM.png b/SunnyUI.Net5.Demo/Resources/HM.png
new file mode 100644
index 00000000..0285868b
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/HM.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/HM1.png b/SunnyUI.Net5.Demo/Resources/HM1.png
new file mode 100644
index 00000000..e814a474
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/HM1.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/HMF.png b/SunnyUI.Net5.Demo/Resources/HMF.png
new file mode 100644
index 00000000..9420be7c
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/HMF.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/HMF1.png b/SunnyUI.Net5.Demo/Resources/HMF1.png
new file mode 100644
index 00000000..054648ac
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/HMF1.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/SunnyLogin.png b/SunnyUI.Net5.Demo/Resources/SunnyLogin.png
new file mode 100644
index 00000000..ad42a9a1
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/SunnyLogin.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/SunnyUI.png b/SunnyUI.Net5.Demo/Resources/SunnyUI.png
new file mode 100644
index 00000000..187c7fb3
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/SunnyUI.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/SunnyUISmall.png b/SunnyUI.Net5.Demo/Resources/SunnyUISmall.png
new file mode 100644
index 00000000..32b7d149
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/SunnyUISmall.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/ajax.png b/SunnyUI.Net5.Demo/Resources/ajax.png
new file mode 100644
index 00000000..1f66f802
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/ajax.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/atalanta.png b/SunnyUI.Net5.Demo/Resources/atalanta.png
new file mode 100644
index 00000000..35396fa5
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/atalanta.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/barcelona.png b/SunnyUI.Net5.Demo/Resources/barcelona.png
new file mode 100644
index 00000000..1a0243fe
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/barcelona.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/benfica.png b/SunnyUI.Net5.Demo/Resources/benfica.png
new file mode 100644
index 00000000..e010bdf9
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/benfica.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/betis.png b/SunnyUI.Net5.Demo/Resources/betis.png
new file mode 100644
index 00000000..4b01300d
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/betis.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/brescia.png b/SunnyUI.Net5.Demo/Resources/brescia.png
new file mode 100644
index 00000000..5d431ab4
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/brescia.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/chievo.png b/SunnyUI.Net5.Demo/Resources/chievo.png
new file mode 100644
index 00000000..a1cbc5f0
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/chievo.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/dashboard.png b/SunnyUI.Net5.Demo/Resources/dashboard.png
new file mode 100644
index 00000000..98271cb0
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/dashboard.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/dashboard0.png b/SunnyUI.Net5.Demo/Resources/dashboard0.png
new file mode 100644
index 00000000..d8503bc2
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/dashboard0.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/deportivo.png b/SunnyUI.Net5.Demo/Resources/deportivo.png
new file mode 100644
index 00000000..11be0ca5
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/deportivo.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/feyenoord.png b/SunnyUI.Net5.Demo/Resources/feyenoord.png
new file mode 100644
index 00000000..43074722
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/feyenoord.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/heerenveen.png b/SunnyUI.Net5.Demo/Resources/heerenveen.png
new file mode 100644
index 00000000..4cc0936a
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/heerenveen.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/inter.png b/SunnyUI.Net5.Demo/Resources/inter.png
new file mode 100644
index 00000000..d34b5ece
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/inter.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/lazio.png b/SunnyUI.Net5.Demo/Resources/lazio.png
new file mode 100644
index 00000000..bcf5b6c9
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/lazio.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/mallorca.png b/SunnyUI.Net5.Demo/Resources/mallorca.png
new file mode 100644
index 00000000..7800645b
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/mallorca.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/milan.png b/SunnyUI.Net5.Demo/Resources/milan.png
new file mode 100644
index 00000000..9a899d8a
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/milan.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/parma.png b/SunnyUI.Net5.Demo/Resources/parma.png
new file mode 100644
index 00000000..771176e5
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/parma.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/porto.png b/SunnyUI.Net5.Demo/Resources/porto.png
new file mode 100644
index 00000000..16860b52
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/porto.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/psv.png b/SunnyUI.Net5.Demo/Resources/psv.png
new file mode 100644
index 00000000..74be4ade
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/psv.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/real_madrid.png b/SunnyUI.Net5.Demo/Resources/real_madrid.png
new file mode 100644
index 00000000..cc9482bc
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/real_madrid.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/real_sociedad.png b/SunnyUI.Net5.Demo/Resources/real_sociedad.png
new file mode 100644
index 00000000..396a4193
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/real_sociedad.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/relationship.png b/SunnyUI.Net5.Demo/Resources/relationship.png
new file mode 100644
index 00000000..cc4ddc6c
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/relationship.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/relationship0.png b/SunnyUI.Net5.Demo/Resources/relationship0.png
new file mode 100644
index 00000000..c178c79e
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/relationship0.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/roma.png b/SunnyUI.Net5.Demo/Resources/roma.png
new file mode 100644
index 00000000..8b33b6a7
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/roma.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/save.png b/SunnyUI.Net5.Demo/Resources/save.png
new file mode 100644
index 00000000..b87ae17f
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/save.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/save0.png b/SunnyUI.Net5.Demo/Resources/save0.png
new file mode 100644
index 00000000..445b1085
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/save0.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/sevilla.png b/SunnyUI.Net5.Demo/Resources/sevilla.png
new file mode 100644
index 00000000..06519470
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/sevilla.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/udinese.png b/SunnyUI.Net5.Demo/Resources/udinese.png
new file mode 100644
index 00000000..e5810ff7
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/udinese.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/valencia.png b/SunnyUI.Net5.Demo/Resources/valencia.png
new file mode 100644
index 00000000..595db0ab
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/valencia.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/villareal.png b/SunnyUI.Net5.Demo/Resources/villareal.png
new file mode 100644
index 00000000..1f3b347a
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/villareal.png differ
diff --git a/SunnyUI.Net5.Demo/Resources/zaragoza.png b/SunnyUI.Net5.Demo/Resources/zaragoza.png
new file mode 100644
index 00000000..b2eb3a41
Binary files /dev/null and b/SunnyUI.Net5.Demo/Resources/zaragoza.png differ
diff --git a/SunnyUI.Net5.Demo/SunnyUI.Net5.Demo.csproj b/SunnyUI.Net5.Demo/SunnyUI.Net5.Demo.csproj
new file mode 100644
index 00000000..6cb8d662
--- /dev/null
+++ b/SunnyUI.Net5.Demo/SunnyUI.Net5.Demo.csproj
@@ -0,0 +1,45 @@
+
+
+
+ WinExe
+ net5.0-windows
+ true
+ Sunny.UI.Demo
+ SunnyUI.ico
+ 3.0.0.0
+ 3.0.0.0
+ 3.0.0
+ SunnyUI
+ SunnyUI.Net
+ Copyright ©SunnyUI.Net 2012-2021
+ https://gitee.com/yhuse/SunnyUI
+
+
+
+ ..\Bin\net5.0-demo
+
+
+
+ ..\Bin\net5.0-demo
+
+
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
\ No newline at end of file
diff --git a/SunnyUI.Net5.Demo/SunnyUI.ico b/SunnyUI.Net5.Demo/SunnyUI.ico
new file mode 100644
index 00000000..826f6177
Binary files /dev/null and b/SunnyUI.Net5.Demo/SunnyUI.ico differ
diff --git a/SunnyUI.png b/SunnyUI.png
new file mode 100644
index 00000000..8aebfacb
Binary files /dev/null and b/SunnyUI.png differ
diff --git a/SunnyUI.sln b/SunnyUI.sln
index 00447970..87e75e3c 100644
--- a/SunnyUI.sln
+++ b/SunnyUI.sln
@@ -1,14 +1,13 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
-VisualStudioVersion = 16.0.29201.188
+VisualStudioVersion = 16.0.30804.86
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SunnyUI", "SunnyUI\SunnyUI.csproj", "{AB1CB247-E20B-4CBE-B269-570ADDD96C53}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SunnyUI", "SunnyUI\SunnyUI.csproj", "{AB1CB247-E20B-4CBE-B269-570ADDD96C53}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SunnyUI.Demo", "SunnyUI.Demo\SunnyUI.Demo.csproj", "{17F96B36-7CAE-4692-8B1F-B802482ECD09}"
- ProjectSection(ProjectDependencies) = postProject
- {AB1CB247-E20B-4CBE-B269-570ADDD96C53} = {AB1CB247-E20B-4CBE-B269-570ADDD96C53}
- EndProjectSection
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SunnyUI.Demo", "SunnyUI.Demo\SunnyUI.Demo.csproj", "{6AE19B87-C2AA-4C56-BC26-1C343F30FF58}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SunnyUI.Net5.Demo", "SunnyUI.Net5.Demo\SunnyUI.Net5.Demo.csproj", "{CD5517A6-D0A1-4758-9D18-B4189C5157F5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -20,15 +19,19 @@ Global
{AB1CB247-E20B-4CBE-B269-570ADDD96C53}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AB1CB247-E20B-4CBE-B269-570ADDD96C53}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AB1CB247-E20B-4CBE-B269-570ADDD96C53}.Release|Any CPU.Build.0 = Release|Any CPU
- {17F96B36-7CAE-4692-8B1F-B802482ECD09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {17F96B36-7CAE-4692-8B1F-B802482ECD09}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {17F96B36-7CAE-4692-8B1F-B802482ECD09}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {17F96B36-7CAE-4692-8B1F-B802482ECD09}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6AE19B87-C2AA-4C56-BC26-1C343F30FF58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6AE19B87-C2AA-4C56-BC26-1C343F30FF58}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6AE19B87-C2AA-4C56-BC26-1C343F30FF58}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6AE19B87-C2AA-4C56-BC26-1C343F30FF58}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CD5517A6-D0A1-4758-9D18-B4189C5157F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CD5517A6-D0A1-4758-9D18-B4189C5157F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CD5517A6-D0A1-4758-9D18-B4189C5157F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CD5517A6-D0A1-4758-9D18-B4189C5157F5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {F0698DDC-7858-40F2-8BCA-9DA655EBF385}
+ SolutionGuid = {6A916817-9F8C-4A1B-87CA-7DFD5453C40A}
EndGlobalSection
EndGlobal
diff --git a/SunnyUI/Charts/UIBarChart.cs b/SunnyUI/Charts/UIBarChart.cs
index 50b28f7b..5f0cfa54 100644
--- a/SunnyUI/Charts/UIBarChart.cs
+++ b/SunnyUI/Charts/UIBarChart.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIBarChart.cs
* 文件说明: 柱状图
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-06-06
*
* 2020-06-06: V2.2.5 增加文件说明
diff --git a/SunnyUI/Charts/UIBarChartEx.cs b/SunnyUI/Charts/UIBarChartEx.cs
index ec3213bc..8fde6f2b 100644
--- a/SunnyUI/Charts/UIBarChartEx.cs
+++ b/SunnyUI/Charts/UIBarChartEx.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIBarChartEx.cs
* 文件说明: 柱状图
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-09-26
*
* 2020-09-26: V2.2.8 增加文件说明
diff --git a/SunnyUI/Charts/UIBarChartOption.cs b/SunnyUI/Charts/UIBarChartOption.cs
index 2075abe3..be17c556 100644
--- a/SunnyUI/Charts/UIBarChartOption.cs
+++ b/SunnyUI/Charts/UIBarChartOption.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIBarChartOption.cs
* 文件说明: 柱状图配置类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-06-06
*
* 2020-06-06: V2.2.5 增加文件说明
diff --git a/SunnyUI/Charts/UIChart.cs b/SunnyUI/Charts/UIChart.cs
index 54aa05d6..6aa96b34 100644
--- a/SunnyUI/Charts/UIChart.cs
+++ b/SunnyUI/Charts/UIChart.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIChart.cs
* 文件说明: 图表基类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-06-06
*
* 2020-06-06: V2.2.5 增加文件说明
diff --git a/SunnyUI/Charts/UIChartStyle.cs b/SunnyUI/Charts/UIChartStyle.cs
index f4d1a673..63ed092e 100644
--- a/SunnyUI/Charts/UIChartStyle.cs
+++ b/SunnyUI/Charts/UIChartStyle.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIChartStyle.cs
* 文件说明: 图表主题类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-06-06
*
* 2020-06-06: V2.2.5 增加文件说明
diff --git a/SunnyUI/Charts/UIDoughnutChart.cs b/SunnyUI/Charts/UIDoughnutChart.cs
index 3f906bcb..3025b292 100644
--- a/SunnyUI/Charts/UIDoughnutChart.cs
+++ b/SunnyUI/Charts/UIDoughnutChart.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDoughnutChart.cs
* 文件说明: 甜甜圈图
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-06-06
*
* 2020-06-06: V2.2.5 增加文件说明
diff --git a/SunnyUI/Charts/UILineChart.cs b/SunnyUI/Charts/UILineChart.cs
index 021751df..dee536cb 100644
--- a/SunnyUI/Charts/UILineChart.cs
+++ b/SunnyUI/Charts/UILineChart.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UILineChart.cs
* 文件说明: 曲线图
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-10-01
*
* 2020-10-01: V2.2.8 完成曲线图表
diff --git a/SunnyUI/Charts/UILineChartOption.cs b/SunnyUI/Charts/UILineChartOption.cs
index 2602c95e..329fed4e 100644
--- a/SunnyUI/Charts/UILineChartOption.cs
+++ b/SunnyUI/Charts/UILineChartOption.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UILineChartOption.cs
* 文件说明: 曲线图设置类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-10-01
*
* 2020-10-01: V2.2.8 完成曲线图表设置类
diff --git a/SunnyUI/Charts/UIOption.cs b/SunnyUI/Charts/UIOption.cs
index 0b03edb1..a342d112 100644
--- a/SunnyUI/Charts/UIOption.cs
+++ b/SunnyUI/Charts/UIOption.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIOption.cs
* 文件说明: 图表设置类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-06-06
*
* 2020-06-06: V2.2.5 增加文件说明
diff --git a/SunnyUI/Charts/UIPieChart.cs b/SunnyUI/Charts/UIPieChart.cs
index bee7858f..55aaf6cb 100644
--- a/SunnyUI/Charts/UIPieChart.cs
+++ b/SunnyUI/Charts/UIPieChart.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIPieChart.cs
* 文件说明: 饼状图
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-06-06
*
* 2020-06-06: V2.2.5 增加文件说明
diff --git a/SunnyUI/Charts/UIPieChartOption.cs b/SunnyUI/Charts/UIPieChartOption.cs
index 74e49d24..f61a1564 100644
--- a/SunnyUI/Charts/UIPieChartOption.cs
+++ b/SunnyUI/Charts/UIPieChartOption.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIPieChartOption.cs
* 文件说明: 饼状图配置类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-06-06
*
* 2020-06-06: V2.2.5 增加文件说明
diff --git a/SunnyUI/Charts/UIScale.cs b/SunnyUI/Charts/UIScale.cs
index 73a05104..dd5c1d67 100644
--- a/SunnyUI/Charts/UIScale.cs
+++ b/SunnyUI/Charts/UIScale.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIScale.cs
* 文件说明: 坐标轴刻度计算类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-10-01
*
* 2020-10-01: V2.2.8 完成曲线图表坐标轴刻度计算类
@@ -356,39 +356,70 @@ namespace Sunny.UI
{
default:
if (direction == 1 && month == 1 && day == 1 && hour == 0 && minute == 0 && second == 0)
+ {
return date;
+ }
else
- return new DateTimeInt64(new DateTime(year + direction, 1, 1, 0, 0, 0)).DoubleValue;
+ {
+ DateTime dt = new DateTime(year, 1, 1, 0, 0, 0);
+ return new DateTimeInt64(dt.AddYears(direction)).DoubleValue;
+ }
case UIDateScaleLevel.Month:
if (direction == 1 && day == 1 && hour == 0 && minute == 0 && second == 0)
+ {
return date;
+ }
else
- return new DateTimeInt64(new DateTime(year, month + direction, 1, 0, 0, 0)).DoubleValue;
+ {
+ DateTime dt = new DateTime(year, month, 1, 0, 0, 0);
+ return new DateTimeInt64(dt.AddMonths(direction)).DoubleValue;
+ }
case UIDateScaleLevel.Day:
if (direction == 1 && hour == 0 && minute == 0 && second == 0)
+ {
return date;
+ }
else
- return new DateTimeInt64(new DateTime(year, month, day + direction, 0, 0, 0)).DoubleValue;
+ {
+ DateTime dt = new DateTime(year, month, day, 0, 0, 0);
+ return new DateTimeInt64(dt.AddDays(direction)).DoubleValue;
+ }
case UIDateScaleLevel.Hour:
if (direction == 1 && minute == 0 && second == 0)
+ {
return date;
+ }
else
- return new DateTimeInt64(new DateTime(year, month, day, hour + direction, 0, 0)).DoubleValue;
+ {
+ DateTime dt = new DateTime(year, month, day, hour, 0, 0);
+ return new DateTimeInt64(dt.AddHours(direction)).DoubleValue;
+ }
case UIDateScaleLevel.Minute:
if (direction == 1 && second == 0)
+ {
return date;
+ }
else
- return new DateTimeInt64(new DateTime(year, month, day, hour, minute + direction, 0)).DoubleValue;
+ {
+ DateTime dt = new DateTime(year, month, day, hour, minute, 0);
+ return new DateTimeInt64(dt.AddMinutes(direction)).DoubleValue;
+ }
case UIDateScaleLevel.Second:
- return new DateTimeInt64(new DateTime(year, month, day, hour, minute, second + direction)).DoubleValue;
+ {
+ DateTime dt = new DateTime(year, month, day, hour, minute, second);
+ return new DateTimeInt64(dt.AddSeconds(direction)).DoubleValue;
+ }
case UIDateScaleLevel.Millisecond:
- return new DateTimeInt64(new DateTime(year, month, day, hour, minute, second, millisecond + direction)).DoubleValue;
+ {
+ DateTime dt = new DateTime(year, month, day, hour, minute, second, millisecond);
+ return new DateTimeInt64(dt.AddMilliseconds(direction)).DoubleValue;
+ }
}
}
diff --git a/SunnyUI/Controls/DropItem/UIComboBoxItem.cs b/SunnyUI/Controls/DropItem/UIComboBoxItem.cs
index 382507a2..3d26a1a8 100644
--- a/SunnyUI/Controls/DropItem/UIComboBoxItem.cs
+++ b/SunnyUI/Controls/DropItem/UIComboBoxItem.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIComboBoxItem.cs
* 文件说明: 组合框弹出窗体
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/DropItem/UIDateItem.cs b/SunnyUI/Controls/DropItem/UIDateItem.cs
index 86b671df..8d714100 100644
--- a/SunnyUI/Controls/DropItem/UIDateItem.cs
+++ b/SunnyUI/Controls/DropItem/UIDateItem.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDateItem.cs
* 文件说明: 日期选择框弹出窗体
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/DropItem/UIDateTimeItem.cs b/SunnyUI/Controls/DropItem/UIDateTimeItem.cs
index 8a7b1545..daacf80c 100644
--- a/SunnyUI/Controls/DropItem/UIDateTimeItem.cs
+++ b/SunnyUI/Controls/DropItem/UIDateTimeItem.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDateTimeItem.cs
* 文件说明: 日期选择框弹出窗体
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/DropItem/UIDateTimeItem.resx b/SunnyUI/Controls/DropItem/UIDateTimeItem.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI/Controls/DropItem/UIDateTimeItem.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI/Controls/DropItem/UIDropControl.cs b/SunnyUI/Controls/DropItem/UIDropControl.cs
index 2ba512a9..15113c7e 100644
--- a/SunnyUI/Controls/DropItem/UIDropControl.cs
+++ b/SunnyUI/Controls/DropItem/UIDropControl.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDropControl.cs
* 文件说明: 下拉框基类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/DropItem/UIDropDown.cs b/SunnyUI/Controls/DropItem/UIDropDown.cs
index abcf1581..f2b62667 100644
--- a/SunnyUI/Controls/DropItem/UIDropDown.cs
+++ b/SunnyUI/Controls/DropItem/UIDropDown.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDropDown.cs
* 文件说明: 下拉框弹出窗体控制类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/DropItem/UIDropDownItem.cs b/SunnyUI/Controls/DropItem/UIDropDownItem.cs
index 667435cd..cb3cc8ad 100644
--- a/SunnyUI/Controls/DropItem/UIDropDownItem.cs
+++ b/SunnyUI/Controls/DropItem/UIDropDownItem.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDropDownItem.cs
* 文件说明: 下拉框弹出窗体基类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/DropItem/UITimeItem.cs b/SunnyUI/Controls/DropItem/UITimeItem.cs
index ecfd799a..975f7778 100644
--- a/SunnyUI/Controls/DropItem/UITimeItem.cs
+++ b/SunnyUI/Controls/DropItem/UITimeItem.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDateTimeItem.cs
* 文件说明: 时间选择框弹出窗体
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-29
*
* 2020-05-29: V2.2.5 创建
diff --git a/SunnyUI/Controls/TypeEditor/UIDropEditor.cs b/SunnyUI/Controls/TypeEditor/UIDropEditor.cs
index 7a72bf17..1414c2b4 100644
--- a/SunnyUI/Controls/TypeEditor/UIDropEditor.cs
+++ b/SunnyUI/Controls/TypeEditor/UIDropEditor.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDropEditor.cs
* 文件说明: 控件属性编辑面板基类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/TypeEditor/UIRadiusSidesEditor.cs b/SunnyUI/Controls/TypeEditor/UIRadiusSidesEditor.cs
index 76746590..afa0a1a7 100644
--- a/SunnyUI/Controls/TypeEditor/UIRadiusSidesEditor.cs
+++ b/SunnyUI/Controls/TypeEditor/UIRadiusSidesEditor.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIRadiusSidesEditor.cs
* 文件说明: 边框属性类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIAvatar.cs b/SunnyUI/Controls/UIAvatar.cs
index 236c9e36..902884fb 100644
--- a/SunnyUI/Controls/UIAvatar.cs
+++ b/SunnyUI/Controls/UIAvatar.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIAvatar.cs
* 文件说明: 头像
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIBattery.cs b/SunnyUI/Controls/UIBattery.cs
index e22786a7..84458d0b 100644
--- a/SunnyUI/Controls/UIBattery.cs
+++ b/SunnyUI/Controls/UIBattery.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIBattery.cs
* 文件说明: 电池电量图标
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-06-04
*
* 2020-06-04: V2.2.5 增加文件
diff --git a/SunnyUI/Controls/UIButton.cs b/SunnyUI/Controls/UIButton.cs
index 2edb88b4..1b5f0277 100644
--- a/SunnyUI/Controls/UIButton.cs
+++ b/SunnyUI/Controls/UIButton.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIButton.cs
* 文件说明: 按钮
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UICheckBox.cs b/SunnyUI/Controls/UICheckBox.cs
index 37ce10d1..999eba5e 100644
--- a/SunnyUI/Controls/UICheckBox.cs
+++ b/SunnyUI/Controls/UICheckBox.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UICheckBox.cs
* 文件说明: 复选框
-* 当前版本: V2.2
+* 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UICheckBoxGroup.cs b/SunnyUI/Controls/UICheckBoxGroup.cs
index dde717f4..a5fd785f 100644
--- a/SunnyUI/Controls/UICheckBoxGroup.cs
+++ b/SunnyUI/Controls/UICheckBoxGroup.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UICheckBoxGroup.cs
* 文件说明: 多选框组
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-04-19: V2.2.3 增加单元
diff --git a/SunnyUI/Controls/UIColorPicker.cs b/SunnyUI/Controls/UIColorPicker.cs
index 88a9f689..3d237312 100644
--- a/SunnyUI/Controls/UIColorPicker.cs
+++ b/SunnyUI/Controls/UIColorPicker.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDatePicker.cs
* 文件说明: 颜色选择框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-29
*
* 2020-05-31: V2.2.5 增加文件
diff --git a/SunnyUI/Controls/UIComboBox.cs b/SunnyUI/Controls/UIComboBox.cs
index cf994152..87c08d7a 100644
--- a/SunnyUI/Controls/UIComboBox.cs
+++ b/SunnyUI/Controls/UIComboBox.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIComboBox.cs
* 文件说明: 组合框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIContextMenuStrip.cs b/SunnyUI/Controls/UIContextMenuStrip.cs
index dcef740c..75007b42 100644
--- a/SunnyUI/Controls/UIContextMenuStrip.cs
+++ b/SunnyUI/Controls/UIContextMenuStrip.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIContextMenuStrip.cs
* 文件说明: 上下文菜单
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIControl.cs b/SunnyUI/Controls/UIControl.cs
index 3794a862..da46f7b4 100644
--- a/SunnyUI/Controls/UIControl.cs
+++ b/SunnyUI/Controls/UIControl.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIControl.cs
* 文件说明: 控件基类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIDataGridView.cs b/SunnyUI/Controls/UIDataGridView.cs
index 07fbb79b..39dcb0c5 100644
--- a/SunnyUI/Controls/UIDataGridView.cs
+++ b/SunnyUI/Controls/UIDataGridView.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIGrid.cs
* 文件说明: 表格
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIDatePicker.cs b/SunnyUI/Controls/UIDatePicker.cs
index ab14f9fb..21b5162a 100644
--- a/SunnyUI/Controls/UIDatePicker.cs
+++ b/SunnyUI/Controls/UIDatePicker.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDatePicker.cs
* 文件说明: 日期选择框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIDatePicker.resx b/SunnyUI/Controls/UIDatePicker.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/SunnyUI/Controls/UIDatePicker.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SunnyUI/Controls/UIDateTimePicker.cs b/SunnyUI/Controls/UIDateTimePicker.cs
index 94d0a7ae..252c8f4c 100644
--- a/SunnyUI/Controls/UIDateTimePicker.cs
+++ b/SunnyUI/Controls/UIDateTimePicker.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDatetimePicker.cs
* 文件说明: 日期时间选择框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIDoubleUpDown.cs b/SunnyUI/Controls/UIDoubleUpDown.cs
index 19f5b26d..8c07330f 100644
--- a/SunnyUI/Controls/UIDoubleUpDown.cs
+++ b/SunnyUI/Controls/UIDoubleUpDown.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDoubleUpDown.cs
* 文件说明: 数字上下选择框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIEdit.cs b/SunnyUI/Controls/UIEdit.cs
index 175c30af..4a9843c3 100644
--- a/SunnyUI/Controls/UIEdit.cs
+++ b/SunnyUI/Controls/UIEdit.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIEdit.cs
* 文件说明: 文本输入框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIFlowLayoutPanel.cs b/SunnyUI/Controls/UIFlowLayoutPanel.cs
index edde88de..eb39020a 100644
--- a/SunnyUI/Controls/UIFlowLayoutPanel.cs
+++ b/SunnyUI/Controls/UIFlowLayoutPanel.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIFlowLayoutPanel.cs
* 文件说明: FlowLayoutPanel
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-09-29
*
* 2020-09-29: V2.2.8 增加文件说明
diff --git a/SunnyUI/Controls/UIGlobal.cs b/SunnyUI/Controls/UIGlobal.cs
index 73b2c83b..e4245352 100644
--- a/SunnyUI/Controls/UIGlobal.cs
+++ b/SunnyUI/Controls/UIGlobal.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIGlobal.cs
* 文件说明: 全局参数类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIGroupBox.cs b/SunnyUI/Controls/UIGroupBox.cs
index a70e4959..98244596 100644
--- a/SunnyUI/Controls/UIGroupBox.cs
+++ b/SunnyUI/Controls/UIGroupBox.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIGroupBox.cs
* 文件说明: 组框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIHorScrollBar.cs b/SunnyUI/Controls/UIHorScrollBar.cs
index e996e842..b8f0fb44 100644
--- a/SunnyUI/Controls/UIHorScrollBar.cs
+++ b/SunnyUI/Controls/UIHorScrollBar.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIHorScrollBar.cs
* 文件说明: 水平滚动条
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-07-18: V2.2.6 新增水平滚动条
diff --git a/SunnyUI/Controls/UIHorScrollBarEx.cs b/SunnyUI/Controls/UIHorScrollBarEx.cs
index f76a695a..e394ee5c 100644
--- a/SunnyUI/Controls/UIHorScrollBarEx.cs
+++ b/SunnyUI/Controls/UIHorScrollBarEx.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIHorScrollBarEx.cs
* 文件说明: 水平滚动条
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-08-29
*
* 2020-08-29: V2.2.7 新增水平滚动条
diff --git a/SunnyUI/Controls/UIImageButton.cs b/SunnyUI/Controls/UIImageButton.cs
index 24c12cc2..ade8073f 100644
--- a/SunnyUI/Controls/UIImageButton.cs
+++ b/SunnyUI/Controls/UIImageButton.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIImageButton.cs
* 文件说明: 图像按钮
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIImageListBox.cs b/SunnyUI/Controls/UIImageListBox.cs
index 1461764d..711f956f 100644
--- a/SunnyUI/Controls/UIImageListBox.cs
+++ b/SunnyUI/Controls/UIImageListBox.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIImageListBox.cs
* 文件说明: 图片列表框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIIntegerUpDown.cs b/SunnyUI/Controls/UIIntegerUpDown.cs
index 4eb0105e..bd01b31b 100644
--- a/SunnyUI/Controls/UIIntegerUpDown.cs
+++ b/SunnyUI/Controls/UIIntegerUpDown.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIIntegerUpDown.cs
* 文件说明: 数字上下选择框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UILabel.cs b/SunnyUI/Controls/UILabel.cs
index 28c8a473..a56fa225 100644
--- a/SunnyUI/Controls/UILabel.cs
+++ b/SunnyUI/Controls/UILabel.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UILabel.cs
* 文件说明: 标签
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UILedDisplay.cs b/SunnyUI/Controls/UILedDisplay.cs
index e04b40d4..de6501d8 100644
--- a/SunnyUI/Controls/UILedDisplay.cs
+++ b/SunnyUI/Controls/UILedDisplay.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UILedDisplay.cs
* 文件说明: LED 显示器
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UILedStopwatch.cs b/SunnyUI/Controls/UILedStopwatch.cs
index 0d27b991..871909bc 100644
--- a/SunnyUI/Controls/UILedStopwatch.cs
+++ b/SunnyUI/Controls/UILedStopwatch.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UILedStopwatch.cs
* 文件说明: LED 时钟
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UILight.cs b/SunnyUI/Controls/UILight.cs
index 62ef8ead..0805c14a 100644
--- a/SunnyUI/Controls/UILight.cs
+++ b/SunnyUI/Controls/UILight.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UILight.cs
* 文件说明: 提示灯
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UILine.cs b/SunnyUI/Controls/UILine.cs
index 3c4764e4..ef6a20e4 100644
--- a/SunnyUI/Controls/UILine.cs
+++ b/SunnyUI/Controls/UILine.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UILine.cs
* 文件说明: 分割线
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIListBox.cs b/SunnyUI/Controls/UIListBox.cs
index dafa6002..b3fad8f4 100644
--- a/SunnyUI/Controls/UIListBox.cs
+++ b/SunnyUI/Controls/UIListBox.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIListBox.cs
* 文件说明: 列表框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UILogo.cs b/SunnyUI/Controls/UILogo.cs
index d76dca82..82e7c7da 100644
--- a/SunnyUI/Controls/UILogo.cs
+++ b/SunnyUI/Controls/UILogo.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UILogo.cs
* 文件说明: SunnyUI LOGO
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UINavBar.cs b/SunnyUI/Controls/UINavBar.cs
index 7c05543e..c74d473e 100644
--- a/SunnyUI/Controls/UINavBar.cs
+++ b/SunnyUI/Controls/UINavBar.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UINavBar.cs
* 文件说明: 导航栏
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UINavMenu.cs b/SunnyUI/Controls/UINavMenu.cs
index 8601594c..5b9cf98e 100644
--- a/SunnyUI/Controls/UINavMenu.cs
+++ b/SunnyUI/Controls/UINavMenu.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UINavMenu.cs
* 文件说明: 导航菜单
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UINavMenuHelper.cs b/SunnyUI/Controls/UINavMenuHelper.cs
index e42c81ca..e94810bb 100644
--- a/SunnyUI/Controls/UINavMenuHelper.cs
+++ b/SunnyUI/Controls/UINavMenuHelper.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UINavMenuHelper.cs
* 文件说明: 导航菜单帮助类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIPagination.cs b/SunnyUI/Controls/UIPagination.cs
index 50a622a3..638dcc21 100644
--- a/SunnyUI/Controls/UIPagination.cs
+++ b/SunnyUI/Controls/UIPagination.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIPagination.cs
* 文件说明: 分页
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-07-26
*
* 2020-07-15: V2.2.6 新增分页控件
diff --git a/SunnyUI/Controls/UIPanel.cs b/SunnyUI/Controls/UIPanel.cs
index 6ea3c8e2..e2e2086b 100644
--- a/SunnyUI/Controls/UIPanel.cs
+++ b/SunnyUI/Controls/UIPanel.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIPanel.cs
* 文件说明: 面板
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIProcessBar.cs b/SunnyUI/Controls/UIProcessBar.cs
index 11dfdb95..8c86b13d 100644
--- a/SunnyUI/Controls/UIProcessBar.cs
+++ b/SunnyUI/Controls/UIProcessBar.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIProcessBar.cs
* 文件说明: 进度条
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIProgressIndicator.cs b/SunnyUI/Controls/UIProgressIndicator.cs
index 9583f48e..9aaf6cfc 100644
--- a/SunnyUI/Controls/UIProgressIndicator.cs
+++ b/SunnyUI/Controls/UIProgressIndicator.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIProgressIndicator.cs
* 文件说明: 进度指示器
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIRadioButton.cs b/SunnyUI/Controls/UIRadioButton.cs
index 4e1186bb..36bfa1fb 100644
--- a/SunnyUI/Controls/UIRadioButton.cs
+++ b/SunnyUI/Controls/UIRadioButton.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIRadioButton.cs
* 文件说明: 单选框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIRadioButtonGroup.cs b/SunnyUI/Controls/UIRadioButtonGroup.cs
index 11d8ad2b..e64c2e41 100644
--- a/SunnyUI/Controls/UIRadioButtonGroup.cs
+++ b/SunnyUI/Controls/UIRadioButtonGroup.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UICheckBoxGroup.cs
* 文件说明: 单选框组
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-04-19: V2.2.3 增加单元
diff --git a/SunnyUI/Controls/UIRoundMeter.cs b/SunnyUI/Controls/UIRoundMeter.cs
index 25cfb70c..555204ce 100644
--- a/SunnyUI/Controls/UIRoundMeter.cs
+++ b/SunnyUI/Controls/UIRoundMeter.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIRoundMeter.cs
* 文件说明: 圆形图表
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIScrollBar.cs b/SunnyUI/Controls/UIScrollBar.cs
index 5af45040..8aec403b 100644
--- a/SunnyUI/Controls/UIScrollBar.cs
+++ b/SunnyUI/Controls/UIScrollBar.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIScrollBar.cs
* 文件说明: 滚动条
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIScrollingText.cs b/SunnyUI/Controls/UIScrollingText.cs
index 24fccae5..0f853859 100644
--- a/SunnyUI/Controls/UIScrollingText.cs
+++ b/SunnyUI/Controls/UIScrollingText.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIScrollingText.cs
* 文件说明: 滚动文字
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-06-29
*
* 2020-06-29: V2.2.6 新增控件
diff --git a/SunnyUI/Controls/UISwitch.cs b/SunnyUI/Controls/UISwitch.cs
index 80f75c1e..8d2c77d5 100644
--- a/SunnyUI/Controls/UISwitch.cs
+++ b/SunnyUI/Controls/UISwitch.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UISwitch.cs
* 文件说明: 开关
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UISymbolButton.cs b/SunnyUI/Controls/UISymbolButton.cs
index ed54d99f..19fb8e8b 100644
--- a/SunnyUI/Controls/UISymbolButton.cs
+++ b/SunnyUI/Controls/UISymbolButton.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UISymbolButton.cs
* 文件说明: 字体图标按钮
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UITabControl.cs b/SunnyUI/Controls/UITabControl.cs
index eeed11ff..693a85ee 100644
--- a/SunnyUI/Controls/UITabControl.cs
+++ b/SunnyUI/Controls/UITabControl.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UITabControl.cs
* 文件说明: 标签控件
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UITabControlMenu.cs b/SunnyUI/Controls/UITabControlMenu.cs
index 723e1766..882e2ba6 100644
--- a/SunnyUI/Controls/UITabControlMenu.cs
+++ b/SunnyUI/Controls/UITabControlMenu.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UITabControlMenu.cs
* 文件说明: 标签菜单控件
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UITextBox.cs b/SunnyUI/Controls/UITextBox.cs
index dce39c27..fd667515 100644
--- a/SunnyUI/Controls/UITextBox.cs
+++ b/SunnyUI/Controls/UITextBox.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UITextBox.cs
* 文件说明: 输入框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UITimePicker.cs b/SunnyUI/Controls/UITimePicker.cs
index a5ed0c9d..3c44f136 100644
--- a/SunnyUI/Controls/UITimePicker.cs
+++ b/SunnyUI/Controls/UITimePicker.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIDatePicker.cs
* 文件说明: 时间选择框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-29
*
* 2020-05-29: V2.2.5 增加文件
diff --git a/SunnyUI/Controls/UITitlePanel.cs b/SunnyUI/Controls/UITitlePanel.cs
index d54ccd2f..fee06047 100644
--- a/SunnyUI/Controls/UITitlePanel.cs
+++ b/SunnyUI/Controls/UITitlePanel.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UITitlePanel.cs
* 文件说明: 带标题面板
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UIToolTip.cs b/SunnyUI/Controls/UIToolTip.cs
index c529031d..7ca19bc2 100644
--- a/SunnyUI/Controls/UIToolTip.cs
+++ b/SunnyUI/Controls/UIToolTip.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIToolTip.cs
* 文件说明: 提示
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-07-21
*
* 2020-07-21: V2.2.6 增加控件
diff --git a/SunnyUI/Controls/UITrackBar.cs b/SunnyUI/Controls/UITrackBar.cs
index fe1455c9..33daa53d 100644
--- a/SunnyUI/Controls/UITrackBar.cs
+++ b/SunnyUI/Controls/UITrackBar.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UITrackBar.cs
* 文件说明: 进度指示条
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UITransfer.cs b/SunnyUI/Controls/UITransfer.cs
index d879d625..8267dd4f 100644
--- a/SunnyUI/Controls/UITransfer.cs
+++ b/SunnyUI/Controls/UITransfer.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UITransfer.cs
* 文件说明: 穿梭框
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Controls/UITreeView.cs b/SunnyUI/Controls/UITreeView.cs
index f809579b..fdb3de8c 100644
--- a/SunnyUI/Controls/UITreeView.cs
+++ b/SunnyUI/Controls/UITreeView.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UITreeView.cs
* 文件说明: 树形列表
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-05
*
* 2020-05-05: V2.2.5 增加文件
diff --git a/SunnyUI/Controls/UIVerScrollBarEx.cs b/SunnyUI/Controls/UIVerScrollBarEx.cs
index c69ca589..6d3748ba 100644
--- a/SunnyUI/Controls/UIVerScrollBarEx.cs
+++ b/SunnyUI/Controls/UIVerScrollBarEx.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIVerScrollBarEx.cs
* 文件说明: 垂直滚动条
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-08-29
*
* 2020-08-29: V2.2.7 新增水平滚动条
diff --git a/SunnyUI/Controls/UIWaitingBar.cs b/SunnyUI/Controls/UIWaitingBar.cs
index 74742cf5..aec3dce2 100644
--- a/SunnyUI/Controls/UIWaitingBar.cs
+++ b/SunnyUI/Controls/UIWaitingBar.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIWaitingBar.cs
* 文件说明: 等待滚动条控件
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-07-20
*
* 2020-07-20: V2.2.6 新增等待滚动条控件
diff --git a/SunnyUI/Font/UIFontImage.cs b/SunnyUI/Font/UIFontImage.cs
index 22b2d9fa..407a2f16 100644
--- a/SunnyUI/Font/UIFontImage.cs
+++ b/SunnyUI/Font/UIFontImage.cs
@@ -13,7 +13,7 @@
******************************************************************************
* ļ: UFontImage.cs
* ļ˵: ͼƬ
- * ǰ汾: V2.2
+ * ǰ汾: V3.0
* : 2020-01-01
*
* 2020-01-01: V2.2.0 ļ˵
diff --git a/SunnyUI/Font/UIFontImageDefine.cs b/SunnyUI/Font/UIFontImageDefine.cs
index 108659f7..2527ca9f 100644
--- a/SunnyUI/Font/UIFontImageDefine.cs
+++ b/SunnyUI/Font/UIFontImageDefine.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UFontImageDefine.cs
* 文件说明: 字体图片定义类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Font/UIFontImages.cs b/SunnyUI/Font/UIFontImages.cs
index 718daf6e..b3631405 100644
--- a/SunnyUI/Font/UIFontImages.cs
+++ b/SunnyUI/Font/UIFontImages.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIFontImages.cs
* 文件说明: 字体图片属性窗体
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Forms/UIEditForm.cs b/SunnyUI/Forms/UIEditForm.cs
index 0e8f6583..a2d0763f 100644
--- a/SunnyUI/Forms/UIEditForm.cs
+++ b/SunnyUI/Forms/UIEditForm.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIEditForm.cs
* 文件说明: 编辑窗体基类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Forms/UIEditFormHelper.cs b/SunnyUI/Forms/UIEditFormHelper.cs
index 68ca6830..aded6722 100644
--- a/SunnyUI/Forms/UIEditFormHelper.cs
+++ b/SunnyUI/Forms/UIEditFormHelper.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIEditFormHelper.cs
* 文件说明: 编辑窗体帮助类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-12-28
*
* 2020-12-28: V2.2.10 增加文件说明
diff --git a/SunnyUI/Forms/UIForm.cs b/SunnyUI/Forms/UIForm.cs
index 7bddc9e4..2ce241d0 100644
--- a/SunnyUI/Forms/UIForm.cs
+++ b/SunnyUI/Forms/UIForm.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIForm.cs
* 文件说明: 窗体基类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
@@ -1246,7 +1246,7 @@ namespace Sunny.UI
if (m.Msg == Win32.User.WM_NCHITTEST && ShowDragStretch && WindowState == FormWindowState.Normal)
{
//Point vPoint = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16 & 0xFFFF);
- Point vPoint = new Point(MousePosition.X, MousePosition.Y);//修正有分屏后,调整窗体大小时鼠标显示左右箭头问题
+ Point vPoint = new Point(MousePosition.X, MousePosition.Y);//修正有分屏后,调整窗体大小时鼠标显示左右箭头问题
vPoint = PointToClient(vPoint);
int dragSize = 5;
if (vPoint.X <= dragSize)
diff --git a/SunnyUI/Forms/UIFormHelper.cs b/SunnyUI/Forms/UIFormHelper.cs
index df5f1161..9769f4cc 100644
--- a/SunnyUI/Forms/UIFormHelper.cs
+++ b/SunnyUI/Forms/UIFormHelper.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIFormHelper.cs
* 文件说明: 窗体帮助类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Forms/UIInputForm.cs b/SunnyUI/Forms/UIInputForm.cs
index 1fcc5b58..78a4e8a6 100644
--- a/SunnyUI/Forms/UIInputForm.cs
+++ b/SunnyUI/Forms/UIInputForm.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIInputForm.cs
* 文件说明: 输入窗体
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Forms/UIMessageForm.cs b/SunnyUI/Forms/UIMessageForm.cs
index 324f47df..f11d2771 100644
--- a/SunnyUI/Forms/UIMessageForm.cs
+++ b/SunnyUI/Forms/UIMessageForm.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIMessageBox.cs
* 文件说明: 消息提示窗体
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Forms/UISelectForm.cs b/SunnyUI/Forms/UISelectForm.cs
index ac2a9634..860f7c18 100644
--- a/SunnyUI/Forms/UISelectForm.cs
+++ b/SunnyUI/Forms/UISelectForm.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UISelectForm.cs
* 文件说明: 下拉选择窗体
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-05
*
* 2020-05-05: V2.2.5 增加文件
diff --git a/SunnyUI/Forms/UIStatusForm.cs b/SunnyUI/Forms/UIStatusForm.cs
index 84dc9a60..242ca10d 100644
--- a/SunnyUI/Forms/UIStatusForm.cs
+++ b/SunnyUI/Forms/UIStatusForm.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIStatusForm.cs
* 文件说明: 进度提示窗体
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-05
*
* 2020-05-05: V2.2.5 增加文件
diff --git a/SunnyUI/Frames/UIAsideHeaderMainFooterFrame.cs b/SunnyUI/Frames/UIAsideHeaderMainFooterFrame.cs
index e25e90a5..1f312096 100644
--- a/SunnyUI/Frames/UIAsideHeaderMainFooterFrame.cs
+++ b/SunnyUI/Frames/UIAsideHeaderMainFooterFrame.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIAsideHeaderMainFooterFrame.cs
* 文件说明: 页面框架(Aside-Header-Main-Footer)
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-05
*
* 2020-05-05: V2.2.5 页面框架(Aside-Header-Main-Footer)
diff --git a/SunnyUI/Frames/UIAsideHeaderMainFrame.cs b/SunnyUI/Frames/UIAsideHeaderMainFrame.cs
index 96a1b184..10a7c278 100644
--- a/SunnyUI/Frames/UIAsideHeaderMainFrame.cs
+++ b/SunnyUI/Frames/UIAsideHeaderMainFrame.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIAsideHeaderMainFrame.cs
* 文件说明: 页面框架(Aside-Header-Main)
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-05
*
* 2020-05-05: V2.2.5 页面框架(Aside-Header-Main)
diff --git a/SunnyUI/Frames/UIAsideMainFrame.cs b/SunnyUI/Frames/UIAsideMainFrame.cs
index 1edaf299..3e29972e 100644
--- a/SunnyUI/Frames/UIAsideMainFrame.cs
+++ b/SunnyUI/Frames/UIAsideMainFrame.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIAsideMainFrame.cs
* 文件说明: 页面框架(Aside-Main)
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-05
*
* 2020-05-05: V2.2.5 页面框架(Aside-Main)
diff --git a/SunnyUI/Frames/UIHeaderAsideMainFooterFrame.cs b/SunnyUI/Frames/UIHeaderAsideMainFooterFrame.cs
index 87fcbbb9..b58eaeb7 100644
--- a/SunnyUI/Frames/UIHeaderAsideMainFooterFrame.cs
+++ b/SunnyUI/Frames/UIHeaderAsideMainFooterFrame.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIHeaderAsideMainFooterFrame.cs
* 文件说明: 页面框架(Header-Aside-Main-Footer)
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-05
*
* 2020-05-05: V2.2.5 页面框架(Header-Aside-Main-Footer)
diff --git a/SunnyUI/Frames/UIHeaderAsideMainFrame.cs b/SunnyUI/Frames/UIHeaderAsideMainFrame.cs
index 1bafd591..dc545e04 100644
--- a/SunnyUI/Frames/UIHeaderAsideMainFrame.cs
+++ b/SunnyUI/Frames/UIHeaderAsideMainFrame.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIHeaderAsideMainFrame.cs
* 文件说明: 页面框架(Header-Aside-Main)
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-05
*
* 2020-05-05: V2.2.5 页面框架(Header-Aside-Main)
diff --git a/SunnyUI/Frames/UIHeaderMainFooterFrame.cs b/SunnyUI/Frames/UIHeaderMainFooterFrame.cs
index faa953ed..917bfa57 100644
--- a/SunnyUI/Frames/UIHeaderMainFooterFrame.cs
+++ b/SunnyUI/Frames/UIHeaderMainFooterFrame.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIHeaderMainFooterFrame.cs
* 文件说明: 页面框架(Header-Main-Footer)
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-05
*
* 2020-05-05: V2.2.5 页面框架(Header-Main-Footer)
diff --git a/SunnyUI/Frames/UIHeaderMainFrame.cs b/SunnyUI/Frames/UIHeaderMainFrame.cs
index e36b8d14..b5ad8770 100644
--- a/SunnyUI/Frames/UIHeaderMainFrame.cs
+++ b/SunnyUI/Frames/UIHeaderMainFrame.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIHeaderMainFrame.cs
* 文件说明: 页面框架(Header-Main)
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-05
*
* 2020-05-05: V2.2.5 页面框架(Header-Main)
diff --git a/SunnyUI/Frames/UIMainFrame.cs b/SunnyUI/Frames/UIMainFrame.cs
index 13d1d541..52fce3d4 100644
--- a/SunnyUI/Frames/UIMainFrame.cs
+++ b/SunnyUI/Frames/UIMainFrame.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIMainFrame.cs
* 文件说明: 页面框架基类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-05-05
*
* 2020-05-05: V2.2.5 页面框架基类
diff --git a/SunnyUI/Pages/UIPage.cs b/SunnyUI/Pages/UIPage.cs
index ead2f3aa..10da5b4f 100644
--- a/SunnyUI/Pages/UIPage.cs
+++ b/SunnyUI/Pages/UIPage.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIPage.cs
* 文件说明: 页面基类,从Form继承,可放置于容器内
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Pages/UITitlePage.cs b/SunnyUI/Pages/UITitlePage.cs
index 3c6a9436..1b836eed 100644
--- a/SunnyUI/Pages/UITitlePage.cs
+++ b/SunnyUI/Pages/UITitlePage.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UITitlePage.cs
* 文件说明: 标题栏页面
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Properties/AssemblyInfo.cs b/SunnyUI/Properties/AssemblyInfo.cs
deleted file mode 100644
index 02ee3455..00000000
--- a/SunnyUI/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// 有关程序集的常规信息通过以下
-// 特性集控制。更改这些特性值可修改
-// 与程序集关联的信息。
-[assembly: AssemblyTitle("SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。")]
-[assembly: AssemblyDescription("基于 GPL-3.0 的 .Net C# Winform开源控件库、工具类库、扩展类库、多页面开发框架。")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("SunnyUI.Net")]
-[assembly: AssemblyProduct("SunnyUI.dll")]
-[assembly: AssemblyCopyright("CopyRight © SunnyUI.Net 2012-2020")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// 将 ComVisible 设置为 false 使此程序集中的类型
-// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
-// 则将该类型上的 ComVisible 特性设置为 true。
-[assembly: ComVisible(false)]
-
-// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
-[assembly: Guid("153ae810-a3a6-4239-a239-a94da4694a37")]
-
-// 程序集的版本信息由下面四个值组成:
-//
-// 主版本
-// 次版本
-// 内部版本号
-// 修订号
-//
-// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
-// 方法是按如下所示使用“*”:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.2.10.0")]
-[assembly: AssemblyFileVersion("2.2.10.0")]
\ No newline at end of file
diff --git a/SunnyUI/Properties/Resources.Designer.cs b/SunnyUI/Properties/Resources.Designer.cs
index 2a5a896a..2e02df36 100644
--- a/SunnyUI/Properties/Resources.Designer.cs
+++ b/SunnyUI/Properties/Resources.Designer.cs
@@ -47,8 +47,8 @@ namespace Sunny.UI.Properties {
}
///
- /// 重写当前线程的 CurrentUICulture 属性
- /// 重写当前线程的 CurrentUICulture 属性。
+ /// 重写当前线程的 CurrentUICulture 属性,对
+ /// 使用此强类型资源类的所有资源查找执行重写。
///
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
@@ -200,7 +200,7 @@ namespace Sunny.UI.Properties {
}
///
- /// 查找类似 V2.2.9 的本地化字符串。
+ /// 查找类似 V3.0.0 的本地化字符串。
///
internal static string Version {
get {
diff --git a/SunnyUI/Properties/Resources.resx b/SunnyUI/Properties/Resources.resx
index b105eb76..fd10dc06 100644
--- a/SunnyUI/Properties/Resources.resx
+++ b/SunnyUI/Properties/Resources.resx
@@ -112,12 +112,12 @@
2.0
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
..\Resources\close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -156,14 +156,14 @@
SunnyUI.Net
- 基于GPL-3.0的开源控件库、工具类库、扩展类库、多页面开发框架。
+ 基于 GPL-3.0 的 .Net Framework 4.0+、.Net Core3.1、.Net 5 WinForm 开源控件库、工具类库、扩展类库、多页面开发框架。
..\Resources\notifier.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- V2.2.9
- 2020-10-12
+ V3.0.0
+ 2021-01-01
..\Resources\wind.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
diff --git a/SunnyUI/Static/UArray.cs b/SunnyUI/Static/UArray.cs
deleted file mode 100644
index 077a1bb5..00000000
--- a/SunnyUI/Static/UArray.cs
+++ /dev/null
@@ -1,1059 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UArray.cs
- * 文件说明: 数组扩展类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections;
-using System.Globalization;
-using System.IO;
-using System.IO.Compression;
-using System.Runtime.InteropServices;
-using System.Text;
-
-namespace Sunny.UI
-{
- ///
- /// 数组扩展类
- ///
- public static class ArrayEx
- {
- ///
- /// BCD码数组
- ///
- /// 值
- /// 长度,一个字节两位
- /// 数组
- public static byte[] BCDData(int value, int length)
- {
- return value.ToString("D" + length * 2).ToHexBytes();
- }
-
- ///
- /// BCD码数组
- ///
- /// 值
- /// 长度,一个字节两位
- /// 数组
- public static byte[] BCDData(long value, int length)
- {
- return value.ToString("D" + length * 2).ToHexBytes();
- }
-
- /// 数据流转为字节数组
- ///
- /// 针对MemoryStream进行优化。内存流的Read实现是一个个字节复制,而ToArray是调用内部内存复制方法
- /// 如果要读完数据,又不支持定位,则采用内存流搬运
- /// 如果指定长度超过数据流长度,就让其报错,因为那是调用者所期望的值
- ///
- /// 数据流
- /// 长度,0表示读到结束
- /// 字节数组
- public static byte[] ReadBytes(this Stream stream, long length = -1)
- {
- if (stream == null)
- {
- return null;
- }
-
- if (length == 0)
- {
- return new byte[0];
- }
-
- if (stream.CanSeek && stream.Length - stream.Position < length)
- {
- throw new Exception($"无法从长度只有{stream.Length - stream.Position}的数据流里面读取{length}字节的数据");
- }
-
- var buf = new byte[length];
- stream.Read(buf, 0, buf.Length);
- return buf;
- }
-
- /// 复制数组
- /// 源数组
- /// 起始位置
- /// 复制字节数
- /// 返回复制的总字节数
- public static byte[] ReadBytes(this byte[] src, int offset = 0, int count = -1)
- {
- if (count == 0)
- {
- return new byte[0];
- }
-
- // 即使是全部,也要复制一份,而不只是返回原数组,因为可能就是为了复制数组
- if (count < 0)
- {
- count = src.Length - offset;
- }
-
- var bts = new byte[count];
- Buffer.BlockCopy(src, offset, bts, 0, bts.Length);
- return bts;
- }
-
- ///
- /// 字符串转换为Bool数组
- ///
- /// 字符串
- /// Bool数组
- public static bool[] ToBooleans(this string str)
- {
- bool[] result = new bool[str.Length];
- for (int i = 0; i < str.Length; i++)
- {
- result[i] = str.Substring(i, 1) == "1";
- }
-
- return result;
- }
-
- ///
- /// Bool数组转换为字符串
- ///
- /// Bool数组
- /// 字符串
- public static string ToBooleansString(this bool[] b)
- {
- StringBuilder sb = new StringBuilder();
- foreach (bool b1 in b)
- {
- sb.Append(b1 ? "1" : "0");
- }
-
- return sb.ToString();
- }
-
- ///
- /// Bool数组转换为Byte数组
- ///
- /// Bool数组
- /// 需要压缩
- /// Byte数组
- public static byte[] ToBytes(this bool[] b, bool needCompress = false)
- {
- if (b.IsNullOrEmpty())
- {
- return null;
- }
-
- if (!needCompress)
- {
- byte[] bts = new byte[b.Length];
- for (int i = 0; i < b.Length; i++)
- {
- bts[i] = b[i].ToByte();
- }
-
- return bts;
- }
- else
- {
- int len = b.Length / 8;
- if (b.Length % 8 != 0)
- {
- len++;
- }
-
- byte[] all = b.ToBytes();
- StringBuilder sb = new StringBuilder();
- foreach (byte t in all)
- {
- sb.Append(t.ToString());
- }
-
- string str = sb.ToString().PadRight(len * 8, '0');
- byte[] bts = new byte[len];
- for (int i = 0; i < len; i++)
- {
- bts[i] = (byte)str.Left(8).ToNumberLong(MathEx.Characters.BINARY);
- str = str.RemoveLeft(8);
- }
-
- return bts;
- }
- }
-
- ///
- /// Byte数组转换为Bool数组
- ///
- /// Byte数组
- /// 是否压缩
- /// Bool数组
- public static bool[] ToBooleans(this byte[] b, bool compressed = false)
- {
- if (b.IsNullOrEmpty())
- {
- return null;
- }
-
- if (!compressed)
- {
- bool[] bts = new bool[b.Length];
- for (int i = 0; i < b.Length; i++)
- {
- bts[i] = b[i].ToBool();
- }
-
- return bts;
- }
- else
- {
- int len = b.Length * 8;
- bool[] bts = new bool[len];
- for (int i = 0; i < b.Length; i++)
- {
- string str = b[i].ToNumberString(MathEx.Characters.BINARY).PadLeft(8, '0');
- for (int j = 0; j < 8; j++)
- {
- bts[i * 8 + j] = str[j] == '1';
- }
- }
-
- return bts;
- }
- }
-
- ///
- /// 浮点数组转为字节数组
- ///
- /// 浮点数组
- /// 字节数组
- public static byte[] ToBytes(this float[] f)
- {
- byte[] b = new byte[f.Length * 4];
- for (int i = 0; i < f.Length; i++)
- {
- Array.Copy(BitConverter.GetBytes(f[i]), 0, b, i * 4, 4);
- }
-
- return b;
- }
-
- ///
- /// 字节数组转为浮点数组
- ///
- /// 字节数组
- /// 浮点数组
- public static float[] ToFloats(this byte[] b)
- {
- float[] f = new float[b.Length / 4];
- for (int i = 0; i < f.Length; i++)
- {
- f[i] = BitConverter.ToSingle(b, i * 4);
- }
-
- return f;
- }
-
- ///
- /// 整形数组转为字节数组
- ///
- /// 整形数组
- /// 字节数组
- public static byte[] ToBytes(this int[] f)
- {
- byte[] b = new byte[f.Length * 4];
- for (int i = 0; i < f.Length; i++)
- {
- Array.Copy(BitConverter.GetBytes(f[i]), 0, b, i * 4, 4);
- }
-
- return b;
- }
-
- ///
- /// 字节数组转为整形数组
- ///
- /// 字节数组
- /// 整形数组
- public static int[] ToIntegers(this byte[] b)
- {
- int[] f = new int[b.Length / 4];
- for (int i = 0; i < f.Length; i++)
- {
- f[i] = BitConverter.ToInt32(b, i * 4);
- }
-
- return f;
- }
-
- ///
- /// 字节数组转为Base64编码字符串
- ///
- /// 字节数组
- /// 整形数组
- public static string ToBase64String(this byte[] b)
- {
- return b.IsNullOrEmpty() ? string.Empty : Convert.ToBase64String(b);
- }
-
- ///
- /// 字节数组转为整形数组
- ///
- /// 字节数组
- /// 整形数组
- public static byte[] ToBase64Bytes(this string b)
- {
- return b.IsNullOrEmpty() ? null : Convert.FromBase64String(b);
- }
-
- ///
- /// 字节数组转为值类型的对象
- ///
- /// 值类型
- /// 字节数组
- /// 对象
- public static T ToStruct(this byte[] bytes) where T : struct
- {
- if (bytes == null)
- {
- throw new NullReferenceException();
- }
-
- // Type type = typeof(T);
- // if (type.GetCustomAttribute() == null)
- // {
- // throw new Exception(type.Name + "未设置 StructLayout 属性。");
- // }
-
- //得到结构体的大小
- int size;
- try
- {
- size = Marshal.SizeOf(typeof(T));
- }
- catch (Exception)
- {
- throw new NullReferenceException();
- }
-
- if (size > bytes.Length)
- {
- throw new NullReferenceException();
- }
-
- //分配结构体大小的内存空间
- IntPtr structPtr = Marshal.AllocHGlobal(size);
- //将byte数组拷到分配好的内存空间
- Marshal.Copy(bytes, 0, structPtr, size);
- //将内存空间转换为目标结构体
- var obj = Marshal.PtrToStructure(structPtr, typeof(T));
- //释放内存空间
- Marshal.FreeHGlobal(structPtr);
- //返回结构体
- return (T)obj;
- }
-
- ///
- /// 值类型对象长度
- ///
- /// T
- /// obj
- /// 长度
- public static int Size(this T obj) where T : struct
- {
- return Marshal.SizeOf(typeof(T));
- }
-
- ///
- /// 值类型的对象转换为字节数组
- ///
- /// 值类型
- /// 对象
- /// 字节数组
- public static byte[] StructToBytes(this T obj) where T : struct
- {
- // Type type = typeof(T);
- // if (type.GetCustomAttribute() == null)
- // {
- // throw new ApplicationException(type.Name + "未设置 StructLayout 属性。");
- // }
-
- //得到结构体的大小
- int size = obj.Size();
- //创建byte数组
- var bytes = new byte[size];
- //分配结构体大小的内存空间
- IntPtr structPtr = Marshal.AllocHGlobal(size);
- //将结构体拷到分配好的内存空间
- Marshal.StructureToPtr(obj, structPtr, false);
- //从内存空间拷到byte数组
- Marshal.Copy(structPtr, bytes, 0, size);
- //释放内存空间
- Marshal.FreeHGlobal(structPtr);
- //返回byte数组
- return bytes;
- }
-
- ///
- /// 从二维数组获取某一维的数组
- ///
- /// 二维数组
- /// 维数
- /// 一维数组
- public static byte[] One(this byte[,] two, int index)
- {
- if (index < 0 || index >= two.GetLength(0))
- {
- return null;
- }
-
- int len = two.GetLength(1);
- var result = new byte[len];
- IntPtr arrHandler = Marshal.UnsafeAddrOfPinnedArrayElement(two, index * len);
- Marshal.Copy(arrHandler, result, 0, len);
- return result;
- }
-
- ///
- /// 从二维数组获取某一维的数组
- ///
- /// 二维数组
- /// 维数
- /// 一维数组
- public static float[] One(this float[,] two, int index)
- {
- if (index < 0 || index >= two.GetLength(0))
- {
- return null;
- }
-
- int len = two.GetLength(1);
- var result = new float[len];
- IntPtr arrHandler = Marshal.UnsafeAddrOfPinnedArrayElement(two, index * len);
- Marshal.Copy(arrHandler, result, 0, len);
- return result;
- }
-
- ///
- /// 从二维数组获取某一维的数组
- ///
- /// 二维数组
- /// 维数
- /// 一维数组
- public static int[] One(this int[,] two, int index)
- {
- if (index < 0 || index >= two.GetLength(0))
- {
- return null;
- }
-
- int len = two.GetLength(1);
- var result = new int[len];
- IntPtr arrHandler = Marshal.UnsafeAddrOfPinnedArrayElement(two, index * len);
- Marshal.Copy(arrHandler, result, 0, len);
- return result;
- }
-
- ///
- /// 从二维数组获取某一维的数组
- ///
- /// 二维数组
- /// 维数
- /// 一维数组
- public static double[] One(this double[,] two, int index)
- {
- if (index < 0 || index >= two.GetLength(0))
- {
- return null;
- }
-
- int len = two.GetLength(1);
- var result = new double[len];
- IntPtr arrHandler = Marshal.UnsafeAddrOfPinnedArrayElement(two, index * len);
- Marshal.Copy(arrHandler, result, 0, len);
- return result;
- }
-
- ///
- /// 从二维数组获取某一维的数组
- ///
- /// 二维数组
- /// 维数
- /// 一维数组
- public static char[] One(this char[,] two, int index)
- {
- if (index < 0 || index >= two.GetLength(0))
- {
- return null;
- }
-
- int len = two.GetLength(1);
- var result = new char[len];
- IntPtr arrHandler = Marshal.UnsafeAddrOfPinnedArrayElement(two, index * len);
- Marshal.Copy(arrHandler, result, 0, len);
- return result;
- }
-
- ///
- /// 从二维数组获取某一维的数组
- ///
- /// 二维数组
- /// 维数
- /// 一维数组
- public static long[] One(this long[,] two, int index)
- {
- if (index < 0 || index >= two.GetLength(0))
- {
- return null;
- }
-
- int len = two.GetLength(1);
- var result = new long[len];
- IntPtr arrHandler = Marshal.UnsafeAddrOfPinnedArrayElement(two, index * len);
- Marshal.Copy(arrHandler, result, 0, len);
- return result;
- }
-
- ///
- /// 从二维数组获取某一维的数组
- ///
- /// 二维数组
- /// 维数
- /// 一维数组
- public static short[] One(this short[,] two, int index)
- {
- if (index < 0 || index >= two.GetLength(0))
- {
- return null;
- }
-
- int len = two.GetLength(1);
- var result = new short[len];
- IntPtr arrHandler = Marshal.UnsafeAddrOfPinnedArrayElement(two, index * len);
- Marshal.Copy(arrHandler, result, 0, len);
- return result;
- }
-
- ///
- /// 取中值
- ///
- /// 数组
- /// 当数组个数为偶数时,是否需要将中间两数平均
- /// 中值
- public static double MedianNum(this double[] a, bool avg = false)
- {
- if (a.IsNullOrEmpty())
- {
- throw new NullReferenceException();
- }
-
- Array.Sort(a);
- return (a.Length & 1) > 0 ? a[a.Length / 2] : (avg ? a[a.Length / 2 - 1] : a[a.Length / 2]);
- }
-
- ///
- /// 取中值
- ///
- /// 数组
- /// 当数组个数为偶数时,是否需要将中间两数平均
- /// 中值
- public static int MedianNum(this int[] a, bool avg = false)
- {
- if (a.IsNullOrEmpty())
- {
- throw new NullReferenceException();
- }
-
- Array.Sort(a);
- return (a.Length & 1) > 0 ? a[a.Length / 2] : (avg ? a[a.Length / 2 - 1] : a[a.Length / 2]);
- }
-
- ///
- /// 取中值
- ///
- /// 数组
- /// 当数组个数为偶数时,是否需要将中间两数平均
- /// 中值
- public static byte MedianNum(this byte[] a, bool avg = false)
- {
- if (a.IsNullOrEmpty())
- {
- throw new NullReferenceException();
- }
-
- Array.Sort(a);
- return (a.Length & 1) > 0 ? a[a.Length / 2] : (avg ? a[a.Length / 2 - 1] : a[a.Length / 2]);
- }
-
- ///
- /// 取中值
- ///
- /// 数组
- /// 当数组个数为偶数时,是否需要将中间两数平均
- /// 中值
- public static float MedianNum(this float[] a, bool avg = false)
- {
- if (a.IsNullOrEmpty())
- {
- throw new NullReferenceException();
- }
-
- Array.Sort(a);
- return (a.Length & 1) > 0 ? a[a.Length / 2] : (avg ? a[a.Length / 2 - 1] : a[a.Length / 2]);
- }
-
- ///
- /// 取中值
- ///
- /// 数组
- /// 当数组个数为偶数时,是否需要将中间两数平均
- /// 中值
- public static short MedianNum(this short[] a, bool avg = false)
- {
- if (a.IsNullOrEmpty())
- {
- throw new NullReferenceException();
- }
-
- Array.Sort(a);
- return (a.Length & 1) > 0 ? a[a.Length / 2] : (avg ? a[a.Length / 2 - 1] : a[a.Length / 2]);
- }
-
- ///
- /// 检查索引是否存在
- ///
- /// 数组
- /// 索引
- /// 索引是否存在
- public static bool WithinIndex(this IList source, int index)
- {
- return source.IsValid() && index >= 0 && index < source.Count;
- }
-
- ///
- /// 检查数组是否为空
- ///
- /// 数组
- /// 结果
- public static bool IsNullOrEmpty(this IList source)
- {
- return source == null || source.Count == 0;
- }
-
- ///
- /// 检查数组是否为空
- ///
- /// 数组
- /// 结果
- public static bool IsValid(this IList source)
- {
- return !source.IsNullOrEmpty();
- }
-
- ///
- /// 附加数组
- ///
- /// 类型
- /// 原数组
- /// 待附加数组
- /// 结果
- public static T[] CombineArray(this T[] combineWith, T[] arrayToCombine)
- {
- if (combineWith == default(T[]) || arrayToCombine == default(T[]))
- {
- return combineWith;
- }
-
- int initialSize = combineWith.Length;
- Array.Resize(ref combineWith, initialSize + arrayToCombine.Length);
- Array.Copy(arrayToCombine, arrayToCombine.GetLowerBound(0), combineWith, initialSize, arrayToCombine.Length);
- return combineWith;
- }
-
- ///
- /// 复制数组的一块
- ///
- /// 类型
- /// 数组
- /// 起始索引
- /// 长度
- /// 长度不够是否补齐
- /// 数组
- public static T[] BlockCopy(this T[] array, int index, int length, bool padToLength = false)
- {
- if (array == null)
- {
- throw new NullReferenceException();
- }
-
- int n = length;
- T[] b = null;
-
- if (array.Length < index + length)
- {
- n = array.Length - index;
- if (padToLength)
- {
- b = new T[length];
- }
- }
-
- if (b == null)
- {
- b = new T[n];
- }
-
- Array.Copy(array, index, b, 0, n);
- return b;
- }
-
- ///
- /// Find the first occurence of an byte[] in another byte[]
- ///
- /// the byte[] to search in
- /// the byte[] to find
- /// the first position of the found byte[] or -1 if not found
- ///
- /// http://www.codeplex.com/site/users/view/blaumeiser
- ///
- public static int FindArrayInArray(this byte[] buf1, byte[] buf2)
- {
- if (buf2 == null || buf1 == null)
- {
- return -1;
- }
-
- if (buf2.Length == 0)
- {
- return 0; // by definition empty sets match immediately
- }
-
- int j = -1;
- int end = buf1.Length - buf2.Length;
- while ((j = Array.IndexOf(buf1, buf2[0], j + 1)) <= end && j != -1)
- {
- int i = 1;
- while (buf1[j + i] == buf2[i])
- {
- if (++i == buf2.Length)
- {
- return j;
- }
- }
- }
-
- return -1;
- }
-
- ///
- /// 字节数组转十六进制字符串
- ///
- /// 字节数组
- /// 分隔符
- /// 结果
- public static string ToHexString(this byte[] bytes, string span = "")
- {
- if (bytes.IsNullOrEmpty())
- {
- return "";
- }
-
- StringBuilder sb = new StringBuilder();
- foreach (byte b in bytes)
- {
- sb.Append(b.ToString("X").PadLeft(2, '0'));
- sb.Append(span);
- }
-
- return sb.ToString();
- }
-
- ///
- /// 十六进制字符串转字节数组
- ///
- /// 十六进制字符串
- /// 分隔符
- /// 结果
- public static byte[] ToHexBytes(this string str, string span = "")
- {
- if (!span.IsNullOrEmpty())
- {
- str = str.Replace(span, "");
- }
-
- if (str.IsNullOrEmpty())
- {
- return new byte[0];
- }
-
- var bytes = new byte[str.Length / 2];
- for (int i = 0; i < bytes.Length; i++)
- {
- bytes[i] = byte.Parse(str.Substring(2 * i, 2), NumberStyles.AllowHexSpecifier);
- }
-
- return bytes;
- }
-
- ///
- /// 压缩字节数组
- ///
- /// 数组
- /// 结果
- public static byte[] GZipCompress(this byte[] inputBytes)
- {
- if (inputBytes.IsNullOrEmpty())
- {
- return null;
- }
-
- using (MemoryStream outStream = new MemoryStream())
- using (GZipStream zipStream = new GZipStream(outStream, CompressionMode.Compress, true))
- {
- zipStream.Write(inputBytes, 0, inputBytes.Length);
- zipStream.Close(); //很重要,必须关闭,否则无法正确解压
- return outStream.ToArray();
- }
- }
-
- ///
- /// 解压缩字节数组
- ///
- /// 数组
- /// 结果
- public static byte[] GZipDecompress(this byte[] inputBytes)
- {
- if (inputBytes.IsNullOrEmpty())
- {
- return null;
- }
-
- using (MemoryStream inputStream = new MemoryStream(inputBytes))
- using (MemoryStream outStream = new MemoryStream())
- using (GZipStream zipStream = new GZipStream(inputStream, CompressionMode.Decompress))
- {
- zipStream.CopyTo(outStream);
- zipStream.Close();
- return outStream.ToArray();
- }
- }
-
- ///
- /// Deflate算法压缩字节数组
- ///
- /// 数组
- /// 结果
- public static byte[] DeflateCompress(this byte[] inputBytes)
- {
- if (inputBytes.IsNullOrEmpty())
- {
- return null;
- }
-
- using (MemoryStream outStream = new MemoryStream())
- using (DeflateStream zipStream = new DeflateStream(outStream, CompressionMode.Compress, true))
- {
- zipStream.Write(inputBytes, 0, inputBytes.Length);
- zipStream.Close(); //很重要,必须关闭,否则无法正确解压
- return outStream.ToArray();
- }
- }
-
- ///
- /// Deflate算法解压缩字节数组
- ///
- /// 数组
- /// 结果
- public static byte[] DeflateDecompress(this byte[] inputBytes)
- {
- if (inputBytes.IsNullOrEmpty())
- {
- return null;
- }
-
- using (MemoryStream inputStream = new MemoryStream(inputBytes))
- using (MemoryStream outStream = new MemoryStream())
- using (DeflateStream zipStream = new DeflateStream(inputStream, CompressionMode.Decompress))
- {
- zipStream.CopyTo(outStream);
- zipStream.Close();
- return outStream.ToArray();
- }
- }
-
- ///
- /// 冒泡排序法
- ///
- /// 列表
- public static void BubbleSort(this int[] list)
- {
- for (int i = 0; i < list.Length; i++)
- {
- for (int j = i; j < list.Length; j++)
- {
- if (list[i] >= list[j])
- {
- continue;
- }
-
- int temp = list[i];
- list[i] = list[j];
- list[j] = temp;
- }
- }
- }
-
- ///
- /// 插入排序法
- ///
- /// 列表
- public static void InsertionSort(int[] list)
- {
- for (int i = 1; i < list.Length; i++)
- {
- int t = list[i];
- int j = i;
- while ((j > 0) && (list[j - 1] > t))
- {
- list[j] = list[j - 1];
- --j;
- }
-
- list[j] = t;
- }
- }
-
- ///
- /// 选择排序法
- ///
- /// 列表
- public static void SelectionSort(int[] list)
- {
- for (int i = 0; i < list.Length - 1; i++)
- {
- int min = i;
- for (int j = i + 1; j < list.Length; j++)
- {
- if (list[j] < list[min])
- {
- min = j;
- }
- }
-
- int t = list[min];
- list[min] = list[i];
- list[i] = t;
- }
- }
-
- ///
- /// 希尔排序法
- ///
- /// 列表
- public static void ShellSort(int[] list)
- {
- int inc;
- for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1)
- {
- for (; inc > 0; inc /= 3)
- {
- for (int i = inc + 1; i <= list.Length; i += inc)
- {
- int t = list[i - 1];
- int j = i;
- while ((j > inc) && (list[j - inc - 1] > t))
- {
- list[j - 1] = list[j - inc - 1];
- j -= inc;
- }
-
- list[j - 1] = t;
- }
- }
- }
- }
-
- ///
- /// 赋值交换
- ///
- /// l
- /// r
- /// T
- public static void Swap(ref T l, ref T r) where T : struct
- {
- T s = l;
- l = r;
- r = s;
- }
-
- ///
- /// 快速排序法
- ///
- /// 列表
- /// 起始序号
- /// 结束序号
- public static void QuickSort(int[] list, int low, int high)
- {
- if (high <= low)
- {
- return;
- }
-
- if (high == low + 1)
- {
- if (list[low] > list[high])
- {
- Swap(ref list[low], ref list[high]);
- }
-
- return;
- }
-
- int mid = (low + high) >> 1;
- int pivot = list[mid];
- Swap(ref list[low], ref list[mid]);
- int l = low + 1;
- int r = high;
- do
- {
- while (l <= r && list[l] < pivot)
- {
- l++;
- }
-
- while (list[r] >= pivot)
- {
- r--;
- }
-
- if (l < r)
- {
- Swap(ref list[l], ref list[r]);
- }
- }
- while (l < r);
-
- list[low] = list[r];
- list[r] = pivot;
- if (low + 1 < r)
- {
- QuickSort(list, low, r - 1);
- }
-
- if (r + 1 < high)
- {
- QuickSort(list, r + 1, high);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Static/UAssembly.cs b/SunnyUI/Static/UAssembly.cs
deleted file mode 100644
index 2f1f32e2..00000000
--- a/SunnyUI/Static/UAssembly.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UAssembly.cs
- * 文件说明: 反射处理类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Reflection;
-
-namespace Sunny.UI
-{
- ///
- /// 反射处理类
- ///
- public static class AssemblyEx
- {
- ///
- /// 根据类名称获取当前进程的类型申明
- ///
- /// 类名
- /// 类型申明
- public static Type GetCurrentType(string typename)
- {
- Assembly assembly = Assembly.GetExecutingAssembly();
- return assembly.GetType(typename);
- }
-
- ///
- /// 根据类名称获取DLL类型申明
- ///
- /// DLL名称
- /// 类名
- /// 类型申明
- public static Type GetDllType(string dll, string typename)
- {
- Assembly assembly = Assembly.LoadFile(dll);
- return assembly.GetType(typename);
- }
-
- ///
- /// 获取当前进程的类型申明数组
- ///
- /// 类型申明数组
- public static Type[] GetCurrentTypes()
- {
- Assembly assembly = Assembly.GetExecutingAssembly();
- return assembly.GetTypes();
- }
-
- ///
- /// 获取DLL类型申明数组
- ///
- /// DLL名称
- /// 类型申明数组
- public static Type[] GetDllTypes(string dll)
- {
- Assembly assembly = Assembly.LoadFile(dll);
- return assembly.GetExportedTypes();
- }
-
- ///
- /// 根据类型申明创建对象
- ///
- /// 类型申明
- /// 对象
- public static object CreateInstance(this Type type)
- {
- return Activator.CreateInstance(type);
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Static/UAttribute.cs b/SunnyUI/Static/UAttribute.cs
deleted file mode 100644
index 3e5aa1a5..00000000
--- a/SunnyUI/Static/UAttribute.cs
+++ /dev/null
@@ -1,264 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UAttribute.cs
- * 文件说明: 属性扩展类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Reflection;
-using System.Xml.Serialization;
-
-namespace Sunny.UI
-{
- ///
- /// 属性扩展类
- ///
- public static class AttributeEx
- {
- ///
- /// 类型是否能够转为指定基类
- ///
- /// 类型
- /// 基类
- /// 是否能够转为指定基类
- 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 if (type.GetInterfaces().Any(e => e.IsGenericType && baseType.IsGenericTypeDefinition ? e.GetGenericTypeDefinition() == baseType : e == baseType))
- {
- rs = true;
- }
- }
-
- // 判断是否子类时,支持只反射加载的程序集
- 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;
- }
-
- /// 是否泛型列表
- /// 类型
- /// 是否泛型列表
- public static bool IsList(this Type type)
- {
- return type != null && type.IsGenericType && type.As(typeof(IList<>));
- //return Array.IndexOf(type.GetInterfaces(), typeof(IEnumerable)) > -1;
- }
-
- /// 是否泛型字典
- /// 类型
- /// 是否泛型字典
- public static bool IsDictionary(this Type type) => type != null && type.IsGenericType && type.As(typeof(IDictionary<,>));
-
- ///
- /// 获取属性
- ///
- /// info
- /// T
- /// 属性
- public static T GetCustomAttribute(this PropertyInfo info)
- {
- return (T)info.GetCustomAttributes(typeof(T), false).FirstOrDefault();
- }
-
- ///
- /// 获取属性
- ///
- /// info
- /// T
- /// 属性
- public static T GetCustomAttribute(this FieldInfo info)
- {
- return (T)info.GetCustomAttributes(typeof(T), false).FirstOrDefault();
- }
-
- ///
- /// 获取属性
- ///
- /// type
- /// T
- /// 属性
- public static T GetCustomAttribute(this Type type)
- {
- return (T)type.GetCustomAttributes(typeof(T), false).FirstOrDefault();
- }
-
- /// 获取序列化名称
- /// pi
- /// 名称
- public static string GetName(this PropertyInfo pi)
- {
- string name = pi.Name;
- var att = pi.GetCustomAttribute();
- if (att != null && !att.ElementName.IsNullOrEmpty())
- {
- name = att.ElementName;
- }
-
- return name;
- }
-
- /// 获取成员绑定的显示名,优先DisplayName,然后Description
- /// member
- /// 显示名
- public static string DisplayName(this PropertyInfo member)
- {
- var att = member.GetCustomAttribute();
- if (att != null && !att.DisplayName.IsNullOrWhiteSpace())
- {
- return att.DisplayName;
- }
-
- return "";
- }
-
- ///
- /// 获取类属性的显示名
- ///
- /// 类
- /// 属性名称
- /// 类类型
- /// 字符串
- public static string DisplayName(this T value, string PropertyName) where T : class
- {
- var list = value.GetType().GetProperties();
- foreach (PropertyInfo info in list)
- {
- if (info.Name.Equals(PropertyName))
- {
- var att = info.GetCustomAttribute();
- return att != null ? att.DisplayName : "";
- }
- }
-
- return "";
- }
-
- ///
- /// 获取类属性的显示描述
- ///
- /// 类
- /// 属性名称
- /// 类类型
- /// 字符串
- public static string Description(this T value, string PropertyName) where T : class
- {
- var list = value.GetType().GetProperties();
- foreach (PropertyInfo info in list)
- {
- if (info.Name.Equals(PropertyName))
- {
- var att = info.GetCustomAttribute();
- return att != null ? att.Description : "";
- }
- }
-
- return "";
- }
-
- /// 获取成员绑定的显示名,优先DisplayName,然后Description
- /// member
- /// 显示名
- public static string Description(this PropertyInfo member)
- {
- var att2 = member.GetCustomAttribute();
- if (att2 != null && !att2.Description.IsNullOrWhiteSpace())
- {
- return att2.Description;
- }
-
- return "";
- }
-
- ///
- /// 获取需要的属性,删除忽略的属性
- ///
- /// 类型
- /// 属性列表
- public static List GetNeedProperties(this Type type)
- {
- var list = type.GetProperties();
- List result = new List();
- foreach (var info in list)
- {
- if (info.GetCustomAttribute() != null)
- {
- continue;
- }
-
- if (info.GetCustomAttribute() != null)
- {
- continue;
- }
-
- result.Add(info);
- }
-
- return result;
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Static/UAudio.cs b/SunnyUI/Static/UAudio.cs
index b81fb2e3..dc278eba 100644
--- a/SunnyUI/Static/UAudio.cs
+++ b/SunnyUI/Static/UAudio.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UAudio.cs
* 文件说明: 声音播放辅助类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Static/UCollections.cs b/SunnyUI/Static/UCollections.cs
deleted file mode 100644
index 6347db37..00000000
--- a/SunnyUI/Static/UCollections.cs
+++ /dev/null
@@ -1,292 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UCollections.cs
- * 文件说明: 集合扩展类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Sunny.UI
-{
- ///
- /// Collections 扩展类
- ///
- public static class CollectionsEx
- {
- ///
- /// 键排序列表
- ///
- /// 键
- /// 值
- /// 字典
- /// 键排序列表
- public static List SortedKeys(this ConcurrentDictionary dictionary)
- {
- if (dictionary == null) return null;
-
- List keys = dictionary.Keys.ToList();
- keys.Sort();
- return keys;
- }
-
- ///
- /// 键排序列表
- ///
- /// 键
- /// 值
- /// 字典
- /// 键排序列表
- public static List SortedKeys(this Dictionary dictionary)
- {
- if (dictionary == null) return null;
-
- List keys = dictionary.Keys.ToList();
- keys.Sort();
- return keys;
- }
-
- ///
- /// 键排序后,取值排序列表
- ///
- /// 键
- /// 值
- /// 字典
- /// 值排序列表
- public static List SortedValues(this ConcurrentDictionary dictionary)
- {
- if (dictionary == null) return null;
-
- List keys = dictionary.SortedKeys();
- List values = new List();
- foreach (var key in keys)
- {
- values.Add(dictionary[key]);
- }
-
- return values;
- }
-
- ///
- /// 键排序后,取值排序列表
- ///
- /// 键
- /// 值
- /// 字典
- /// 值排序列表
- public static List SortedValues(this Dictionary dictionary)
- {
- if (dictionary == null) return null;
-
- List keys = dictionary.SortedKeys();
- List values = new List();
- foreach (var key in keys)
- {
- values.Add(dictionary[key]);
- }
-
- return values;
- }
-
- ///
- /// 清除
- ///
- /// T
- /// queue
- public static void Clear(this ConcurrentQueue queue)
- {
- while (queue.Count > 0)
- {
- queue.TryDequeue(out T _);
- }
- }
-
- ///
- /// 增加或更新
- ///
- /// 字典
- /// 键
- /// 值
- /// 键类型
- /// 值类型
- public static void TryAddOrUpdate(this ConcurrentDictionary dictionary, Key key, Value value)
- {
- if (dictionary.ContainsKey(key))
- {
- dictionary[key] = value;
- }
- else
- {
- dictionary.TryAdd(key, value);
- }
- }
-
- ///
- /// 增加或更新
- ///
- /// 字典
- /// 键
- /// 值
- /// 键类型
- /// 值类型
- public static void TryAddOrUpdate(this Dictionary dictionary, Key key, Value value)
- {
- if (dictionary.ContainsKey(key))
- {
- dictionary[key] = value;
- }
- else
- {
- dictionary.Add(key, value);
- }
- }
-
- ///
- /// GetOneByValue 从字典中找出第一个值与value相等的记录的key
- ///
- /// 键类型
- /// 值类型
- /// 字典
- /// 值
- /// Key
- public static TKey FindFirstKeyByValue(this IDictionary dic, TValue value) where TKey : class where TValue : IEquatable
- {
- foreach (var pair in dic)
- {
- if (pair.Value.Equals(value))
- {
- return pair.Key;
- }
- }
-
- return default;
- }
-
- ///
- /// RemoveOneByValue 从字典中删除第一个值与value相等的记录
- ///
- /// 键类型
- /// 值类型
- /// 字典
- /// 值
- public static void RemoveFirstValue(this IDictionary dic, TValue value) where TKey : class where TValue : IEquatable
- {
- TKey dest = dic.FindFirstKeyByValue(value);
- if (dic.ContainsKey(dest))
- {
- dic.Remove(dest);
- }
- }
-
- ///
- /// Search 返回的是目标值所在的索引,如果不存在则返回-1
- ///
- /// 类型
- /// 列表
- /// 值
- /// 索引
- public static int Search(IList list, T value) where T : IComparable
- {
- int left = 0;
- int right = list.Count;
- while (right >= left)
- {
- int middle = (left + right) / 2;
- if (list[middle].CompareTo(value) == 0)
- {
- return middle;
- }
-
- if (list[middle].CompareTo(value) > 0)
- {
- right = middle - 1;
- }
- else
- {
- left = middle + 1;
- }
- }
-
- return -1;
- }
-
- ///
- /// 获取
- ///
- /// List
- /// 序号
- /// 值
- public static T Get(this List list, int index)
- {
- return list.Exist(index) ? list[index] : default;
- }
-
- ///
- /// 更新
- ///
- /// List
- /// 序号
- /// 值
- public static void Update(this List list, int index, T value)
- {
- if (!list.Exist(index))
- {
- return;
- }
-
- list[index] = value;
- }
-
- ///
- /// 索引是否存在
- ///
- /// List
- /// 序号
- /// 结果
- public static bool Exist(this List list, int index)
- {
- return (index >= 0 && index < list.Count);
- }
-
- ///
- /// 是否为空
- ///
- public static bool IsEmpty(this List list)
- {
- return list.Count == 0;
- }
-
- ///
- /// 第一个
- ///
- public static T First(this List list)
- {
- return list.Get(0);
- }
-
- ///
- /// 最后一个
- ///
- public static T Last(this List list)
- {
- return list.Get(list.Count - 1);
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Static/UControl.cs b/SunnyUI/Static/UControl.cs
index 7abe04e9..9383dad7 100644
--- a/SunnyUI/Static/UControl.cs
+++ b/SunnyUI/Static/UControl.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UControl.cs
* 文件说明: 界面控件扩展类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Static/UDataReader.cs b/SunnyUI/Static/UDataReader.cs
deleted file mode 100644
index b35e50db..00000000
--- a/SunnyUI/Static/UDataReader.cs
+++ /dev/null
@@ -1,505 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UDataReader.cs
- * 文件说明: 数据读取扩展类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Data;
-
-namespace Sunny.UI
-{
- ///
- /// 数据读取扩展类
- ///
- public static class DataReaderEx
- {
- ///
- /// Returns true if the database connection is in the specified state.
- ///
- /// 数据连接
- /// 连接状态
- /// 结果
- public static bool IsInState(this IDbConnection connection, ConnectionState state)
- {
- return (connection != null && (connection.State & state) == state);
- }
-
- ///
- /// Open the Database connection if not already opened.
- ///
- /// 数据连接
- public static void OpenIfNot(this IDbConnection connection)
- {
- if (!connection.IsInState(ConnectionState.Open))
- {
- connection.Open();
- }
- }
-
- ///
- /// Gets the record value casted to the specified data type or the data types default value.
- ///
- /// The return data type
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static T Get(this IDataReader reader, string field)
- {
- return reader.Get(field, default(T));
- }
-
- ///
- /// Gets the record value casted to the specified data type or the specified default value.
- ///
- /// The return data type
- /// The data reader.
- /// The name of the record field.
- /// The default value.
- /// The record value
- public static T Get(this IDataReader reader, string field, T defaultValue)
- {
- var value = reader[field];
- if (value == DBNull.Value)
- {
- return defaultValue;
- }
-
- return (value is T variable) ? variable : defaultValue;
- }
-
- ///
- /// Gets the record value casted as byte array.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static byte[] GetBytes(this IDataReader reader, string field)
- {
- return (reader[field] as byte[]);
- }
-
- ///
- /// Gets the record value casted as string or null.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static string GetString(this IDataReader reader, string field)
- {
- return reader.GetString(field, null);
- }
-
- ///
- /// Gets the record value casted as string or the specified default value.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The default value.
- /// The record value
- public static string GetString(this IDataReader reader, string field, string defaultValue)
- {
- var value = reader[field];
- return (value is string s ? s : defaultValue);
- }
-
- ///
- /// Gets the record value casted as Guid or Guid.Empty.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static Guid GetGuid(this IDataReader reader, string field)
- {
- var value = reader[field];
- return (value is Guid guid ? guid : Guid.Empty);
- }
-
- ///
- /// Gets the record value casted as Guid? or null.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static Guid? GetNullableGuid(this IDataReader reader, string field)
- {
- var value = reader[field];
- return (value is Guid ? (Guid?)value : null);
- }
-
- ///
- /// Gets the record value casted as DateTime or DateTime.Minimum.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static DateTime GetDateTime(this IDataReader reader, string field)
- {
- return reader.GetDateTime(field, DateTime.MinValue);
- }
-
- ///
- /// Gets the record value casted as DateTime or the specified default value.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The default value.
- /// The record value
- public static DateTime GetDateTime(this IDataReader reader, string field, DateTime defaultValue)
- {
- var value = reader[field];
- return (value is DateTime time ? time : defaultValue);
- }
-
- ///
- /// Gets the record value casted as DateTime or null.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static DateTime? GetNullableDateTime(this IDataReader reader, string field)
- {
- var value = reader[field];
- return (value is DateTime ? (DateTime?)value : null);
- }
-
- ///
- /// Gets the record value casted as DateTimeOffset (UTC) or DateTime.Minimum.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static DateTimeOffset GetDateTimeOffset(this IDataReader reader, string field)
- {
- return new DateTimeOffset(reader.GetDateTime(field), TimeSpan.Zero);
- }
-
- ///
- /// Gets the record value casted as DateTimeOffset (UTC) or the specified default value.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The default value.
- /// The record value
- public static DateTimeOffset GetDateTimeOffset(this IDataReader reader, string field, DateTimeOffset defaultValue)
- {
- var dt = reader.GetDateTime(field);
- return (dt != DateTime.MinValue ? new DateTimeOffset(dt, TimeSpan.Zero) : defaultValue);
- }
-
- ///
- /// Gets the record value casted as DateTimeOffset (UTC) or null.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static DateTimeOffset? GetNullableDateTimeOffset(this IDataReader reader, string field)
- {
- var dt = reader.GetNullableDateTime(field);
- return (dt != null ? (DateTimeOffset?)new DateTimeOffset(dt.Value, TimeSpan.Zero) : null);
- }
-
- ///
- /// Gets the record value casted as int or 0.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static int GetInt32(this IDataReader reader, string field)
- {
- return reader.GetInt32(field, 0);
- }
-
- ///
- /// Gets the record value casted as int or the specified default value.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The default value.
- /// The record value
- public static int GetInt32(this IDataReader reader, string field, int defaultValue)
- {
- var value = reader[field];
- return (value is int i ? i : defaultValue);
- }
-
- ///
- /// Gets the record value casted as int or null.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static int? GetNullableInt32(this IDataReader reader, string field)
- {
- var value = reader[field];
- return (value is int ? (int?)value : null);
- }
-
- ///
- /// Gets the record value casted as long or 0.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static long GetInt64(this IDataReader reader, string field)
- {
- return reader.GetInt64(field, 0);
- }
-
- ///
- /// Gets the record value casted as long or the specified default value.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The default value.
- /// The record value
- public static long GetInt64(this IDataReader reader, string field, int defaultValue)
- {
- var value = reader[field];
- return (value is long l ? l : defaultValue);
- }
-
- ///
- /// Gets the record value casted as long or null.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static long? GetNullableInt64(this IDataReader reader, string field)
- {
- var value = reader[field];
- return (value is long ? (long?)value : null);
- }
-
- ///
- /// Gets the record value casted as decimal or 0.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static decimal GetDecimal(this IDataReader reader, string field)
- {
- return reader.GetDecimal(field, 0);
- }
-
- ///
- /// Gets the record value casted as decimal or the specified default value.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The default value.
- /// The record value
- public static decimal GetDecimal(this IDataReader reader, string field, long defaultValue)
- {
- var value = reader[field];
- return (value is decimal d ? d : defaultValue);
- }
-
- ///
- /// Gets the record value casted as decimal or null.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static decimal? GetNullableDecimal(this IDataReader reader, string field)
- {
- var value = reader[field];
- return (value is decimal ? (decimal?)value : null);
- }
-
- ///
- /// Gets the record value casted as bool or false.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static bool GetBoolean(this IDataReader reader, string field)
- {
- return reader.GetBoolean(field, false);
- }
-
- ///
- /// Gets the record value casted as bool or the specified default value.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The default value.
- /// The record value
- public static bool GetBoolean(this IDataReader reader, string field, bool defaultValue)
- {
- var value = reader[field];
- return (value is bool b ? b : defaultValue);
- }
-
- ///
- /// Gets the record value casted as bool or null.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static bool? GetNullableBoolean(this IDataReader reader, string field)
- {
- var value = reader[field];
- return (value is bool ? (bool?)value : null);
- }
-
- ///
- /// Gets the record value as Type class instance or null.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static Type GetType(this IDataReader reader, string field)
- {
- return reader.GetType(field, null);
- }
-
- ///
- /// Gets the record value as Type class instance or the specified default value.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The default value.
- /// The record value
- public static Type GetType(this IDataReader reader, string field, Type defaultValue)
- {
- string classType = reader.GetString(field);
- if (classType.IsNullOrEmpty())
- {
- return defaultValue;
- }
-
- Type type = Type.GetType(classType);
- return type ?? defaultValue;
- }
-
- ///
- /// Gets the record value as class instance from a type name or null.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static object GetTypeInstance(this IDataReader reader, string field)
- {
- return reader.GetTypeInstance(field, null);
- }
-
- ///
- /// Gets the record value as class instance from a type name or the specified default type.
- ///
- /// The data reader.
- /// The name of the record field.
- /// The default value.
- /// The record value
- public static object GetTypeInstance(this IDataReader reader, string field, Type defaultValue)
- {
- var type = reader.GetType(field, defaultValue);
- return (type != null ? Activator.CreateInstance(type) : null);
- }
-
- ///
- /// Gets the record value as class instance from a type name or null.
- ///
- /// The type to be casted to
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static T GetTypeInstance(this IDataReader reader, string field) where T : class
- {
- return (reader.GetTypeInstance(field, null) as T);
- }
-
- ///
- /// Gets the record value as class instance from a type name or the specified default type.
- ///
- /// The type to be casted to
- /// The data reader.
- /// The name of the record field.
- /// The type.
- /// The record value
- public static T GetTypeInstanceSafe(this IDataReader reader, string field, Type type) where T : class
- {
- var instance = (reader.GetTypeInstance(field, null) as T);
- return (instance ?? Activator.CreateInstance(type) as T);
- }
-
- ///
- /// Gets the record value as class instance from a type name or an instance from the specified type.
- ///
- /// The type to be casted to
- /// The data reader.
- /// The name of the record field.
- /// The record value
- public static T GetTypeInstanceSafe(this IDataReader reader, string field) where T : class, new()
- {
- var instance = (reader.GetTypeInstance(field, null) as T);
- return (instance ?? new T());
- }
-
- ///
- /// Determines whether the record value is DBNull.Value
- ///
- /// The data reader.
- /// The name of the record field.
- ///
- /// true if the value is DBNull.Value; otherwise, false.
- ///
- public static bool IsDBNull(this IDataReader reader, string field)
- {
- var value = reader[field];
- return (value == DBNull.Value);
- }
-
- ///
- /// Reads all all records from a data reader and performs an action for each.
- ///
- /// The data reader.
- /// The action to be performed.
- /// The count of actions that were performed.
- public static int ReadAll(this IDataReader reader, Action action)
- {
- var count = 0;
- while (reader.Read())
- {
- action(reader);
- count++;
- }
-
- return count;
- }
-
- ///
- /// 获取要查找的字段的索引
- ///
- /// 记录
- /// 字段名
- /// 索引
- public static int IndexOf(this IDataRecord record, string name)
- {
- for (int i = 0; i < record.FieldCount; i++)
- {
- if (string.Compare(record.GetName(i), name, StringComparison.OrdinalIgnoreCase) == 0)
- {
- return i;
- }
- }
-
- return -1;
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Static/UDateTime.cs b/SunnyUI/Static/UDateTime.cs
deleted file mode 100644
index 4b88c5d2..00000000
--- a/SunnyUI/Static/UDateTime.cs
+++ /dev/null
@@ -1,834 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UDateTime.cs
- * 文件说明: 日期扩展类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-
-namespace Sunny.UI
-{
- ///
- /// 日期扩展类
- ///
- public static class DateTimeEx
- {
- ///
- /// 日期连接符
- ///
- public const string DateLink = "-";
-
- ///
- /// 日期连接符
- ///
- public const string DateLinkEx = "/";
-
- ///
- /// 时间连接符
- ///
- public const string TimeLink = ":";
-
- ///
- /// 日期(包含毫秒) - 格式化字符串 yyyy-MM-dd HH:mm:ss.fff
- ///
- public const string DateTimeFormatEx = "yyyy-MM-dd HH:mm:ss.fff";
-
- ///
- /// 日期 - 格式化字符串 yyyy-MM-dd HH:mm:ss
- ///
- public const string DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
-
- ///
- /// 年月日 - 格式化字符串 yyyy-MM-dd
- ///
- public const string DateFormat = "yyyy-MM-dd";
-
- ///
- /// 时分秒 - 格式化字符串 HH:mm:ss
- ///
- public const string TimeFormat = "HH:mm:ss";
-
- ///
- /// 去除格式化字符串中的分隔符
- ///
- ///
- ///
- private static string TrimLink(string format)
- {
- return format.Replace(DateLink, "").Replace(TimeLink, "").Replace(".", "").Replace(" ", "").Trim();
- }
-
- ///
- /// yyyy-MM-dd HH:mm:ss (2001-02-03 04:05:06)
- ///
- /// DateTime
- /// string
- public static string String(this DateTime dt)
- {
- return dt.ToString(DateTimeFormat);
- }
-
- ///
- /// yyyy-MM-dd HH:mm:ss (2001-02-03 04:05:06)
- ///
- /// DateTime
- ///
- /// string
- public static string DateTimeString(this DateTime dt, bool withLink = true)
- {
- return dt.ToString(withLink ? DateTimeFormat : TrimLink(DateTimeFormat));
- }
-
- ///
- /// yyyy-MM-dd HH:mm:ss.fff (2001-02-03 04:05:06.789)
- ///
- /// DateTime
- ///
- /// string
- public static string DateTimeExString(this DateTime dt, bool withLink = true)
- {
- return dt.ToString(withLink ? DateTimeFormatEx : TrimLink(DateTimeFormatEx));
- }
-
- ///
- /// yyyy-MM-dd (2001-02-03)
- ///
- /// DateTime
- ///
- /// string
- public static string DateString(this DateTime dt, bool withLink = true)
- {
- return dt.ToString(withLink ? DateFormat : TrimLink(DateFormat));
- }
-
- ///
- /// HH:mm:ss (04:05:06)
- ///
- /// DateTime
- ///
- /// string
- public static string TimeString(this DateTime dt, bool withLink = true)
- {
- return dt.ToString(withLink ? TimeFormat : TrimLink(TimeFormat));
- }
-
- ///
- /// yyyy-MM (2001-02)
- ///
- /// DateTime
- ///
- /// string
- public static string YearMonthString(this DateTime dt, bool withLink = true)
- {
- return dt.ToString(withLink ? "yyyy-MM" : "yyyyMM");
- }
-
- ///
- /// yyyy (2001)
- ///
- /// DateTime
- /// string
- public static string YearString(this DateTime dt)
- {
- return dt.ToString("yyyy");
- }
-
- ///
- /// 十分钟一次的索引(0-143)
- ///
- /// 日期
- /// 结果
- public static int TenMinuteIndex(this DateTime dt)
- {
- return dt.Hour * 6 + dt.Minute / 10;
- }
-
- ///
- /// 当月天数列表
- ///
- /// DateTime
- /// List
- public static List MonthDays(this DateTime dt)
- {
- List days = new List();
-
- int cnt = dt.DaysInMonth();
- for (int i = 1; i <= cnt; i++)
- {
- days.Add(new DateTime(dt.Year, dt.Month, i));
- }
-
- return days;
- }
-
- ///
- /// 当月天数列表字符串
- ///
- /// DateTime
- /// List
- public static List MonthDayStrings(this DateTime dt)
- {
- List days = dt.MonthDays();
- List list = new List();
-
- foreach (DateTime day in days)
- {
- list.Add(day.ToString(DateFormat));
- }
-
- return list;
- }
-
- ///
- /// 在指定目录下创建以年月日分级的子目录,末尾包括\
- ///
- /// 日期
- /// 文件夹
- /// 不存在是否创建
- /// 文件夹名
- public static string YearMonthDayFolder(this DateTime dt, string path, bool createIfNotExist = false)
- {
- if (path.IsNullOrEmpty())
- {
- return path;
- }
-
- string result = path.DealPath() + dt.YearString() + "\\" + dt.YearMonthString() + "\\" + dt.DateString() + "\\";
- if (createIfNotExist)
- {
- DirEx.CreateDir(result);
- }
-
- return result;
- }
-
- ///
- /// 在指定目录下创建以年月分级的子目录,末尾包括\
- ///
- /// 日期
- /// 文件夹
- /// 不存在是否创建
- /// 文件夹名
- public static string YearMonthFolder(this DateTime dt, string path, bool createIfNotExist = false)
- {
- if (path.IsNullOrEmpty())
- {
- return path;
- }
-
- string result = path.DealPath() + dt.YearString() + "\\" + dt.YearMonthString() + "\\";
- if (createIfNotExist)
- {
- DirEx.CreateDir(result);
- }
-
- return result;
- }
-
- ///
- /// 时间日期转浮点,以2000-01-01 00:00:00起始
- ///
- /// 日期
- /// 浮点
- public static double ToDouble(this DateTime datetime)
- {
- return datetime.Subtract(Jan1st1970).TotalDays;
- }
-
- ///
- /// 起始日期,UTC时间,1970-01-01 00:00:00起始
- ///
- public static DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
-
- ///
- /// 浮点转时间日期,以UTC时间,1970-01-01 00:00:00起始
- ///
- /// 浮点
- /// 日期
- public static DateTime ToDateTime(this double iDays)
- {
- return TimeZone.CurrentTimeZone.ToLocalTime(Jan1st1970.AddDays(iDays));
- }
-
- ///
- /// 计算当前月份有多少天
- ///
- /// The date.
- /// The number of days.
- public static int DaysInMonth(this DateTime date)
- {
- return DateTime.DaysInMonth(date.Year, date.Month);
- }
-
- ///
- /// 此月第一天
- ///
- /// The date.
- /// The first day of the month
- public static DateTime FirstDayOfMonth(this DateTime date)
- {
- return new DateTime(date.Year, date.Month, 1);
- }
-
- ///
- /// 此月第一天
- ///
- /// The date.
- /// The desired day of week.
- /// The first day of the month
- public static DateTime FirstDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
- {
- var dt = date.FirstDayOfMonth();
- while (dt.DayOfWeek != dayOfWeek)
- {
- dt = dt.AddDays(1);
- }
-
- return dt;
- }
-
- ///
- /// 此月最后一天
- ///
- /// The date.
- /// The last day of the month.
- public static DateTime LastDayOfMonth(this DateTime date)
- {
- return new DateTime(date.Year, date.Month, DaysInMonth(date));
- }
-
- ///
- /// 此月最后一天
- ///
- /// The date.
- /// The desired day of week.
- /// The date time
- public static DateTime LastDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
- {
- var dt = date.LastDayOfMonth();
- while (dt.DayOfWeek != dayOfWeek)
- {
- dt = dt.AddDays(-1);
- }
-
- return dt;
- }
-
- ///
- /// 是否是当天
- ///
- /// The date.
- ///
- /// true if the specified date is today; otherwise, false.
- ///
- public static bool IsToday(this DateTime dt)
- {
- return (dt.Date == DateTime.Today.Date);
- }
-
- ///
- /// 设置时间
- ///
- /// The base date.
- /// The hours to be set.
- /// The minutes to be set.
- /// The seconds to be set.
- /// The DateTime including the new time value
- public static DateTime SetTime(this DateTime date, int hours, int minutes, int seconds)
- {
- return date.SetTime(new TimeSpan(hours, minutes, seconds));
- }
-
- ///
- /// 设置时间
- ///
- /// The base date.
- /// The hour
- /// The minute
- /// The second
- /// The millisecond
- /// The DateTime including the new time value
- public static DateTime SetTime(this DateTime date, int hours, int minutes, int seconds, int milliseconds)
- {
- return date.SetTime(new TimeSpan(0, hours, minutes, seconds, milliseconds));
- }
-
- ///
- /// 设置秒,毫秒为0
- ///
- /// 值
- /// 结果
- public static DateTime ZeroSecond(this DateTime datetime)
- {
- return datetime.SetTime(new TimeSpan(0, datetime.Hour, datetime.Minute, 0, 0));
- }
-
- ///
- /// 设置毫秒为0
- ///
- /// 值
- /// 结果
- public static DateTime ZeroMillisecond(this DateTime datetime)
- {
- return datetime.SetTime(new TimeSpan(0, datetime.Hour, datetime.Minute, datetime.Second, 0));
- }
-
- ///
- /// 设置时间
- ///
- /// The base date.
- /// The TimeSpan to be applied.
- ///
- /// The DateTime including the new time value
- ///
- public static DateTime SetTime(this DateTime date, TimeSpan time)
- {
- return date.Date.Add(time);
- }
-
- ///
- /// 日期是否相同
- ///
- /// The date.
- /// The date to compare with.
- ///
- /// true if both date values are equal; otherwise, false.
- ///
- public static bool IsDateEqual(this DateTime date, DateTime dateToCompare)
- {
- return (date.Date == dateToCompare.Date);
- }
-
- ///
- /// 时间是否相同
- ///
- /// The time.
- /// The time to compare.
- ///
- /// true if both time values are equal; otherwise, false.
- ///
- public static bool IsTimeEqual(this DateTime time, DateTime timeToCompare)
- {
- return (time.TimeOfDay == timeToCompare.TimeOfDay);
- }
-
- ///
- /// Get seconds of UNIX area. This is the milliseconds since 1/1/1970
- ///
- /// Up to which time.
- /// number of milliseconds.
- ///
- /// http://www.codeplex.com/site/users/view/blaumeiser
- ///
- public static long SecondsSince1970(this DateTime datetime)
- {
- TimeSpan ts = datetime.ToUniversalTime().Subtract(Jan1st1970);
- return (long)ts.TotalSeconds;
- }
-
- ///
- /// 在指定日期之前
- ///
- /// The source DateTime.
- /// The compared DateTime.
- /// True if the source is before the other DateTime, False otherwise
- public static bool IsBefore(this DateTime source, DateTime other)
- {
- return source.CompareTo(other) < 0;
- }
-
- ///
- /// 在指定日期之后
- ///
- /// The source DateTime.
- /// The compared DateTime.
- /// True if the source is before the other DateTime, False otherwise
- public static bool IsAfter(this DateTime source, DateTime other)
- {
- return source.CompareTo(other) > 0;
- }
-
- ///
- /// 明天
- ///
- /// The current day
- /// 结果
- public static DateTime Tomorrow(this DateTime date)
- {
- return date.AddDays(1);
- }
-
- ///
- /// 昨天
- ///
- /// The current day
- /// 结果
- public static DateTime Yesterday(this DateTime date)
- {
- return date.AddDays(-1);
- }
-
- ///
- /// 当日结束
- ///
- /// The DateTime to be processed
- /// The date at 23:50.59.999
- public static DateTime EndOfDay(this DateTime date)
- {
- return date.SetTime(23, 59, 59, 999);
- }
-
- ///
- /// 当月结束
- ///
- /// The DateTime to be processed
- /// 当月结束
- public static DateTime EndOfMonth(this DateTime date)
- {
- return new DateTime(date.Year, date.Month, 1).AddMonths(1).AddDays(-1).EndOfDay();
- }
-
- ///
- /// 当月结束
- ///
- /// The DateTime to be processed
- /// 当月结束
- public static DateTime BeginOfMonth(this DateTime date)
- {
- return new DateTime(date.Year, date.Month, 1).Midnight();
- }
-
- ///
- /// 中午
- ///
- /// The current date
- /// 结果
- public static DateTime Noon(this DateTime time)
- {
- return time.SetTime(12, 0, 0);
- }
-
- ///
- /// 午夜
- ///
- /// The current date
- /// 结果
- public static DateTime Midnight(this DateTime time)
- {
- return time.SetTime(0, 0, 0, 0);
- }
-
- ///
- /// 一月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime January(this int year, int day)
- {
- return new DateTime(year, 1, day);
- }
-
- ///
- /// 二月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime February(this int year, int day)
- {
- return new DateTime(year, 2, day);
- }
-
- ///
- /// 三月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime March(this int year, int day)
- {
- return new DateTime(year, 3, day);
- }
-
- ///
- /// 四月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime April(this int year, int day)
- {
- return new DateTime(year, 4, day);
- }
-
- ///
- /// 五月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime May(this int year, int day)
- {
- return new DateTime(year, 5, day);
- }
-
- ///
- /// 六月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime June(this int year, int day)
- {
- return new DateTime(year, 6, day);
- }
-
- ///
- /// 七月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime July(this int year, int day)
- {
- return new DateTime(year, 7, day);
- }
-
- ///
- /// 八月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime August(this int year, int day)
- {
- return new DateTime(year, 8, day);
- }
-
- ///
- /// 九月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime September(this int year, int day)
- {
- return new DateTime(year, 9, day);
- }
-
- ///
- /// 十月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime October(this int year, int day)
- {
- return new DateTime(year, 10, day);
- }
-
- ///
- /// 十一月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime November(this int year, int day)
- {
- return new DateTime(year, 11, day);
- }
-
- ///
- /// 十二月
- ///
- /// 年
- /// 日
- /// 时间
- public static DateTime December(this int year, int day)
- {
- return new DateTime(year, 12, day);
- }
-
- ///
- /// 两个日期间所有日期列表
- ///
- /// 起始
- /// 结束
- /// 列表
- public static List AllDaysTo(this DateTime thisDateTime, DateTime toDateTime)
- {
- List all = new List();
-
- DateTime dtb = toDateTime.IsAfter(thisDateTime) ? thisDateTime : toDateTime;
- DateTime dte = toDateTime.IsAfter(thisDateTime) ? toDateTime : thisDateTime;
-
- dtb = dtb.Midnight();
- dte = dte.EndOfDay();
-
- while (dtb < dte)
- {
- all.Add(dtb);
- dtb = dtb.AddDays(1);
- }
-
- return all;
- }
-
- ///
- /// 获取当天的每隔十分钟的时间列表(共144场)
- ///
- /// 日期
- /// 列表
- public static List AllTenMinutes(this DateTime date)
- {
- List all = new List();
- date = date.Midnight();
-
- for (int i = 0; i < 144; i++)
- {
- all.Add(date);
- date = date.AddMinutes(10);
- }
-
- return all;
- }
-
- ///
- /// 格式化时间设置秒、毫秒为0
- ///
- /// 值
- /// 结果
- public static DateTime TrimSeconds(this DateTime dateTime)
- {
- return dateTime.SetTime(dateTime.Hour, dateTime.Minute, 0, 0);
- }
-
- ///
- /// 格式化时间设置毫秒为0
- ///
- /// 值
- /// 结果
- public static DateTime TrimMilliseconds(this DateTime dateTime)
- {
- return dateTime.SetTime(dateTime.Hour, dateTime.Minute, dateTime.Second, 0);
- }
-
- ///
- /// TimeTicks转时间
- ///
- /// 值
- /// 结果
- public static DateTime TicksToDateTime(this long timeTicks)
- {
- return DateTime.MinValue.AddTicks(timeTicks);
- }
-
- ///
- /// 某月第一天第一个小时
- ///
- /// 时间
- /// 结果
- public static bool IsMonthBeginOneHour(this DateTime value)
- {
- return value.Day == 1 && value.Hour == 0;
- }
-
- ///
- /// 是否是六分钟的整数倍
- ///
- /// 时间
- /// 结果
- public static bool IsMultiSix(this DateTime value)
- {
- return value.Minute.Mod(6) == 0;
- }
-
- ///
- /// 设置本地电脑的年月日
- ///
- /// 年
- /// 月
- /// 日
- public static void SetLocalDate(int year, int month, int day)
- {
- //实例一个Process类,启动一个独立进程
- Process p = new Process();
- //Process类有一个StartInfo属性
- //设定程序名
- p.StartInfo.FileName = "cmd.exe";
- //设定程式执行参数 “/C”表示执行完命令后马上退出
- p.StartInfo.Arguments = $"/c date {year}-{month}-{day}";
- //关闭Shell的使用
- p.StartInfo.UseShellExecute = false;
- //重定向标准输入
- p.StartInfo.RedirectStandardInput = true;
- p.StartInfo.RedirectStandardOutput = true;
- //重定向错误输出
- p.StartInfo.RedirectStandardError = true;
- //设置不显示doc窗口
- p.StartInfo.CreateNoWindow = true;
- //启动
- p.Start();
- //从输出流取得命令执行结果
- p.StandardOutput.ReadToEnd();
- }
-
- ///
- /// 设置本机电脑的时分秒
- ///
- /// 时
- /// 分
- /// 秒
- public static void SetLocalTime(int hour, int min, int sec)
- {
- //实例一个Process类,启动一个独立进程
- Process p = new Process();
- //Process类有一个StartInfo属性
- //设定程序名
- p.StartInfo.FileName = "cmd.exe";
- //设定程式执行参数 “/C”表示执行完命令后马上退出
- p.StartInfo.Arguments = $"/c time {hour}:{min}:{sec}";
- //关闭Shell的使用
- p.StartInfo.UseShellExecute = false;
- //重定向标准输入
- p.StartInfo.RedirectStandardInput = true;
- p.StartInfo.RedirectStandardOutput = true;
- //重定向错误输出
- p.StartInfo.RedirectStandardError = true;
- //设置不显示doc窗口
- p.StartInfo.CreateNoWindow = true;
- //启动
- p.Start();
- //从输出流取得命令执行结果
- p.StandardOutput.ReadToEnd();
- }
-
- ///
- /// 设置本机电脑的年月日和时分秒
- ///
- /// 时间
- public static void SetLocalDateTime(DateTime time)
- {
- SetLocalDate(time.Year, time.Month, time.Day);
- SetLocalTime(time.Hour, time.Minute, time.Second);
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Static/UDir.cs b/SunnyUI/Static/UDir.cs
index 184a90e9..47a11f5d 100644
--- a/SunnyUI/Static/UDir.cs
+++ b/SunnyUI/Static/UDir.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UDir.cs
* 文件说明: 目录扩展类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
@@ -181,6 +181,52 @@ namespace Sunny.UI
}
}
+ ///
+ /// 在指定目录下创建以年月日分级的子目录,末尾包括\
+ ///
+ /// 日期
+ /// 文件夹
+ /// 不存在是否创建
+ /// 文件夹名
+ public static string YearMonthDayFolder(this DateTime dt, string path, bool createIfNotExist = false)
+ {
+ if (path.IsNullOrEmpty())
+ {
+ return path;
+ }
+
+ string result = path.DealPath() + dt.YearString() + "\\" + dt.YearMonthString() + "\\" + dt.DateString() + "\\";
+ if (createIfNotExist)
+ {
+ DirEx.CreateDir(result);
+ }
+
+ return result;
+ }
+
+ ///
+ /// 在指定目录下创建以年月分级的子目录,末尾包括\
+ ///
+ /// 日期
+ /// 文件夹
+ /// 不存在是否创建
+ /// 文件夹名
+ public static string YearMonthFolder(this DateTime dt, string path, bool createIfNotExist = false)
+ {
+ if (path.IsNullOrEmpty())
+ {
+ return path;
+ }
+
+ string result = path.DealPath() + dt.YearString() + "\\" + dt.YearMonthString() + "\\";
+ if (createIfNotExist)
+ {
+ DirEx.CreateDir(result);
+ }
+
+ return result;
+ }
+
///
/// 创建年月文件夹,末尾包括\
///
diff --git a/SunnyUI/Static/UEnum.cs b/SunnyUI/Static/UEnum.cs
deleted file mode 100644
index 2858a475..00000000
--- a/SunnyUI/Static/UEnum.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UEnum.cs
- * 文件说明: 枚举扩展类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Reflection;
-
-namespace Sunny.UI
-{
- ///
- /// 枚举扩展类
- ///
- public static class EnumEx
- {
- ///
- /// 枚举字段描述
- ///
- /// 枚举
- /// 字符串
- public static string DisplayText(this Enum value)
- {
- FieldInfo info = value.GetType().GetField(value.ToString());
- var attributes = info.GetCustomAttribute();
- return attributes != null ? attributes.DisplayText : value.ToString();
- }
-
- ///
- /// 将字符串转换为枚举类型
- ///
- /// TEnum
- /// dataToMatch
- /// 忽略大小写
- /// 枚举类型
- public static TEnum ToEnum(this string dataToMatch, bool ignoreCase = true) where TEnum : struct
- {
- return dataToMatch.InEnum()()
- ? default
- : (TEnum)Enum.Parse(typeof(TEnum), dataToMatch, ignoreCase);
- }
-
- ///
- /// 判断字符串是否为枚举类型
- ///
- /// TEnum
- /// dataToCheck
- /// 结果
- public static Func InEnum(this string dataToCheck) where TEnum : struct
- {
- return () => string.IsNullOrEmpty(dataToCheck) || !Enum.IsDefined(typeof(TEnum), dataToCheck);
- }
- }
-
- ///
- /// Specifies description for a member of the enum type for display to the UI
- ///
- ///
- ///
- /// enum OperatingSystem
- /// {
- /// [DisplayText("MS-DOS")]
- /// MsDos,
- ///
- /// [DisplayText("Windows 98")]
- /// Win98,
- ///
- /// [DisplayText("Windows XP")]
- /// Xp,
- ///
- /// [DisplayText("Windows Vista")]
- /// Vista,
- ///
- /// [DisplayText("Windows 7")]
- /// Seven,
- /// }
- ///
- /// public string GetMyOSName()
- /// {
- /// var myOS = OperatingSystem.Seven;
- /// return myOS.DisplayText();
- /// }
- ///
- ///
- ///
- /// http://about.me/AlekseyNagovitsyn
- ///
- [AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
- public class DisplayTextAttribute : Attribute
- {
- ///
- /// The default value for the attribute DisplayTextAttribute, which is an empty string
- ///
- public static readonly DisplayTextAttribute Default = new DisplayTextAttribute();
-
- ///
- /// The value of this attribute
- ///
- public string DisplayText { get; }
-
- ///
- /// Initializes a new instance of the class DisplayTextAttribute with default value (empty string)
- ///
- public DisplayTextAttribute() : this(string.Empty)
- {
- }
-
- ///
- /// Initializes a new instance of the class DisplayTextAttribute with specified value
- ///
- /// The value of this attribute
- public DisplayTextAttribute(string text)
- {
- DisplayText = text;
- }
-
- ///
- /// Equals
- ///
- /// object
- /// 结果
- public override bool Equals(object obj)
- {
- return obj is DisplayTextAttribute dsaObj && DisplayText.Equals(dsaObj.DisplayText);
- }
-
- ///
- /// GetHashCode
- ///
- /// 结果
- public override int GetHashCode()
- {
- return DisplayText.GetHashCode();
- }
-
- ///
- /// IsDefaultAttribute
- ///
- /// 结果
- public override bool IsDefaultAttribute()
- {
- return Equals(Default);
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Static/UFile.cs b/SunnyUI/Static/UFile.cs
index 8f7ccace..c51939a1 100644
--- a/SunnyUI/Static/UFile.cs
+++ b/SunnyUI/Static/UFile.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UFile.cs
* 文件说明: 文件扩展类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Static/UGDI.cs b/SunnyUI/Static/UGDI.cs
index 514b5d91..0326b5f2 100644
--- a/SunnyUI/Static/UGDI.cs
+++ b/SunnyUI/Static/UGDI.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UGDI.cs
* 文件说明: GDI扩展类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
@@ -28,6 +28,90 @@ namespace Sunny.UI
{
public static class GDIEx
{
+ ///
+ /// 点是否在区域内
+ ///
+ /// 点
+ /// 区域范围
+ /// 是否在区域内
+ public static bool InRegion(this Point point, Region region)
+ {
+ return region.IsVisible(point);
+ }
+
+ ///
+ /// 点是否在区域内
+ ///
+ /// 点
+ /// 区域范围
+ /// 是否在区域内
+ public static bool InRegion(this Point point, Point[] points)
+ {
+ using (GraphicsPath path = points.Path())
+ {
+ using (Region region = path.Region())
+ {
+ return region.IsVisible(point);
+ }
+ }
+ }
+
+ ///
+ /// 点是否在区域内
+ ///
+ /// 点
+ /// 区域范围
+ /// 是否在区域内
+ public static bool InRegion(this PointF point, PointF[] points)
+ {
+ using (GraphicsPath path = points.Path())
+ {
+ using (Region region = path.Region())
+ {
+ return region.IsVisible(point);
+ }
+ }
+ }
+
+ ///
+ /// 创建路径
+ ///
+ /// 点集合
+ /// 路径
+ public static GraphicsPath Path(this Point[] points)
+ {
+ GraphicsPath path = new GraphicsPath();
+ path.Reset();
+ path.AddPolygon(points);
+ return path;
+ }
+
+ ///
+ /// 创建路径
+ ///
+ /// 点集合
+ /// 路径
+ public static GraphicsPath Path(this PointF[] points)
+ {
+ GraphicsPath path = new GraphicsPath();
+ path.Reset();
+ path.AddPolygon(points);
+ return path;
+ }
+
+ ///
+ /// 创建区域
+ ///
+ /// 路径
+ /// 区域
+ public static Region Region(this GraphicsPath path)
+ {
+ Region region = new Region();
+ region.MakeEmpty();
+ region.Union(path);
+ return region;
+ }
+
///
/// 设置窗体的圆角矩形
///
diff --git a/SunnyUI/Static/UImage.cs b/SunnyUI/Static/UImage.cs
index 3792059e..24846012 100644
--- a/SunnyUI/Static/UImage.cs
+++ b/SunnyUI/Static/UImage.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UImage.cs
* 文件说明: 图像扩展类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Static/ULocalize.cs b/SunnyUI/Static/ULocalize.cs
deleted file mode 100644
index b71728e5..00000000
--- a/SunnyUI/Static/ULocalize.cs
+++ /dev/null
@@ -1,135 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UIFormHelper.cs
- * 文件说明: 多语言字符串定义
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-04-19: V2.2 增加文件说明
-******************************************************************************/
-
-namespace Sunny.UI
-{
- public static class UILocalize
- {
- ///
- /// 提示
- ///
- public static string InfoTitle = "提示";
-
- ///
- /// 正确
- ///
- public static string SuccessTitle = "正确";
-
- ///
- /// 警告
- ///
- public static string WarningTitle = "警告";
-
- ///
- /// 错误
- ///
- public static string ErrorTitle = "错误";
-
- ///
- /// 提示
- ///
- public static string AskTitle = "提示";
-
- ///
- /// 输入
- ///
- public static string InputTitle = "输入";
-
- ///
- /// 选择
- ///
- public static string SelectTitle = "选择";
-
- ///
- /// 全部关闭
- ///
- public static string CloseAll = "全部关闭";
-
- ///
- /// 确定
- ///
- public static string OK = "确定";
-
- ///
- /// 取消
- ///
- public static string Cancel = "取消";
-
- ///
- /// [ 无数据 ]
- ///
- public static string GridNoData = "[ 无数据 ]";
-
- ///
- /// 数据加载中,请稍候...
- ///
- public static string GridDataLoading = "数据加载中,请稍候...";
-
- ///
- /// 数据源必须为DataTable或者List
- ///
- public static string GridDataSourceException = "数据源必须为DataTable或者List";
-
- ///
- /// "系统正在处理中,请稍候..."
- ///
- public static string SystemProcessing = "系统正在处理中,请稍候...";
- }
-
- public static class UILocalizeHelper
- {
- public static void SetEN()
- {
- UILocalize.InfoTitle = "Info";
- UILocalize.SuccessTitle = "Success";
- UILocalize.WarningTitle = "Warning";
- UILocalize.ErrorTitle = "Error";
- UILocalize.AskTitle = "Query";
- UILocalize.InputTitle = "Input";
- UILocalize.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...";
- }
-
- 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 = "系统正在处理中,请稍候...";
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Static/UMath.cs b/SunnyUI/Static/UMath.cs
deleted file mode 100644
index 9386f9a4..00000000
--- a/SunnyUI/Static/UMath.cs
+++ /dev/null
@@ -1,980 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UMath.cs
- * 文件说明: 数学扩展类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Drawing.Drawing2D;
-using System.Linq;
-
-namespace Sunny.UI
-{
- ///
- /// 数学扩展类
- ///
- public static class MathEx
- {
- public static double CalcDistance(PointF pt1, PointF pt2)
- {
- float xx = pt1.X - pt2.X;
- float yy = pt1.Y - pt2.Y;
- return Math.Sqrt(xx * xx + yy * yy);
- }
-
- public static double CalcDistance(Point pt1, Point pt2)
- {
- int xx = pt1.X - pt2.X;
- int yy = pt1.Y - pt2.Y;
- return Math.Sqrt(xx * xx + yy * yy);
- }
-
- public static double CalcAngle(Point thisPoint, Point toPoint)
- {
- double az = Math.Atan2(thisPoint.Y - toPoint.Y, thisPoint.X - toPoint.X) * 180 / Math.PI;
- az = (az - 270 + 720) % 360;
- return az;
- }
-
- public static double CalcAngle(PointF thisPoint, PointF toPoint)
- {
- double az = Math.Atan2(thisPoint.Y - toPoint.Y, thisPoint.X - toPoint.X) * 180 / Math.PI;
- az = (az - 270 + 720) % 360;
- return az;
- }
-
- ///
- /// 二分查找与最近值序号
- ///
- /// 列表
- /// 值
- /// 最近值序号
- public static int BinarySearchNearIndex(this IList list, T target) where T : IComparable
- {
- if (list.Count == 0) return -1;
- int i = 0, j = list.Count - 1;
-
- if (target.CompareTo(list[0]) == -1) return 0;
- if (target.CompareTo(list[j]) == 1) return list.Count - 1;
- while (i <= j)
- {
- var mid = (i + j) / 2;
- if (target.CompareTo(list[mid]) == 1) i = mid + 1;
- if (target.CompareTo(list[mid]) == -1) j = mid - 1;
- if (target.CompareTo(list[mid]) == 0) return mid;
- }
-
- if (i - 1 < 0) return i;
-
- TypeCode typeCode = Type.GetTypeCode(target.GetType());
- switch (typeCode)
- {
- case TypeCode.SByte:
- case TypeCode.Int16:
- case TypeCode.Int32:
- case TypeCode.Int64:
- return target.ToString().ToLong() - list[i - 1].ToString().ToLong() >
- list[i].ToString().ToLong() - target.ToString().ToLong() ? i : i - 1;
-
- case TypeCode.Byte:
- case TypeCode.UInt16:
- case TypeCode.UInt32:
- case TypeCode.UInt64:
- return target.ToString().ToULong() - list[i - 1].ToString().ToULong() >
- list[i].ToString().ToULong() - target.ToString().ToULong() ? i : i - 1;
-
- case TypeCode.Single:
- case TypeCode.Double:
- return target.ToString().ToDouble() - list[i - 1].ToString().ToDouble() >
- list[i].ToString().ToDouble() - target.ToString().ToDouble() ? i : i - 1;
-
- case TypeCode.Decimal:
- return target.ToString().ToDecimal() - list[i - 1].ToString().ToDecimal() >
- list[i].ToString().ToDecimal() - target.ToString().ToDecimal() ? i : i - 1;
-
- case TypeCode.DateTime:
- return target.ToString().ToDateTime() - list[i - 1].ToString().ToDateTime() >
- list[i].ToString().ToDateTime() - target.ToString().ToDateTime() ? i : i - 1;
-
- default: return i - 1;
- }
- }
-
- ///
- /// 二分查找与最近值序号
- ///
- /// 列表
- /// 值
- /// 最近值序号
- public static int BinarySearchNearIndex(this T[] list, T target) where T : IComparable
- {
- return BinarySearchNearIndex(list.ToList(), target);
- }
-
- /*
- ///
- /// 二分查找与最近值序号
- ///
- /// 列表
- /// 值
- /// 最近值序号
- public static int BinarySearch(List list, int target)
- {
- int i = 0, j = list.Count - 1;
- if (target < list[0]) return 0;
- if (target > list[j]) return list.Count - 1;
- while (i <= j)
- {
- var mid = (i + j) / 2;
- if (target > list[mid]) i = mid + 1;
- if (target < list[mid]) j = mid - 1;
- if (target == list[mid]) return mid;
- }
-
- if (i - 1 < 0) return i;
- if (Math.Abs(list[i - 1] - target) > Math.Abs(list[i] - target)) return i;
- else return i - 1;
- }
-
- ///
- /// 二分查找与最近值序号
- ///
- /// 列表
- /// 值
- /// 最近值序号
- public static int BinarySearch(int[] list, int target)
- {
- return BinarySearch(list.ToList(), target);
- }
- */
-
- public static T CheckLowerLimit(this T obj, T lowerLimit) where T : IComparable
- {
- return obj.CompareTo(lowerLimit) == -1 ? lowerLimit : obj;
- }
-
- public static T CheckUpperLimit(this T obj, T upperLimit) where T : IComparable
- {
- return obj.CompareTo(upperLimit) == 1 ? upperLimit : obj;
- }
-
- public static T CheckRange(this T obj, T lowerLimit, T upperLimit) where T : IComparable
- {
- if (lowerLimit.CompareTo(upperLimit) == -1)
- return obj.CheckLowerLimit(lowerLimit).CheckUpperLimit(upperLimit);
- else if (lowerLimit.CompareTo(upperLimit) == 1)
- return obj.CheckLowerLimit(upperLimit).CheckUpperLimit(lowerLimit);
- else
- return lowerLimit;
- }
-
- ///
- /// 点是否在区域内
- ///
- /// 点
- /// 区域范围
- /// 是否在区域内
- public static bool InRegion(this Point point, Region region)
- {
- return region.IsVisible(point);
- }
-
- ///
- /// 点是否在区域内
- ///
- /// 点
- /// 区域范围
- /// 是否在区域内
- public static bool InRegion(this Point point, Point[] points)
- {
- using (GraphicsPath path = points.Path())
- {
- using (Region region = path.Region())
- {
- return region.IsVisible(point);
- }
- }
- }
-
- ///
- /// 点是否在区域内
- ///
- /// 点
- /// 区域范围
- /// 是否在区域内
- public static bool InRegion(this PointF point, PointF[] points)
- {
- using (GraphicsPath path = points.Path())
- {
- using (Region region = path.Region())
- {
- return region.IsVisible(point);
- }
- }
- }
-
- ///
- /// 创建路径
- ///
- /// 点集合
- /// 路径
- public static GraphicsPath Path(this Point[] points)
- {
- GraphicsPath path = new GraphicsPath();
- path.Reset();
- path.AddPolygon(points);
- return path;
- }
-
- ///
- /// 创建路径
- ///
- /// 点集合
- /// 路径
- public static GraphicsPath Path(this PointF[] points)
- {
- GraphicsPath path = new GraphicsPath();
- path.Reset();
- path.AddPolygon(points);
- return path;
- }
-
- ///
- /// 创建区域
- ///
- /// 路径
- /// 区域
- public static Region Region(this GraphicsPath path)
- {
- Region region = new Region();
- region.MakeEmpty();
- region.Union(path);
- return region;
- }
-
- ///
- /// 十六进制转十进制
- ///
- /// str
- /// int
- public static int HexToInt(this string str)
- {
- return Convert.ToInt32(str, 16);
- }
-
- ///
- /// 二进制转十进制
- ///
- /// str
- /// int
- public static int BinToInt(this string str)
- {
- return Convert.ToInt32(str, 2);
- }
-
- ///
- /// 十进制转十六进制
- ///
- /// value
- /// length
- /// string
- public static string ToHex(this int value, int length = 0)
- {
- string str = Convert.ToString(value, 16).ToUpper();
- str = str.Length.Mod(2) == 0 ? str : "0" + str;
-
- if (length == 0)
- {
- return str;
- }
-
- if (str.Length >= length)
- {
- return str;
- }
-
- return str.PadLeft(length, '0');
- }
-
- ///
- /// 十进制转二进制
- ///
- /// value
- /// length
- /// string
- public static string ToBin(this int value, int length = 0)
- {
- string str = Convert.ToString(value, 2);
- if (length == 0)
- {
- return str;
- }
-
- if (str.Length >= length)
- {
- return str;
- }
-
- return str.PadLeft(length, '0');
- }
-
- ///
- /// 取整
- ///
- /// 值
- /// 结果
- public static int RoundEx(this double value)
- {
- return (int)(value + 0.5);
- }
-
- ///
- /// 取整
- ///
- /// 值
- /// 结果
- public static int RoundEx(this float value)
- {
- return (int)(value + 0.5f);
- }
-
- ///
- /// 判断浮点数相等
- ///
- /// A
- /// B
- /// 范围
- /// 结果
- public static bool EqualsFloat(this float valueA, float valueB, float eps = 0.00000001f)
- {
- return Math.Abs(valueA - valueB) < eps;
- }
-
- ///
- /// 判断双精度数是否相等
- ///
- /// A
- /// B
- /// 范围
- /// 结果
- public static bool EqualsDouble(this double valueA, double valueB, float eps = 0.00000001f)
- {
- return Math.Abs(valueA - valueB) < eps;
- }
-
- ///
- /// 除取整
- ///
- /// 值
- /// 除数
- /// 结果
- public static int Div(this int value, int divParam)
- {
- return value / divParam;
- }
-
- ///
- /// 除取余
- ///
- /// 值
- /// 除数
- /// 结果
- public static int Mod(this int value, int divParam)
- {
- return value % divParam;
- }
-
- ///
- /// 角度转弧度
- ///
- /// 角度
- /// 弧度
- public static double Rad(this double d)
- {
- return d * Math.PI / 180.0;
- }
-
- ///
- /// 弧度转角度
- ///
- /// 弧度
- /// 角度
- public static double Deg(this double rad)
- {
- return rad * 180.0 / Math.PI;
- }
-
- ///
- /// 角度转弧度
- ///
- /// 角度
- /// 弧度
- public static double Rad(this float d)
- {
- return d * Math.PI / 180.0;
- }
-
- ///
- /// 弧度转角度
- ///
- /// 弧度
- /// 角度
- public static double Deg(this float rad)
- {
- return rad * 180.0 / Math.PI;
- }
-
- ///
- /// 是否为0
- ///
- /// 值
- /// 结果
- public static bool IsZero(this double value)
- {
- return (value >= -double.Epsilon && value <= double.Epsilon);
- }
-
- ///
- /// 是否为0
- ///
- /// 值
- /// 结果
- public static bool IsZero(this float value)
- {
- return (value >= -float.Epsilon && value <= float.Epsilon);
- }
-
- /// Checks whether the value is in range
- /// The Value
- /// The minimum value
- /// The maximum value
- /// 结果
- public static bool InRange(this float value, float minValue, float maxValue)
- {
- return (value >= minValue && value <= maxValue);
- }
-
- /// Checks whether the value is in range or returns the default value
- /// The Value
- /// The minimum value
- /// The maximum value
- /// The default value
- /// 结果
- public static float InRange(this float value, float minValue, float maxValue, float defaultValue)
- {
- return value.InRange(minValue, maxValue) ? value : defaultValue;
- }
-
- /// Checks whether the value is in range
- /// The Value
- /// The minimum value
- /// The maximum value
- /// 结果
- public static bool InRange(this double value, double minValue, double maxValue)
- {
- return (value >= minValue && value <= maxValue);
- }
-
- /// Checks whether the value is in range or returns the default value
- /// The Value
- /// The minimum value
- /// The maximum value
- /// The default value
- /// 结果
- public static double InRange(this double value, double minValue, double maxValue, double defaultValue)
- {
- return value.InRange(minValue, maxValue) ? value : defaultValue;
- }
-
- ///
- /// 是否是偶数
- ///
- /// The Value
- /// true or false
- public static bool IsEven(this int value)
- {
- return value % 2 == 0;
- }
-
- ///
- /// 是否是奇数
- ///
- /// The Value
- /// true or false
- public static bool IsOdd(this int value)
- {
- return value % 2 != 0;
- }
-
- /// Checks whether the value is in range
- /// The Value
- /// The minimum value
- /// The maximum value
- /// 结果
- public static bool InRange(this int value, int minValue, int maxValue)
- {
- return (value >= minValue && value <= maxValue);
- }
-
- /// Checks whether the value is in range or returns the default value
- /// The Value
- /// The minimum value
- /// The maximum value
- /// The default value
- /// 结果
- public static int InRange(this int value, int minValue, int maxValue, int defaultValue)
- {
- return value.InRange(minValue, maxValue) ? value : defaultValue;
- }
-
- ///
- /// Determines whether the value is even
- ///
- /// The Value
- /// true or false
- public static bool IsEven(this long value)
- {
- return value % 2 == 0;
- }
-
- ///
- /// Determines whether the value is odd
- ///
- /// The Value
- /// true or false
- public static bool IsOdd(this long value)
- {
- return value % 2 != 0;
- }
-
- /// Checks whether the value is in range
- /// The Value
- /// The minimum value
- /// The maximum value
- /// 结果
- public static bool InRange(this long value, long minValue, long maxValue)
- {
- return (value >= minValue && value <= maxValue);
- }
-
- /// Checks whether the value is in range or returns the default value
- /// The Value
- /// The minimum value
- /// The maximum value
- /// The default value
- /// 结果
- public static long InRange(this long value, long minValue, long maxValue, long defaultValue)
- {
- return value.InRange(minValue, maxValue) ? value : defaultValue;
- }
-
- ///
- /// Converts the value of this instance to its equivalent string representation (either "Yes" or "No").
- ///
- /// 是否
- /// string
- public static string ToYesNoString(this bool boolean)
- {
- return boolean ? "Yes" : "No";
- }
-
- ///
- /// Converts the value of this instance to its equivalent string representation (either "True" or "False").
- ///
- /// 是否
- /// string
- public static string ToTrueFalseString(this bool boolean)
- {
- return boolean ? "True" : "False";
- }
-
- ///
- /// Converts the value in number format {1 , 0}.
- ///
- /// 是否
- /// int
- public static int ToInt(this bool boolean)
- {
- return boolean ? 1 : 0;
- }
-
- ///
- /// Converts the value in number format {1 , 0}.
- ///
- /// 是否
- /// byte
- public static byte ToByte(this bool boolean)
- {
- return (byte)ToInt(boolean);
- }
-
- ///
- /// Converts number format {1 , 0} to bool value.
- ///
- /// int
- /// 是否
- /// 结果
- public static bool ToBool(this int value, bool Default = false)
- {
- switch (value)
- {
- case 1:
- return true;
-
- case 0:
- return false;
- }
-
- return Default;
- }
-
- ///
- /// Converts number format {1 , 0} to bool value.
- ///
- /// byte
- /// 是否
- /// 结果
- public static bool ToBool(this byte value, bool Default = false)
- {
- switch (value)
- {
- case 1:
- return true;
-
- case 0:
- return false;
- }
-
- return Default;
- }
-
- ///
- /// 二进制
- ///
- public const string CHARS_BINARY = "01";
-
- ///
- /// 四进制
- ///
- public const string CHARS_QUATERNARY = "0123";
-
- ///
- /// 六进制
- ///
- public const string CHARS_SEPTENARY = "012345";
-
- ///
- /// 八进制
- ///
- public const string CHARS_OCTAL = "01234567";
-
- ///
- /// 十进制
- ///
- public const string CHARS_DECIMAL = "0123456789";
-
- ///
- /// 十二进制
- ///
- public const string CHARS_DUODECIMAL = "0123456789MN";
-
- ///
- /// 十六进制
- ///
- public const string CHARS_HEX = "0123456789ABCDEF";
-
- ///
- /// 纯大写字母
- ///
- public const string CHARS_PUREUPPERCHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
- ///
- /// 纯字母(包含大小写)
- ///
- public const string CHARS_PURECHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
- ///
- /// 大写字母和数字
- ///
- public const string CHARS_36 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-
- ///
- /// 字母和数字
- ///
- public const string CHARS_62 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
-
- ///
- /// 字符串转换进制
- ///
- public enum Characters
- {
- ///
- /// 二进制 "01"
- ///
- [DisplayText(CHARS_BINARY)]
- BINARY,
-
- ///
- /// 四进制 "0123"
- ///
- [DisplayText(CHARS_QUATERNARY)]
- QUATERNARY,
-
- ///
- /// 六进制 "012345"
- ///
- [DisplayText(CHARS_SEPTENARY)]
- SEPTENARY,
-
- ///
- /// 八进制 "01234567"
- ///
- [DisplayText(CHARS_OCTAL)]
- OCTAL,
-
- ///
- /// 十进制 "0123456789"
- ///
- [DisplayText(CHARS_DECIMAL)]
- DECIMAL,
-
- ///
- /// 十二进制 "0123456789MN"
- ///
- [DisplayText(CHARS_DUODECIMAL)]
- DUODECIMAL,
-
- ///
- /// 十六进制 "0123456789ABCDEF"
- ///
- [DisplayText(CHARS_HEX)]
- HEX,
-
- ///
- /// 自定义 默认 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- ///
- [DisplayText(CHARS_PUREUPPERCHAR)]
- Custom
- }
-
- ///
- /// 数字转换为指定的进制形式字符串
- ///
- /// 待转换数字
- /// 进制格式
- /// 自定义进制字符串
- /// 结果
- public static string ToNumberString(this ulong number, Characters characters = Characters.DECIMAL, string customCharacter = CHARS_PUREUPPERCHAR)
- {
- string DisplayText = characters.DisplayText();
- if (characters == Characters.Custom && !customCharacter.IsNullOrEmpty())
- {
- DisplayText = customCharacter;
- }
-
- List result = new List();
- ulong t = number;
- if (t == 0)
- {
- return DisplayText[0].ToString();
- }
-
- while (t > 0)
- {
- ulong mod = t % ((ulong)DisplayText.Length);
- t /= ((ulong)DisplayText.Length);
- string character = DisplayText[Convert.ToInt32(mod)].ToString();
- result.Insert(0, character);
- }
-
- return string.Join("", result.ToArray());
- }
-
- public static string ToNumberString(this uint number, Characters characters = Characters.DECIMAL,
- string customCharacter = CHARS_PUREUPPERCHAR)
- {
- return ((ulong)number).ToNumberString(characters, customCharacter);
- }
-
- public static string ToNumberString(this ushort number, Characters characters = Characters.DECIMAL,
- string customCharacter = CHARS_PUREUPPERCHAR)
- {
- return ((ulong)number).ToNumberString(characters, customCharacter);
- }
-
- public static string ToNumberString(this byte number, Characters characters = Characters.DECIMAL,
- string customCharacter = CHARS_PUREUPPERCHAR)
- {
- return ((ulong)number).ToNumberString(characters, customCharacter);
- }
-
- ///
- /// 指定字符串转换为指定进制的数字形式
- ///
- /// 字符串
- /// 进制格式
- /// 自定义进制字符串
- /// 结果
- public static long ToNumberLong(this string str, Characters characters = Characters.DECIMAL, string customCharacter = CHARS_PUREUPPERCHAR)
- {
- string DisplayText = characters.DisplayText();
- if (characters == Characters.Custom && !customCharacter.IsNullOrEmpty())
- {
- DisplayText = customCharacter;
- }
-
- long result = 0;
- int j = 0;
- foreach (var ch in new string(str.ToCharArray().Reverse().ToArray()))
- {
- if (!DisplayText.Contains(ch))
- {
- continue;
- }
-
- result += DisplayText.IndexOf(ch) * ((long)Math.Pow(DisplayText.Length, j));
- j++;
- }
-
- return result;
- }
-
- ///
- /// 转换人民币大小金额
- ///
- /// 金额
- /// 返回大写形式
- public static string ToRMBString(this decimal num)
- {
- const string Str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字
- string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字
- string str5 = ""; //人民币大写金额形式
- int i; //循环变量
- string ch2 = ""; //数字位的汉字读法
- int nzero = 0; //用来计算连续的零值是几个
-
- num = Math.Round(Math.Abs(num), 2); //将num取绝对值并四舍五入取2位小数
- string str4 = ((long)(num * 100)).ToString();
- int j = str4.Length;
- if (j > 15)
- {
- return "溢出";
- }
-
- str2 = str2.Substring(15 - j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分
-
- //循环取出每一位需要转换的值
- for (i = 0; i < j; i++)
- {
- string str3 = str4.Substring(i, 1); //从原num值中取出的值
- int temp = Convert.ToInt32(str3); //从原num值中取出的值
- string ch1; //数字的汉语读法
- if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15))
- {
- //当所取位数不为元、万、亿、万亿上的数字时
- if (str3 == "0")
- {
- ch1 = "";
- ch2 = "";
- nzero = nzero + 1;
- }
- else
- {
- if (str3 != "0" && nzero != 0)
- {
- ch1 = "零" + Str1.Substring(temp * 1, 1);
- ch2 = str2.Substring(i, 1);
- nzero = 0;
- }
- else
- {
- ch1 = Str1.Substring(temp * 1, 1);
- ch2 = str2.Substring(i, 1);
- nzero = 0;
- }
- }
- }
- else
- {
- //该位是万亿,亿,万,元位等关键位
- if (str3 != "0" && nzero != 0)
- {
- ch1 = "零" + Str1.Substring(temp * 1, 1);
- ch2 = str2.Substring(i, 1);
- nzero = 0;
- }
- else
- {
- if (str3 != "0" && nzero == 0)
- {
- ch1 = Str1.Substring(temp * 1, 1);
- ch2 = str2.Substring(i, 1);
- nzero = 0;
- }
- else
- {
- if (str3 == "0" && nzero >= 3)
- {
- ch1 = "";
- ch2 = "";
- nzero = nzero + 1;
- }
- else
- {
- if (j >= 11)
- {
- ch1 = "";
- nzero = nzero + 1;
- }
- else
- {
- ch1 = "";
- ch2 = str2.Substring(i, 1);
- nzero = nzero + 1;
- }
- }
- }
- }
- }
-
- if (i == (j - 11) || i == (j - 3))
- {
- //如果该位是亿位或元位,则必须写上
- ch2 = str2.Substring(i, 1);
- }
-
- str5 = str5 + ch1 + ch2;
-
- if (i == j - 1 && str3 == "0")
- {
- //最后一位(分)为0时,加上“整”
- str5 = str5 + '整';
- }
- }
-
- if (num == 0)
- {
- str5 = "零元整";
- }
-
- return str5;
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Static/UPrivilegeAPI.cs b/SunnyUI/Static/UPrivilegeAPI.cs
index ab9e228a..f3bc303a 100644
--- a/SunnyUI/Static/UPrivilegeAPI.cs
+++ b/SunnyUI/Static/UPrivilegeAPI.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UPrivilegeAPI.cs
* 文件说明: 系统权限管理类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
@@ -154,7 +154,7 @@ namespace Sunny.UI
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool AdjustTokenPrivileges(IntPtr TokenHandle,
[MarshalAs(UnmanagedType.Bool)] bool DisableAllPrivileges,
- [MarshalAs(UnmanagedType.Struct)]ref TOKEN_PRIVILEGES NewState,
+ [MarshalAs(UnmanagedType.Struct)] ref TOKEN_PRIVILEGES NewState,
uint BufferLength, IntPtr PreviousState, uint ReturnLength);
// 如果进程的访问令牌中没有关联某权限,则AdjustTokenPrivileges函数调用将会返回错误码ERROR_NOT_ALL_ASSIGNED(值为1300)
diff --git a/SunnyUI/Static/URandom.cs b/SunnyUI/Static/URandom.cs
deleted file mode 100644
index 7986df8a..00000000
--- a/SunnyUI/Static/URandom.cs
+++ /dev/null
@@ -1,226 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: URandom.cs
- * 文件说明: 随机数扩展类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Text;
-
-namespace Sunny.UI
-{
- ///
- /// 随机数扩展类
- ///
- public static class RandomEx
- {
- ///
- /// 随机长整形
- ///
- /// 结果
- public static long RandomLong()
- {
- byte[] buffer = Guid.NewGuid().ToByteArray();
- return BitConverter.ToInt64(buffer, 0);
- }
-
- ///
- /// 生成随机纯字母随机字符串
- ///
- /// 生成长度
- /// 结果
- public static string RandomPureChar(int length = 10)
- {
- return RandomBase(MathEx.CHARS_PUREUPPERCHAR.ToCharArray(), length);
- }
-
- ///
- /// 生成字母和数字的随机字符串
- ///
- /// 长度
- /// 结果
- public static string RandomChars(int length = 10)
- {
- return RandomBase(MathEx.CHARS_62.ToCharArray(), length);
- }
-
- ///
- /// 生成随机数字
- ///
- /// 生成长度
- /// 首字母可以为0
- /// 结果
- public static string RandomNumber(int length = 18, bool firstcanbezero = true)
- {
- string str = RandomBase(MathEx.CHARS_DECIMAL.ToCharArray(), length);
- if (firstcanbezero)
- {
- return str;
- }
-
- while (str.Left(1) == "0")
- {
- str = RandomBase(MathEx.CHARS_DECIMAL.ToCharArray(), length);
- }
-
- return str;
- }
-
- private static string RandomBase(char[] pattern, int length)
- {
- if (pattern.IsNullOrEmpty())
- {
- throw new ArgumentNullException();
- }
-
- string result = "";
- for (int i = 0; i < length; i++)
- {
- Random random = new Random(RandomSeed());
- result += pattern[random.Next(0, pattern.Length)];
- }
-
- return result;
- }
-
- ///
- /// 随机数种子
- ///
- /// 结果
- public static int RandomSeed()
- {
- return Guid.NewGuid().GetHashCode();
- }
-
- ///
- /// 可以随机生成一个长度为2的十六进制字节数组,
- /// 使用GetString ()方法对其进行解码就可以得到汉字字符了。
- /// 不过对于生成中文汉字验证码来说,因为第15区也就是AF区以前都没有汉字,
- /// 只有少量符号,汉字都从第16区B0开始,并且从区位D7开始以后的汉字都是和很难见到的繁杂汉字,
- /// 所以这些都要排出掉。所以随机生成的汉字十六进制区位码第1位范围在B、C、D之间,
- /// 如果第1位是D的话,第2位区位码就不能是7以后的十六进制数。
- /// 在来看看区位码表发现每区的第一个位置和最后一个位置都是空的,没有汉字,
- /// 因此随机生成的区位码第3位如果是A的话,第4位就不能是0;第3位如果是F的话,
- /// 第4位就不能是F。知道了原理,随机生成中文汉字的程序也就出来了,
- /// 以下就是生成长度为N的随机汉字C#台代码:
- ///
- /// 长度
- /// 字符串
- public static string RandomChinese(int length = 6)
- {
- // 获取GB2312编码页(表)
- Encoding gb = Encoding.GetEncoding("gb2312");
- object[] bytes = CreateRegionCode(length);
- var sb = new StringBuilder();
- for (int i = 0; i < length; i++)
- {
- string temp = gb.GetString((byte[])Convert.ChangeType(bytes[i], typeof(byte[])));
- sb.Append(temp);
- }
-
- return sb.ToString();
- }
-
- ///
- /// 此函数在汉字编码范围内随机创建含两个元素的十六进制字节数组,每个字节数组代表一个汉字,并将
- /// 四个字节数组存储在object数组中。
- ///
- /// 代表需要产生的汉字个数
- /// 结果
- private static object[] CreateRegionCode(int length)
- {
- //定义一个字符串数组储存汉字编码的组成元素
- var rBase = new[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
- //定义一个object数组用来
- var bytes = new object[length];
- //每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bytes数组中
- //每个汉字有四个区位码组成
- //区位码第1位和区位码第2位作为字节数组第一个元素
- //区位码第3位和区位码第4位作为字节数组第二个元素
- for (int i = 0; i < length; i++)
- {
- //区位码第1位
- var rnd = new Random(RandomSeed());
- int r1 = rnd.Next(11, 14);
- string strR1 = rBase[r1].Trim();
- //区位码第2位
- rnd = new Random(RandomSeed()); // 更换随机数发生器的 种子避免产生重复值
- int r2 = rnd.Next(0, r1 == 13 ? 7 : 16);
- string strR2 = rBase[r2].Trim();
- //区位码第3位
- rnd = new Random(RandomSeed());
- int r3 = rnd.Next(10, 16);
- string strR3 = rBase[r3].Trim();
- //区位码第4位
- rnd = new Random(RandomSeed());
- int r4;
- switch (r3)
- {
- case 10:
- r4 = rnd.Next(1, 16);
- break;
-
- case 15:
- r4 = rnd.Next(0, 15);
- break;
-
- default:
- r4 = rnd.Next(0, 16);
- break;
- }
-
- string strR4 = rBase[r4].Trim();
- // 定义两个字节变量存储产生的随机汉字区位码
- byte byte1 = Convert.ToByte(strR1 + strR2, 16);
- byte byte2 = Convert.ToByte(strR3 + strR4, 16);
- // 将两个字节变量存储在字节数组中
- byte[] strR = { byte1, byte2 };
- // 将产生的一个汉字的字节数组放入object数组中
- bytes.SetValue(strR, i);
- }
-
- return bytes;
- }
-
- ///
- /// 此函数为生成指定数目的汉字
- ///
- /// 汉字数目
- /// 所有汉字
- public static string RandomChineseEx(int length = 6)
- {
- var charArrary = new string[length];
- var rand = new Random();
- for (int i = 0; i < length; i++)
- {
- int area = rand.Next(16, 88); //汉字由区位和码位组成(都为0-94,其中区位16-55为一级汉字区,56-87为二级汉字区,1-9为特殊字符区)
- int code = rand.Next(1, area == 55 ? 90 : 94);
- charArrary[i] = Encoding.GetEncoding("GB2312")
- .GetString(new[] { Convert.ToByte(area + 160), Convert.ToByte(code + 160) });
- }
-
- var sb = new StringBuilder();
- foreach (string t in charArrary)
- {
- sb.Append(t);
- }
-
- return sb.ToString();
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Static/UScrollBarInfo.cs b/SunnyUI/Static/UScrollBarInfo.cs
index 6a4c5fc4..159bfe42 100644
--- a/SunnyUI/Static/UScrollBarInfo.cs
+++ b/SunnyUI/Static/UScrollBarInfo.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UScrollBarInfo.cs
* 文件说明: 滚动条信息获取类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Static/UString.cs b/SunnyUI/Static/UString.cs
deleted file mode 100644
index 6521e514..00000000
--- a/SunnyUI/Static/UString.cs
+++ /dev/null
@@ -1,1274 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UString.cs
- * 文件说明: 字符串扩展类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Runtime.InteropServices;
-using System.Security;
-using System.Security.Cryptography;
-using System.Text;
-using System.Text.RegularExpressions;
-
-namespace Sunny.UI
-{
- ///
- /// 字符串扩展类
- ///
- public static class StringEx
- {
- ///
- /// 处理文件夹名称末尾加文件夹分隔符(windows为\,linux为/)
- ///
- /// 文件夹名称
- /// 结果
- public static string DealPath(this string dir)
- {
- return dir.IsNullOrEmpty() ? dir : (dir[dir.Length - 1] == Path.DirectorySeparatorChar ? dir : dir + Path.DirectorySeparatorChar);
- }
-
- ///
- /// 默认加密密码
- ///
- public const string DefaultCryptString = "!@#$%^&*";
-
- ///
- /// 浮点数的格式化字符串(例如:0.00)
- ///
- /// 小数位数
- /// 字符串
- public static string FormatString(this int decimalcount)
- {
- if (decimalcount <= 0)
- {
- return "0";
- }
-
- return "0." + "0".Repet(decimalcount);
- }
-
- /// 忽略大小写的字符串相等比较,判断是否以任意一个待比较字符串相等
- /// 字符串
- /// 待比较字符串数组
- /// 相等比较
- public static bool EqualsIgnoreCase(this string value, params string[] strs)
- {
- foreach (var item in strs)
- {
- if (string.Equals(value, item, StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
- }
-
- return false;
- }
-
- /// 忽略大小写的字符串相等比较,判断是否以任意一个待比较字符串相等
- /// 字符串
- /// 待比较字符串
- /// 相等比较
- public static bool EqualsIgnoreCase(this string value, string comparestring)
- {
- return string.Equals(value, comparestring, StringComparison.OrdinalIgnoreCase);
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static bool ToBoolean(this string s, bool def = default(bool))
- {
- return bool.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static char ToChar(this string s, char def = default(char))
- {
- return char.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static decimal ToDecimal(this string s, decimal def = default(decimal))
- {
- return decimal.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static double ToDouble(this string s, double def = default(double))
- {
- return double.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static float ToFloat(this string s, float def = default(float))
- {
- return float.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static byte ToByte(this string s, byte def = default(byte))
- {
- return byte.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static sbyte ToSByte(this string s, sbyte def = default(sbyte))
- {
- return sbyte.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static short ToShort(this string s, short def = default(short))
- {
- return short.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static ushort ToUShort(this string s, ushort def = default(ushort))
- {
- return ushort.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static int ToInt(this string s, int def = default(int))
- {
- return int.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static uint ToUInt(this string s, uint def = default(uint))
- {
- return uint.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static long ToLong(this string s, long def = default(long))
- {
- return long.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static ulong ToULong(this string s, ulong def = default(ulong))
- {
- return ulong.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static DateTime ToDateTime(this string s, DateTime def = default(DateTime))
- {
- return DateTime.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 字符串转换为日期
- ///
- /// 字符串
- /// 日期格式
- /// 结果
- public static DateTime ToDateTime(this string s, string formatString)
- {
- return DateTime.ParseExact(s, formatString, CultureInfo.InvariantCulture);
- }
-
- ///
- /// 字符串转换为日期
- ///
- /// 字符串
- /// 日期格式,可包含的格式化字符串为:yyyy、yy、MM、dd、HH、mm、ss、fff、:、-、空格
- /// 默认日期
- /// 结果
- public static DateTime ToDateTimeEx(this string s, string formatString, DateTime def = default(DateTime))
- {
- int year = def.Year;
- int month = def.Month;
- int day = def.Day;
- int hour = def.Hour;
- int minute = def.Minute;
- int second = def.Second;
- int millisecond = def.Millisecond;
- if (formatString.Contains("yyyy"))
- year = s.Substring(formatString.IndexOf("yyyy", StringComparison.CurrentCulture), 4).ToInt();
- else if (formatString.Contains("yy"))
- year = 2000 + s.Substring(formatString.IndexOf("yy", StringComparison.CurrentCulture), 2).ToInt();
-
- if (formatString.Contains("MM"))
- month = s.Substring(formatString.IndexOf("MM", StringComparison.CurrentCulture), 2).ToInt();
-
- if (formatString.Contains("dd"))
- day = s.Substring(formatString.IndexOf("dd", StringComparison.CurrentCulture), 2).ToInt();
-
- if (formatString.Contains("HH"))
- hour = s.Substring(formatString.IndexOf("HH", StringComparison.CurrentCulture), 2).ToInt();
-
- if (formatString.Contains("mm"))
- minute = s.Substring(formatString.IndexOf("mm", StringComparison.CurrentCulture), 2).ToInt();
-
- if (formatString.Contains("ss"))
- second = s.Substring(formatString.IndexOf("ss", StringComparison.CurrentCulture), 2).ToInt();
-
- if (formatString.Contains("fff"))
- millisecond = s.Substring(formatString.IndexOf("fff", StringComparison.CurrentCulture), 3).ToInt();
-
- try
- {
- return new DateTime(year, month, day, hour, minute, second, millisecond);
- }
- catch
- {
- return def;
- }
- }
-
- ///
- /// 字符串转换
- ///
- /// 字符串
- /// 默认
- /// 结果
- public static Guid ToGuid(this string s, Guid def = default(Guid))
- {
- return Guid.TryParse(s, out var result) ? result : def;
- }
-
- ///
- /// 是否是布尔字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsBoolean(this string s)
- {
- return bool.TryParse(s, out _);
- }
-
- ///
- /// 是否是Char字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsChar(this string s)
- {
- return char.TryParse(s, out _);
- }
-
- ///
- /// 是否是Decima字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsDecimal(this string s)
- {
- return decimal.TryParse(s, out decimal _);
- }
-
- ///
- /// 是否是Double字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsDouble(this string s)
- {
- return double.TryParse(s, out _);
- }
-
- ///
- /// 是否是Float字符串转换
- ///
- /// 字符串
- /// 结果
- public static bool IsFloat(this string s)
- {
- return float.TryParse(s, out float _);
- }
-
- ///
- /// 是否是Byte字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsByte(this string s)
- {
- return byte.TryParse(s, out _);
- }
-
- ///
- /// 是否是SByte字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsSByte(this string s)
- {
- return sbyte.TryParse(s, out _);
- }
-
- ///
- /// 是否是Short字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsShort(this string s)
- {
- return short.TryParse(s, out _);
- }
-
- ///
- /// 是否是UShort字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsUShort(this string s)
- {
- return ushort.TryParse(s, out _);
- }
-
- ///
- /// 是否是Int字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsInt(this string s)
- {
- return int.TryParse(s, out _);
- }
-
- ///
- /// 是否是UInt字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsUInt(this string s)
- {
- return uint.TryParse(s, out _);
- }
-
- ///
- /// 是否是Long字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsLong(this string s)
- {
- return long.TryParse(s, out _);
- }
-
- ///
- /// 是否是ULong字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsULong(this string s)
- {
- return ulong.TryParse(s, out _);
- }
-
- ///
- /// 是否是日期字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsDateTime(this string s)
- {
- return DateTime.TryParse(s, out _);
- }
-
- ///
- /// 是否是Guid字符串
- ///
- /// 字符串
- /// 结果
- public static bool IsGuid(this string s)
- {
- return Guid.TryParse(s, out _);
- }
-
- ///
- /// 结果序列化字符串
- /// [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
- ///
- public const string StructLayoutString = "[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]";
-
- ///
- /// 字符串重复显示
- ///
- /// The string.
- /// The count.
- /// System.String.
- public static string Repet(this string str, int count)
- {
- if (count <= 0)
- {
- return string.Empty;
- }
-
- StringBuilder sb = new StringBuilder();
- sb.Append("");
- for (int i = 0; i < count; i++)
- {
- sb.Append(str);
- }
-
- return sb.ToString();
- }
-
- ///
- /// 字符串左侧按长度截取后的字符串
- ///
- /// 字符串
- /// 长度
- /// 字符串
- public static string Left(this string s, int length)
- {
- return s.IsNullOrEmpty() ? s : (length <= s.Length ? s.Substring(0, length) : s);
- }
-
- ///
- /// 字符串中间按长度截取后的字符串
- ///
- /// 字符串
- /// 开始
- /// 长度
- /// 字符串
- public static string Middle(this string s, int start, int length)
- {
- return s.IsNullOrEmpty() ? s : (length <= s.Length - start ? s.Substring(start, length) : s.Substring(start, s.Length - start));
- }
-
- ///
- /// 指示指定的字符串是 null还是 Empty 字符串。
- ///
- /// 字符串
- /// 结果
- public static bool IsNullOrEmpty(this string s)
- {
- return string.IsNullOrEmpty(s);
- }
-
- ///
- /// 指示指定的字符串是 null还是 Empty 字符串。
- ///
- /// 字符串
- /// 结果
- public static bool IsValid(this string s)
- {
- return !string.IsNullOrEmpty(s);
- }
-
- ///
- /// 截取指定长度的字符串
- ///
- /// 字符串
- /// 长度
- /// 结果
- public static string TrimToMaxLength(this string value, int maxLength)
- {
- return (value == null || value.Length <= maxLength ? value : value.Substring(0, maxLength));
- }
-
- ///
- /// 字符串为空时返回缺省值,不为空时直接返回原字符串
- ///
- /// value
- /// defaultValue
- /// 结果
- public static string IfEmpty(this string value, string defaultValue)
- {
- return (value.IsNullOrEmpty() ? defaultValue : value);
- }
-
- ///
- /// 指示指定的字符串是 null、空还是仅由空白字符组成。
- ///
- /// 字符串
- /// 结果
- public static bool IsNullOrWhiteSpace(this string s)
- {
- return string.IsNullOrWhiteSpace(s);
- }
-
- ///
- /// 字符串右侧按长度截取后的字符串
- ///
- /// 字符串
- /// 长度
- /// 字符串
- public static string Right(this string s, int length)
- {
- if (s.IsNullOrEmpty())
- {
- return s;
- }
-
- return length >= s.Length ? s : s.Substring(s.Length - length, length);
- }
-
- ///
- /// 是否数字字符串
- ///
- /// 输入字符串
- /// 结果
- public static bool IsNumber(this string s)
- {
- Regex regNumber = new Regex("^[0-9]+$");
- return regNumber.Match(s).Success;
- }
-
- ///
- /// 是否数字字符串 可带正负号
- ///
- /// 输入字符串
- /// 结果
- public static bool IsNumberWithSign(this string s)
- {
- Regex regNumberSign = new Regex("^[+-]?[0-9]+$");
- return regNumberSign.Match(s).Success;
- }
-
- ///
- /// 检测是否有中文字符
- ///
- /// 字符串
- /// 结果
- public static bool HasCnChar(this string s)
- {
- Regex regChzn = new Regex("[\u4e00-\u9fa5]");
- return regChzn.Match(s).Success;
- }
-
- ///
- /// 使用utf8编码将字符串散列
- ///
- /// 要散列的字符串
- /// 散列后的字符串
- public static string Md5String(this string s)
- {
- return s.Md5String(Encoding.UTF8).ToUpper();
- }
-
- ///
- /// 使用指定的编码将字符串散列
- ///
- /// 要散列的字符串
- /// 编码
- /// 散列后的字符串
- private static string Md5String(this string s, Encoding encode)
- {
- MD5 md5 = MD5.Create();
- try
- {
- byte[] source = md5.ComputeHash(encode.GetBytes(s));
- var sBuilder = new StringBuilder();
- foreach (byte str in source)
- {
- sBuilder.Append(str.ToString("x2"));
- }
-
- return sBuilder.ToString();
- }
- finally
- {
- md5.Dispose();
- }
- }
-
- ///
- /// DES加密
- ///
- /// 待加密字符串
- /// 密钥
- /// 加密后的字符串
- public static string DesEncrypt(this string s, string key = "")
- {
- try
- {
- string deskey = key + DefaultCryptString;
- byte[] keyBytes = Encoding.UTF8.GetBytes(deskey.Substring(0, 8));
- byte[] keyIv = keyBytes;
- byte[] inputByteArray = Encoding.UTF8.GetBytes(s);
- var provider = new DESCryptoServiceProvider();
- var mStream = new MemoryStream();
- var cStream = new CryptoStream(mStream, provider.CreateEncryptor(keyBytes, keyIv), CryptoStreamMode.Write);
- cStream.Write(inputByteArray, 0, inputByteArray.Length);
- cStream.FlushFinalBlock();
- return Convert.ToBase64String(mStream.ToArray());
- }
- catch
- {
- return "";
- }
- }
-
- ///
- /// DES解密
- ///
- /// 待解密字符串
- /// 密钥
- /// 解密后的字符串
- public static string DesDecrypt(this string s, string key = "")
- {
- try
- {
- string deskey = key + DefaultCryptString;
- byte[] keyBytes = Encoding.UTF8.GetBytes(deskey.Substring(0, 8));
- byte[] keyIv = keyBytes;
- byte[] inputByteArray = Convert.FromBase64String(s);
- var provider = new DESCryptoServiceProvider();
- var mStream = new MemoryStream();
- var cStream = new CryptoStream(mStream, provider.CreateDecryptor(keyBytes, keyIv), CryptoStreamMode.Write);
- cStream.Write(inputByteArray, 0, inputByteArray.Length);
- cStream.FlushFinalBlock();
- return Encoding.UTF8.GetString(mStream.ToArray());
- }
- catch
- {
- return "";
- }
- }
-
- ///
- /// DES加密
- ///
- /// 待加密字符串
- /// 密钥
- /// 加密后的字符串
- public static string MyEncrypt(this string s, string key = "")
- {
- try
- {
- string deskey = key + DefaultCryptString;
- byte[] keyBytes = Encoding.UTF8.GetBytes(deskey.Substring(0, 8));
- byte[] keyIv = keyBytes;
- byte[] inputByteArray = Encoding.UTF8.GetBytes(s);
- var provider = new DESCryptoServiceProvider();
- var mStream = new MemoryStream();
- var cStream = new CryptoStream(mStream, provider.CreateEncryptor(keyBytes, keyIv), CryptoStreamMode.Write);
- cStream.Write(inputByteArray, 0, inputByteArray.Length);
- cStream.FlushFinalBlock();
-
- string str = Convert.ToBase64String(mStream.ToArray());
- int cnt = 0;
- for (int i = str.Length - 1; i >= 0; i--)
- {
- if (str[i] == '=')
- {
- cnt++;
- }
- else
- {
- break;
- }
- }
-
- str = str.Left(str.Length - cnt) + cnt;
- return str;
- }
- catch
- {
- return "";
- }
- }
-
- ///
- /// DES解密
- ///
- /// 待解密字符串
- /// 密钥
- /// 解密后的字符串
- public static string MyDecrypt(this string s, string key = "")
- {
- try
- {
- string deskey = key + DefaultCryptString;
- byte[] keyBytes = Encoding.UTF8.GetBytes(deskey.Substring(0, 8));
- byte[] keyIv = keyBytes;
- int cnt = s.Right(1).ToInt();
- s = s.Left(s.Length - 1);
- for (int i = 0; i < cnt; i++)
- {
- s = s + "=";
- }
-
- byte[] inputByteArray = Convert.FromBase64String(s);
- var provider = new DESCryptoServiceProvider();
- var mStream = new MemoryStream();
- var cStream = new CryptoStream(mStream, provider.CreateDecryptor(keyBytes, keyIv), CryptoStreamMode.Write);
- cStream.Write(inputByteArray, 0, inputByteArray.Length);
- cStream.FlushFinalBlock();
- return Encoding.UTF8.GetString(mStream.ToArray());
- }
- catch
- {
- return "";
- }
- }
-
- ///
- /// 字符串是否为IP地址
- ///
- /// 字符串
- /// 结果
- public static bool IsIP4(this string s)
- {
- string[] strs = s.Split(".");
- if (strs.Length != 4)
- {
- return false;
- }
-
- foreach (string str in strs)
- {
- if (!str.Trim().IsNumber())
- {
- return false;
- }
-
- if (str.Trim().ToInt() < 0)
- {
- return false;
- }
-
- if (str.Trim().ToInt() > 255)
- {
- return false;
- }
- }
-
- return true;
- }
-
- ///
- /// 分割字符串
- ///
- /// 字符串
- /// 分隔符
- /// 忽略空字符串
- /// 结果
- public static string[] Split(this string s, string separator, bool ignoreEmpty = false)
- {
- string[] strs = s.Split(new[] { separator }, StringSplitOptions.None);
- if (!ignoreEmpty)
- {
- return strs;
- }
-
- List lsts = new List();
- foreach (var str in strs)
- {
- if (!str.IsNullOrEmpty())
- {
- lsts.Add(str);
- }
- }
-
- return lsts.ToArray();
- }
-
- ///
- /// 字符串包含分隔符的个数
- ///
- /// 字符串
- /// 分隔符
- /// 个数
- public static int SplitSeparatorCount(this string s, string separator)
- {
- if (!s.Contains(separator))
- {
- return 0;
- }
-
- string strReplaced = s.Replace(separator, "");
- return (s.Length - strReplaced.Length) / separator.Length;
- }
-
- ///
- /// 以分隔符分割后的最后一个字符串
- ///
- /// 字符串
- /// 分隔符
- /// 忽略空字符串
- /// 结果
- public static string SplitLast(this string s, string separator, bool ignoreEmpty = false)
- {
- string[] strs = s.Split(separator, ignoreEmpty);
- return strs.Length == 0 ? string.Empty : strs[strs.Length - 1];
- }
-
- ///
- /// 以分隔符分割后的第一个字符串
- ///
- /// 字符串
- /// 分隔符
- /// 忽略空字符串
- /// 结果
- public static string SplitFirst(this string s, string separator, bool ignoreEmpty = false)
- {
- string[] strs = s.Split(separator, ignoreEmpty);
- return strs.Length == 0 ? string.Empty : strs[0];
- }
-
- ///
- /// 返回字符串分割后指定索引的字符串
- ///
- /// 字符串
- /// 分隔符
- /// 索引
- /// 忽略空字符串
- /// 结果
- public static string SplitIndex(this string s, string separator, int index, bool ignoreEmpty = false)
- {
- string[] strs = s.Split(separator, ignoreEmpty);
- return strs.Length == 0 ? string.Empty : strs[index];
- }
-
- ///
- /// 以分隔符分割的最后一个字符串之前的字符串
- ///
- /// 字符串
- /// 分隔符
- /// 结果
- public static string SplitBeforeLast(this string s, string separator)
- {
- int iLast = s.LastIndexOf(separator, StringComparison.Ordinal);
- return iLast > 0 ? s.Substring(0, iLast) : s;
- }
-
- ///
- /// 检测输入的邮件地址是否合法,非法则返回true。
- ///
- /// 邮件
- /// 结果
- public static bool IsMail(this string s)
- {
- const string StrWords = "abcdefghijklmnopqrstuvwxyz_-.0123456789"; //定义合法字符范围
-
- string strTmp = s.Trim();
- //检测输入字符串是否为空,不为空时才执行代码。
- if (strTmp == "" || strTmp.Length == 0)
- {
- return false;
- }
-
- //判断邮件地址中是否存在一个“@”号
- if (s.SplitSeparatorCount("@") != 1)
- {
- return false;
- }
-
- //以“@”号为分割符,把地址切分成两部分,分别进行验证。
- string[] strChars = strTmp.Split('@');
- if (strChars.Length != 2)
- {
- return false;
- }
-
- if (strChars[0] == "" || strChars[1] == "")
- {
- return false;
- }
-
- foreach (string strChar in strChars)
- {
- //逐个字进行验证,如果超出所定义的字符范围strWords,则表示地址非法。
- int i;
- for (i = 0; i < strChar.Length; i++)
- {
- string strResult = strChar.Substring(i, 1).ToLower();
- if (SplitSeparatorCount(StrWords, strResult) == 0)
- {
- return false;
- }
- }
- }
-
- return true;
- }
-
- ///
- /// 英文字符串转换为ASCII编码的数组
- ///
- /// 字符串
- /// 长度
- /// 结果
- public static byte[] ToEnBytes(this string s, int len)
- {
- byte[] strs = ToEncodeBytes(s, Encoding.ASCII);
- byte[] result = new byte[len];
- Array.Copy(strs, 0, result, 0, Math.Min(strs.Length, len));
- return result;
- }
-
- ///
- /// ASCII编码的数组转换为英文字符串
- ///
- /// 字符串
- /// 结果
- public static string ToEnString(this byte[] s)
- {
- return ToEncodeString(s, Encoding.ASCII).Trim('\0').Trim();
- }
-
- ///
- /// 字符串按指定编码转换为数组
- ///
- /// 字符串
- /// 编码
- /// 结果
- public static byte[] ToEncodeBytes(this string dealString, Encoding encode)
- {
- byte[] outs = encode.GetBytes(dealString);
- return outs;
- }
-
- ///
- /// 数组按指定编码转换为字符串
- ///
- /// 数组
- /// 编码
- /// 结果
- public static string ToEncodeString(this byte[] dealBytes, Encoding encode)
- {
- return encode.GetString(dealBytes);
- }
-
- ///
- /// Gets the string before the given string parameter.
- ///
- /// The default value.
- /// The given string parameter.
- /// 结果
- /// Unlike GetBetween and GetAfter, this does not Trim the result.
- public static string Before(this string value, string x)
- {
- var xPos = value.IndexOf(x, StringComparison.Ordinal);
- return xPos == -1 ? string.Empty : value.Substring(0, xPos);
- }
-
- ///
- /// Gets the string between the given string parameters.
- ///
- /// The source value.
- /// The left string sentinel.
- /// The right string sentinel
- /// 结果
- /// Unlike GetBefore, this method trims the result
- public static string Between(this string value, string x, string y)
- {
- var xPos = value.IndexOf(x, StringComparison.Ordinal);
- var yPos = value.LastIndexOf(y, StringComparison.Ordinal);
-
- if (xPos == -1 || xPos == -1)
- {
- return string.Empty;
- }
-
- var startIndex = xPos + x.Length;
- return startIndex >= yPos ? string.Empty : value.Substring(startIndex, yPos - startIndex).Trim();
- }
-
- ///
- /// Gets the string after the given string parameter.
- ///
- /// The default value.
- /// The given string parameter.
- /// 结果
- /// Unlike GetBefore, this method trims the result
- public static string After(this string value, string x)
- {
- var xPos = value.LastIndexOf(x, StringComparison.Ordinal);
-
- if (xPos == -1)
- {
- return string.Empty;
- }
-
- var startIndex = xPos + x.Length;
- return startIndex >= value.Length ? string.Empty : value.Substring(startIndex).Trim();
- }
-
- ///
- /// Encodes the input value to a Base64 string using the default encoding.
- ///
- /// The input value.
- /// The Base 64 encoded string
- public static string Base64Encode(this string value)
- {
- return value.Base64Encode(null);
- }
-
- ///
- /// Encodes the input value to a Base64 string using the supplied encoding.
- ///
- /// The input value.
- /// The encoding.
- /// The Base 64 encoded string
- public static string Base64Encode(this string value, Encoding encoding)
- {
- encoding = (encoding ?? Encoding.UTF8);
- var bytes = encoding.GetBytes(value);
- return Convert.ToBase64String(bytes);
- }
-
- ///
- /// Decodes a Base 64 encoded value to a string using the default encoding.
- ///
- /// The Base 64 encoded value.
- /// The decoded string
- public static string Base64Decode(this string encodedValue)
- {
- return encodedValue.Base64Decode(null);
- }
-
- ///
- /// Decodes a Base 64 encoded value to a string using the supplied encoding.
- ///
- /// The Base 64 encoded value.
- /// The encoding.
- /// The decoded string
- public static string Base64Decode(this string encodedValue, Encoding encoding)
- {
- encoding = (encoding ?? Encoding.UTF8);
- var bytes = Convert.FromBase64String(encodedValue);
- return encoding.GetString(bytes);
- }
-
- ///
- /// Calculates the SHA1 hash of the supplied string and returns a base 64 string.
- ///
- /// String that must be hashed.
- /// The hashed string or null if hashing failed.
- /// Occurs when stringToHash or key is null or empty.
- public static string SHA1Hash(this string stringToHash)
- {
- if (stringToHash.IsNullOrEmpty())
- {
- return null;
- }
-
- byte[] data = Encoding.UTF8.GetBytes(stringToHash);
- byte[] hash = new SHA1CryptoServiceProvider().ComputeHash(data);
- return Convert.ToBase64String(hash);
- }
-
- ///
- /// Return the string with the leftmost number_of_characters characters removed.
- ///
- /// The string being extended
- /// The number of characters to remove.
- /// 结果
- public static string RemoveLeft(this string str, int number_of_characters)
- {
- if (str.Length <= number_of_characters)
- {
- return "";
- }
-
- return str.Substring(number_of_characters);
- }
-
- ///
- /// Return the string with the rightmost number_of_characters characters removed.
- ///
- /// The string being extended
- /// The number of characters to remove.
- /// 结果
- public static string RemoveRight(this string str, int number_of_characters)
- {
- if (str.Length <= number_of_characters)
- {
- return "";
- }
-
- return str.Substring(0, str.Length - number_of_characters);
- }
-
- ///
- /// Converts a regular string into SecureString
- ///
- /// String value.
- /// Makes the text value of this secure string read-only.
- /// Returns a SecureString containing the value of a transformed object.
- public static SecureString ToSecureString(this string u, bool makeReadOnly = true)
- {
- if (u.IsNullOrEmpty())
- {
- return null;
- }
-
- SecureString s = new SecureString();
- foreach (char c in u)
- {
- s.AppendChar(c);
- }
-
- if (makeReadOnly)
- {
- s.MakeReadOnly();
- }
-
- return s;
- }
-
- ///
- /// Coverts the SecureString to a regular string.
- ///
- /// Object value.
- /// Item of secured string.
- public static string ToUnSecureString(this SecureString s)
- {
- if (s == null)
- {
- return null;
- }
-
- IntPtr unmanagedString = IntPtr.Zero;
- try
- {
- unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(s);
- return Marshal.PtrToStringUni(unmanagedString);
- }
- finally
- {
- Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString);
- }
- }
-
- ///
- /// 压缩字符串
- ///
- /// 输入
- /// 结果
- public static string GZipCompress(this string input)
- {
- return input.IsNullOrEmpty() ? input : Convert.ToBase64String(Encoding.Default.GetBytes(input).GZipCompress());
- }
-
- ///
- /// 解压缩字符串
- ///
- /// 输入
- /// 结果
- public static string GZipDecompress(this string input)
- {
- return input.IsNullOrEmpty() ? input : Encoding.Default.GetString(Convert.FromBase64String(input).GZipDecompress());
- }
-
- ///
- /// 是否是纯英文字母
- ///
- /// 字符串
- /// 结果
- public static bool IsPureEnglishChar(string str)
- {
- Regex regEnglish = new Regex(@"^[a-zA-Z]+$");
- return regEnglish.IsMatch(str);
- }
-
- ///
- /// 是否是命名空间
- ///
- /// 字符串
- /// 结果
- public static bool IsNameSpace(string str)
- {
- Regex regEnglish = new Regex(@"^[a-zA-Z.]+$");
- return regEnglish.IsMatch(str) && !str.StartsWith(".") && !str.EndsWith(".") && str.SplitSeparatorCount(".") <= 3 && !str.Contains("..") && !str.Contains("...");
- }
-
- ///
- /// 字符串反转
- ///
- /// The text.
- /// System.String.
- public static string Reverse(this string text)
- {
- var charArray = text.ToCharArray();
- Array.Reverse(charArray);
- return new string(charArray);
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Static/USyncTime.cs b/SunnyUI/Static/USyncTime.cs
index da7a3c23..f1dbf841 100644
--- a/SunnyUI/Static/USyncTime.cs
+++ b/SunnyUI/Static/USyncTime.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: USyncTime.cs
* 文件说明: 时间同步类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Static/USystem.cs b/SunnyUI/Static/USystem.cs
index 0e8089ef..ad2b8e12 100644
--- a/SunnyUI/Static/USystem.cs
+++ b/SunnyUI/Static/USystem.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: USystem.cs
* 文件说明: 系统相关扩展类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Style/UIMenuStyle.cs b/SunnyUI/Style/UIMenuStyle.cs
index 82250b41..43e551cd 100644
--- a/SunnyUI/Style/UIMenuStyle.cs
+++ b/SunnyUI/Style/UIMenuStyle.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIMenuStyle.cs
* 文件说明: 控件样式定义类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Style/UIStyle.cs b/SunnyUI/Style/UIStyle.cs
index 5e4979e3..e156d562 100644
--- a/SunnyUI/Style/UIStyle.cs
+++ b/SunnyUI/Style/UIStyle.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIStyle.cs
* 文件说明: 控件样式定义类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Style/UIStyleColor.cs b/SunnyUI/Style/UIStyleColor.cs
index ca4fb482..8ff89a25 100644
--- a/SunnyUI/Style/UIStyleColor.cs
+++ b/SunnyUI/Style/UIStyleColor.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIStyleColor.cs
* 文件说明: 控件样式定义类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
@@ -40,7 +40,7 @@ namespace Sunny.UI
public abstract Color RectHoverColor { get; }
public abstract Color RectPressColor { get; }
- public abstract Color RectSelectedColor { get; }
+ public abstract Color RectSelectedColor { get; }
public abstract Color ButtonForeSelectedColor { get; }
public abstract Color ButtonFillSelectedColor { get; }
diff --git a/SunnyUI/Style/UIStyleManager.cs b/SunnyUI/Style/UIStyleManager.cs
index 4cc0b070..04982223 100644
--- a/SunnyUI/Style/UIStyleManager.cs
+++ b/SunnyUI/Style/UIStyleManager.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIStyleManager.cs
* 文件说明: 主题样式管理类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/SunnyUI.csproj b/SunnyUI/SunnyUI.csproj
index 28316c8d..fa93509b 100644
--- a/SunnyUI/SunnyUI.csproj
+++ b/SunnyUI/SunnyUI.csproj
@@ -1,638 +1,76 @@
-
-
-
- Debug
- AnyCPU
- 8.0.30703
- 2.0
- {AB1CB247-E20B-4CBE-B269-570ADDD96C53}
- Library
- Properties
- Sunny.UI
- SunnyUI
- v4.0
- 512
-
-
-
- true
- full
- false
- ..\Bin\
- DEBUG;TRACE
- prompt
- 4
- AnyCPU
- true
- false
-
-
- pdbonly
- false
- ..\Bin\
-
-
- prompt
- 4
- AnyCPU
-
-
- true
- true
- false
-
+
+
+
+ net5.0-windows;netcoreapp3.1;net40
+ {AB1CB247-E20B-4CBE-B269-570ADDD96C53}
+ true
+ Sunny.UI
+ 基于.Net Framework 4.0+、.Net Core3.1、.Net 5 框架的 C# WinForm 开源控件库、工具类库、扩展类库、多页面开发框架。
+ CopyRight © SunnyUI.Net 2012-2021
+ LICENSE
+ 3.0.0
+ ShenYonghua
+ SunnyUI.Net
+ SunnyUI
+ https://gitee.com/yhuse/SunnyUI
+ https://gitee.com/yhuse/SunnyUI
+ false
+ true
+ SunnyUI.png
+
+
+
+ ..\Bin\
+
+
+
+ ..\Bin\
+ true
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+ True
+
+
+
+ True
+
+
+
-
- Component
-
-
- Component
-
-
-
- Component
-
-
-
- Component
-
-
- Component
-
-
-
-
-
-
- Component
-
-
- Component
-
-
- Component
-
-
-
- Component
-
-
- UserControl
-
-
- UIComboBoxItem.cs
-
-
- UserControl
-
-
- UserControl
-
-
- UserControl
-
-
- Component
-
-
- UserControl
-
-
- UIDropDownItem.cs
-
-
- UserControl
-
-
- UserControl
-
-
- Component
-
-
- UserControl
-
-
- UserControl
-
-
- Component
-
-
- UserControl
-
-
- Component
-
-
- Component
-
-
- Component
-
-
-
- UserControl
-
-
- UserControl
-
-
- Component
-
-
- UserControl
-
-
- UserControl
-
-
- Component
-
-
- Form
-
-
- UIDataGridViewForm.cs
-
-
-
-
- Form
-
-
- UILoginForm.cs
-
-
- Form
-
-
- UINotifier.cs
-
-
- Component
-
-
-
- Component
-
-
- UserControl
-
-
-
- UserControl
-
-
- UIDoubleUpDown.cs
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- UINavBar.cs
-
-
- Component
-
-
- UserControl
-
-
- Form
-
-
- UIStatusForm.cs
-
-
- Form
-
-
- UIInputForm.cs
-
-
- Form
-
-
- UIWaitForm.cs
-
-
- Form
-
-
- UIAsideMainFrame.cs
-
-
- Form
-
-
- UIHeaderAsideMainFrame.cs
-
-
- Form
-
-
- UIHeaderMainFooterFrame.cs
-
-
- Form
-
-
- UIMainFrame.cs
-
-
- Form
-
-
- UIHeaderMainFrame.cs
-
-
- Form
-
-
- UITitlePage.cs
-
-
- Component
-
-
- Form
-
-
- UIFontImages.cs
-
-
- Form
-
-
- UIForm.cs
-
-
-
-
-
-
-
- Form
-
-
- UIMessageForm.cs
-
-
- Form
-
-
- UIEditForm.cs
-
-
- Component
-
-
-
- UserControl
-
-
- UIDatePicker.cs
-
-
- Component
-
-
- Component
-
-
- UserControl
-
-
- UIImageListBox.cs
-
-
- UserControl
-
-
- UIListBox.cs
-
-
- UserControl
-
-
- UIIntegerUpDown.cs
-
-
- Component
-
-
- Component
-
-
- Component
-
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
-
- UserControl
-
-
- UIDropControl.cs
-
-
- UserControl
-
-
- UIComboBox.cs
-
-
- Component
-
-
- UserControl
-
-
- UIGroupBox.cs
-
-
- Component
-
-
- UserControl
-
-
- UITextBox.cs
-
-
- UserControl
-
-
- UITitlePanel.cs
-
-
- Component
-
-
- UserControl
-
-
- UIPanel.cs
-
-
- Form
-
-
- UIPage.cs
-
-
- True
- True
- Resources.resx
-
-
-
-
-
-
-
-
-
-
-
- UserControl
-
-
- Component
-
-
-
-
-
-
-
-
-
-
- Component
-
-
- Component
-
-
- Component
-
-
-
- Component
-
-
- UserControl
-
-
- UITransfer.cs
-
-
- Component
-
-
-
- UserControl
-
-
- Form
-
-
- UIAsideHeaderMainFooterFrame.cs
-
-
- Form
-
-
- UIAsideHeaderMainFrame.cs
-
-
- Form
-
-
- UIHeaderAsideMainFooterFrame.cs
-
-
- Form
-
-
- UISelectForm.cs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
- UIComboTreeViewItem.cs
-
-
- UIDateItem.cs
-
-
- UIComboTreeView.cs
-
-
- UIDoubleUpDown.cs
-
-
- UIIntegerUpDown.cs
-
-
- UIDataGridViewForm.cs
-
-
- UIEditForm.cs
-
-
- UINotifier.cs
-
-
- UIFontImages.cs
-
-
- UIWaitForm.cs
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
- Designer
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
diff --git a/SunnyUI/SunnyUI.nuspec b/SunnyUI/SunnyUI.nuspec
deleted file mode 100644
index dfabae9e..00000000
--- a/SunnyUI/SunnyUI.nuspec
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
- $id$
- $version$
- $title$
- ShenYongHua
- $owners$
- gpl-3.0.txt
- https://files-cdn.cnblogs.com/files/yhuse/SunnyUISmall.bmp
- https://gitee.com/yhuse/SunnyUI
- true
- $description$
- $releaseNotes$
- $copyright$
- C# Winform SunnyUI Custom Control Frame Class
-
-
-
-
-
\ No newline at end of file
diff --git a/SunnyUI/Units/UBackgroundWorker.cs b/SunnyUI/Units/UBackgroundWorker.cs
deleted file mode 100644
index d90b4ac9..00000000
--- a/SunnyUI/Units/UBackgroundWorker.cs
+++ /dev/null
@@ -1,172 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UBackgroundWorker.cs
- * 文件说明: 多线程运行扩展类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.ComponentModel;
-using System.Threading;
-
-namespace Sunny.UI
-{
- ///
- /// 多线程运行扩展类
- ///
- public abstract class BackgroundWorkerEx
- {
- private readonly BackgroundWorker _worker;
-
- ///
- /// 是否只运行一次
- ///
- public bool RunOnce { get; set; }
-
- ///
- /// 构造函数
- ///
- protected BackgroundWorkerEx()
- {
- _worker = new BackgroundWorker { WorkerSupportsCancellation = true };
- _worker.DoWork += WorkerDoWork;
- _worker.RunWorkerCompleted += RunWorkerCompleted;
- }
-
- ///
- /// 是否运行
- ///
- public bool IsStart { get; private set; }
-
- ///
- /// 每次运行时间间隔
- ///
- public uint WorkerDelay { get; set; } = 100;
-
- private void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
- {
- DoCompleted();
- OnCompleted?.Invoke(sender, e);
- }
-
- ///
- /// 运行结束调用事件
- ///
- public event EventHandler OnCompleted;
-
- ///
- /// 运行事件,需重载
- ///
- protected abstract void DoWorker();
-
- ///
- /// 运行结束
- ///
- protected virtual void DoCompleted()
- {
- }
-
- ///
- /// 析构函数
- ///
- ~BackgroundWorkerEx()
- {
- BeforeStop();
- FinalStop();
- }
-
- private void WorkerDoWork(object sender, DoWorkEventArgs e)
- {
- if (RunOnce)
- {
- DoOnce();
- }
- else
- {
- while (IsStart)
- {
- //如果用户申请取消
- if (_worker.CancellationPending)
- {
- e.Cancel = true;
- return;
- }
-
- DoWorker();
- Thread.Sleep((int)WorkerDelay);
- Thread.Yield();
- }
- }
- }
-
- private void DoOnce()
- {
- DoWorker();
- IsStart = false;
- BeforeStop();
- FinalStop();
- }
-
- ///
- /// 运行前调用
- ///
- protected virtual void InitStart()
- {
- }
-
- ///
- /// 停止后调用
- ///
- protected virtual void FinalStop()
- {
- }
-
- ///
- /// 停止前调用
- ///
- protected virtual void BeforeStop()
- {
- }
-
- ///
- /// 开始运行线程
- ///
- public void Start()
- {
- if (!IsStart)
- {
- InitStart();
- IsStart = true;
- _worker.RunWorkerAsync();
- }
- }
-
- ///
- /// 结束运行线程
- ///
- public void Stop()
- {
- if (IsStart)
- {
- BeforeStop();
- IsStart = false;
- _worker.CancelAsync();
- FinalStop();
- }
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/UBaseConfig.cs b/SunnyUI/Units/UBaseConfig.cs
deleted file mode 100644
index 80a9ce83..00000000
--- a/SunnyUI/Units/UBaseConfig.cs
+++ /dev/null
@@ -1,563 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UBaseConfig.cs
- * 文件说明: 配置文件基类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Reflection;
-
-namespace Sunny.UI
-{
- ///
- /// 配置文件基类
- ///
- /// 类型
- public abstract class BaseConfig where TConfig : BaseConfig, new()
- {
- ///
- /// 实体对象
- ///
- protected static TConfig current;
-
- ///
- /// 配置文件描述
- ///
- public static string Description
- {
- get
- {
- var fileanddesc = ConfigHelper.GetConfigFile();
- return fileanddesc.Item2;
- }
- }
-
- ///
- /// 配置文件名
- ///
- public static string ConfigFile
- {
- get
- {
- var fileanddesc = ConfigHelper.GetConfigFile();
- return fileanddesc.Item1;
- }
- }
-
- ///
- /// 当前实例。通过置空可以使其重新加载。
- ///
- public static TConfig Current
- {
- get
- {
- if (current != null)
- {
- return current;
- }
-
- // 现在没有对象,尝试加载,若返回null则实例化一个新的
- current = CreateNew();
- if (!current.Load(DirEx.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;
- }
-
- /// 保存到配置文件中去
- public void Save()
- {
- Save(null);
- }
-
- ///
- /// 加载指定配置文件
- ///
- /// 结果
- public bool Load()
- {
- return Load(null);
- }
-
- ///
- /// 加密
- ///
- /// 字符串
- /// 加密后字符串
- public string Encrypt(string str)
- {
- string tmp = str + RandomEx.RandomNumber(6);
- return tmp.DesEncrypt();
- }
-
- ///
- /// 解密
- ///
- /// 字符串
- /// 解密后字符串
- public string Decrypt(string str)
- {
- string result = str.DesDecrypt();
- return result.Left(result.Length - 6);
- }
-
- /// 加载指定配置文件
- /// 文件名
- /// 结果
- public abstract bool Load(string filename);
-
- /// 保存到配置文件中去
- /// 文件名
- public abstract void Save(string filename);
-
- ///
- /// 设置默认值
- ///
- public virtual void SetDefault()
- {
- }
- }
-
- ///
- /// 配置文件帮助类
- ///
- public static class ConfigHelper
- {
- ///
- /// 获取配置文件路径
- ///
- /// 类型
- /// 文件名
- public static Tuple GetConfigFile()
- {
- string filename;
- string description = "配置文件";
- var att = typeof(TConfig).GetCustomAttribute();
- 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(filename, description);
- }
-
- ///
- /// 初始化属性
- ///
- /// 配置类
- /// 类型
- /// 节点
- /// ApplicationException
- public static ConcurrentDictionary InitIdents(TConfig config)
- {
- ConcurrentDictionary idents = new ConcurrentDictionary();
- 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();
- ident.Section = section != null ? section.Section : "";
-
- var propertyatt = info.GetCustomAttribute();
- ident.Caption = propertyatt != null ? propertyatt.Caption : "";
- ident.Unit = propertyatt != null ? propertyatt.Unit : "";
- ident.Description = propertyatt != null ? propertyatt.Description : "";
-
- var indexatt = info.GetCustomAttribute();
- 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;
- }
-
- ///
- /// 类型默认值
- ///
- /// 类型
- /// 默认值
- public static object DefaultValue(Type targetType)
- {
- return targetType.IsValueType ? Activator.CreateInstance(targetType) : null;
- }
-
- ///
- /// 读取对象数值
- ///
- /// 配置文件
- /// 节点
- /// 类型
- /// ApplicationException
- public static void LoadConfigValue(TConfig config, ConcurrentDictionary 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);
- }
- }
-
- ///
- /// 设置对象数值
- ///
- /// 配置文件
- /// 节点
- /// 类型
- /// ApplicationException
- public static void SaveConfigValue(TConfig config, ConcurrentDictionary 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);
- }
- }
- }
-
- /// 配置文件特性
- [AttributeUsage(AttributeTargets.Class)]
- public class ConfigFileAttribute : Attribute
- {
- ///
- /// 配置文件名
- ///
- public string FileName { get; }
-
- ///
- /// 描述
- ///
- public string Description { get; }
-
- ///
- /// 配置文件
- ///
- public ConfigFileAttribute() : this(string.Empty, string.Empty)
- {
- }
-
- /// 配置文件
- /// 文件名
- /// 描述
- public ConfigFileAttribute(string fileName, string description = "")
- {
- FileName = fileName;
- Description = description;
- }
- }
-
- ///
- /// 数据节点
- ///
- public class Ident
- {
- ///
- /// 节
- ///
- public string Section { get; set; }
-
- ///
- /// 键
- ///
- public string Key { get; set; }
-
- ///
- /// 值
- ///
- public string Value { get; set; }
-
- ///
- /// 描述
- ///
- public string Description { get; set; }
-
- ///
- /// 名称
- ///
- public string Caption { get; set; }
-
- ///
- /// 单位
- ///
- public string Unit { get; set; }
-
- ///
- /// 序号
- ///
- public int Index { get; set; }
-
- ///
- /// 是否显示
- ///
- public bool Show { get; set; }
-
- ///
- /// ToString()
- ///
- /// String
- public override string ToString()
- {
- return Index + " [" + Section + "] " + Key + " = ?";
- }
-
- ///
- /// 是否是列表类型
- ///
- public bool IsList { get; set; }
-
- ///
- /// 列表值
- ///
- public List Values = new List();
- }
-
- ///
- /// 配置属性节点特性
- ///
- [AttributeUsage(AttributeTargets.Property)]
- public class ConfigSectionAttribute : Attribute
- {
- ///
- /// 节
- ///
- public string Section { get; }
-
- /// 属性节点特性
- /// 节
- public ConfigSectionAttribute(string section)
- {
- Section = section;
- }
- }
-
- ///
- /// 配置属性描述特性
- ///
- [AttributeUsage(AttributeTargets.Property)]
- public class ConfigPropertyAttribute : Attribute
- {
- ///
- /// 标题
- ///
- public string Caption { get; }
-
- ///
- /// 单位
- ///
- public string Unit { get; }
-
- ///
- /// 描述
- ///
- public string Description { get; }
-
- ///
- /// 配置文件属性
- ///
- /// 标题
- /// 单位
- /// 描述
- public ConfigPropertyAttribute(string caption, string description = "", string unit = "")
- {
- Caption = caption;
- Unit = unit;
- Description = description;
- }
- }
-
- ///
- /// 忽略此属性的配置存储
- ///
- [AttributeUsage(AttributeTargets.Property)]
- public class ConfigIgnoreAttribute : Attribute
- {
- }
-
- ///
- /// 配置序号描述特性
- ///
- [AttributeUsage(AttributeTargets.Property)]
- public class ConfigIndexAttribute : Attribute
- {
- ///
- /// 序号
- ///
- public int Index { get; }
-
- ///
- /// 是否显示
- ///
- public bool Show { get; }
-
- /// 配置序号特性
- /// 序号
- /// 是否显示
- public ConfigIndexAttribute(int index, bool show = true)
- {
- Index = index;
- Show = show;
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/UConcurrentDoubleKeyDictionary.cs b/SunnyUI/Units/UConcurrentDoubleKeyDictionary.cs
deleted file mode 100644
index de166373..00000000
--- a/SunnyUI/Units/UConcurrentDoubleKeyDictionary.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UConcurrentDoubleKeyDictionary.cs
- * 文件说明: 双主键线程安全字典,适用场景主键和键值都唯一,可双向查找
- * 当前版本: V2.2
- * 创建日期: 2020-08-17
- *
- * 2020-08-17: V2.2.7 增加文件说明
-******************************************************************************/
-
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Sunny.UI
-{
- public class ConcurrentDoubleKeyDictionary
- {
- private readonly ConcurrentDictionary Key1 = new ConcurrentDictionary();
- private readonly ConcurrentDictionary Key2 = new ConcurrentDictionary();
-
- public void TryAdd(TKey1 key1, TKey2 key2)
- {
- Key1.TryAddOrUpdate(key1, key2);
- Key2.TryAddOrUpdate(key2, key1);
- }
-
- public TKey2 this[TKey1 key1]
- {
- get => GetKey2(key1);
- set => TryAdd(key1, value);
- }
-
- public int Count => Key1.Count;
-
- public void RemoveByKey1(TKey1 key1)
- {
- if (ContainsKey1(key1))
- {
- TKey2 key2 = GetKey2(key1);
- Key1.TryRemove(key1, out _);
- if (ContainsKey2(key2)) Key2.TryRemove(key2, out _);
- }
- }
-
- public void RemoveByKey2(TKey2 key2)
- {
- if (ContainsKey2(key2))
- {
- TKey1 key1 = GetKey1(key2);
- Key2.TryRemove(key2, out _);
- if (ContainsKey1(key1)) Key1.TryRemove(key1, out _);
- }
- }
-
- public TKey2 GetKey2(TKey1 key1)
- {
- return Key1.ContainsKey(key1) ? Key1[key1] : default(TKey2);
- }
-
- public TKey1 GetKey1(TKey2 key2)
- {
- return Key2.ContainsKey(key2) ? Key2[key2] : default(TKey1);
- }
-
- public bool ContainsKey1(TKey1 key1)
- {
- return Key1.ContainsKey(key1);
- }
-
- public bool ContainsKey2(TKey2 key2)
- {
- return Key2.ContainsKey(key2);
- }
-
- public IList Key1List()
- {
- return Key1.Keys.ToList();
- }
-
- public IList Key2List()
- {
- return Key2.Keys.ToList();
- }
-
- public void Clear()
- {
- Key1.Clear();
- Key2.Clear();
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/UConcurrentGroupDictionary.cs b/SunnyUI/Units/UConcurrentGroupDictionary.cs
deleted file mode 100644
index 85fbdf74..00000000
--- a/SunnyUI/Units/UConcurrentGroupDictionary.cs
+++ /dev/null
@@ -1,181 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UConcurrentGroupDictionary.cs
- * 文件说明: 分组线程安全字典
- * 当前版本: V2.2
- * 创建日期: 2020-08-18
- *
- * 2020-08-18: V2.2.7 增加文件说明
-******************************************************************************/
-
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Sunny.UI
-{
- public class ConcurrentGroupDictionary
- {
- private readonly ConcurrentDictionary> Dictionary
- = new ConcurrentDictionary>();
-
- public ConcurrentDictionary this[TGroup group]
- {
- get => ContainsGroup(group) ? Dictionary[group] : new ConcurrentDictionary();
- set
- {
- if (!ContainsGroup(group)) TryAdd(group);
- Dictionary[group] = value;
- }
- }
-
- public bool ContainsGroup(TGroup group)
- {
- return Dictionary.ContainsKey(group);
- }
-
- public bool ContainsKey(TKey key)
- {
- return Groups.Any(group => ContainsKey(group, key));
- }
-
- public bool ContainsKey(TGroup group, TKey key)
- {
- return ContainsGroup(group) && Dictionary[group].ContainsKey(key);
- }
-
- public void TryAdd(TGroup group)
- {
- if (!Dictionary.ContainsKey(group))
- Dictionary.TryAdd(group, new ConcurrentDictionary());
- }
-
- public void TryAdd(TGroup group, TKey key, TValue value)
- {
- TryAdd(group);
-
- if (ContainsKey(group, key))
- Dictionary[group][key] = value;
- else
- Dictionary[group].TryAdd(key, value);
- }
-
- public bool TryUpdate(TGroup group, TKey key, TValue value)
- {
- if (!ContainsGroup(group)) return false;
- TryAdd(group, key, value);
- return true;
- }
-
- public void TryRemove(TGroup group, TKey key)
- {
- if (ContainsGroup(group))
- {
- if (ContainsKey(group, key)) Dictionary[group].TryRemove(key, out _);
- if (GroupItemsCount(group) == 0) Dictionary.TryRemove(group, out _);
- }
- }
-
- public void TryRemove(TGroup group)
- {
- ClearGroup(group);
- Dictionary.TryRemove(group, out _);
- }
-
- public void Clear()
- {
- foreach (var group in Groups)
- {
- ClearGroup(group);
- }
-
- Dictionary.Clear();
- }
-
- public void ClearGroup(TGroup group)
- {
- if (ContainsGroup(group))
- {
- Dictionary[group].Clear();
- }
- }
-
- public List Values(TGroup group)
- {
- return ContainsGroup(group) ? Dictionary[group].Values.ToList() : new List();
- }
-
- public List Groups
- {
- get => Dictionary.Keys.ToList();
- }
-
- public List SortedGroups
- {
- get
- {
- List groups = Groups;
- groups.Sort();
- return groups;
- }
- }
-
- public List Keys(TGroup group)
- {
- return ContainsGroup(group) ? Dictionary[group].Keys.ToList() : new List();
- }
-
- public List SortedKeys(TGroup group)
- {
- List keys = Keys(group);
- keys.Sort();
- return keys;
- }
-
- public List SortedValues(TGroup group)
- {
- List values = new List();
- if (ContainsGroup(group))
- {
- var keys = SortedKeys(group);
- foreach (var key in keys)
- {
- values.Add(Dictionary[group][key]);
- }
- }
-
- return values;
- }
-
- public TValue GetValue(TGroup group, TKey key)
- {
- return ContainsKey(group, key) ? Dictionary[group][key] : default;
- }
-
- public int AllCount
- {
- get => Groups.Sum(GroupItemsCount);
- }
-
- public int GroupCount
- {
- get => Dictionary.Count;
- }
-
- public int GroupItemsCount(TGroup group)
- {
- return ContainsGroup(group) ? Dictionary[group].Count : 0;
- }
- }
-}
diff --git a/SunnyUI/Units/UCrc32.cs b/SunnyUI/Units/UCrc32.cs
deleted file mode 100644
index 078a7a9a..00000000
--- a/SunnyUI/Units/UCrc32.cs
+++ /dev/null
@@ -1,132 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UCrc32.cs
- * 文件说明: CRC32校验类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System.Collections;
-using System.Text;
-
-namespace Sunny.UI
-{
- ///
- /// CRC32校验类
- ///
- public class Crc32
- {
- private readonly uint _poly;
- private uint[] tab;
-
- ///
- /// 构造函数
- ///
- public Crc32()
- : this(79764919U)
- {
- }
-
- ///
- /// 构造函数
- ///
- /// poly
- public Crc32(uint poly)
- {
- _poly = poly;
- }
-
- private void Init()
- {
- if (tab != null)
- {
- return;
- }
-
- tab = new uint[256];
- for (uint index1 = 0U; index1 < 256U; ++index1)
- {
- uint num = index1;
- for (int index2 = 0; index2 < 8; ++index2)
- {
- if (((int)num & 1) == 0)
- {
- num >>= 1;
- }
- else
- {
- num = num >> 1 ^ _poly;
- }
- }
-
- tab[(int)index1] = num;
- }
- }
-
- ///
- /// 计算哈希值
- ///
- /// 文本
- /// 结果
- public uint ComputeHash(string text)
- {
- return ComputeHash(Encoding.UTF8.GetBytes(text));
- }
-
- ///
- /// 计算哈希值
- ///
- /// 数组
- /// 哈希值
- public uint ComputeHash(byte[] data)
- {
- return ComputeHash(data, 0, data.Length);
- }
-
- ///
- /// 计算哈希值
- ///
- /// 数据
- /// 起始位置
- /// 长度
- /// 哈希值
- public uint ComputeHash(byte[] data, int start, int length)
- {
- return ComputeHash(data, start, length);
- }
-
- ///
- /// 计算哈希值
- ///
- /// 数据
- /// 起始位置
- /// 长度
- /// 类型
- /// 哈希值
- public uint ComputeHash(T data, int start, int length) where T : IList
- {
- Init();
- uint num1 = uint.MaxValue;
- for (int index = 0; index < length; ++index)
- {
- byte num2 = (byte)data[index + start];
- num1 = num1 << 8 ^ tab[num2 ^ num1 >> 24];
- }
-
- return ~num1;
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/UDateTimeInt64.cs b/SunnyUI/Units/UDateTimeInt64.cs
deleted file mode 100644
index 971c960e..00000000
--- a/SunnyUI/Units/UDateTimeInt64.cs
+++ /dev/null
@@ -1,380 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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
-{
- ///
- /// 日期与长整形和浮点型互转
- /// Value:长整形,为1970年1月1日0时起的毫秒数
- /// DoubleValue:双精度浮点数,1970年1月1日0时起的天数
- ///
- public struct DateTimeInt64 : IComparable, IEquatable, IEquatable, IEquatable
- {
- 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;
-
- ///
- /// 返回当前时间的毫秒数, 这个毫秒其实就是自1970年1月1日0时起的毫秒数
- ///
- public static long CurrentDateTimeToTicks()
- {
- return (DateTime.UtcNow.Ticks - Jan1st1970Ticks) / 10000;
- }
-
- public double DoubleValue
- {
- get { return Value * 1.0 / MillisecondsPerDay; }
- set { Value = (long)(value * MillisecondsPerDay); }
- }
-
- ///
- /// 返回指定时间的毫秒数, 这个毫秒其实就是自1970年1月1日0时起的毫秒数
- ///
- public static long DateTimeToTicks(DateTime datetime)
- {
- return (datetime.ToUniversalTime().Ticks - Jan1st1970Ticks) / 10000;
- }
-
- ///
- /// 从一个代表自1970年1月1日0时起的毫秒数,转换为DateTime (北京时间)
- ///
- public static DateTime TicksToDateTime(long ticks)
- {
- return TimeZone.CurrentTimeZone.ToLocalTime(TicksToUTCDateTime(ticks));
- }
-
- ///
- /// 从一个代表自1970年1月1日0时起的毫秒数,转换为DateTime (UTC时间)
- ///
- 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;
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/UHook.cs b/SunnyUI/Units/UHook.cs
index 52e59a67..0df7fb91 100644
--- a/SunnyUI/Units/UHook.cs
+++ b/SunnyUI/Units/UHook.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UHook.cs
* 文件说明: 键盘鼠标钩子类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Units/UIdentityCard.cs b/SunnyUI/Units/UIdentityCard.cs
deleted file mode 100644
index b8be8601..00000000
--- a/SunnyUI/Units/UIdentityCard.cs
+++ /dev/null
@@ -1,246 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UIdentityCard.cs
- * 文件说明: 身份证校验类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections.Generic;
-
-namespace Sunny.UI
-{
- ///
- /// 身份证校验类
- ///
- public class IdentityCard
- {
- #region 属性
-
- ///
- /// 生日
- ///
- public DateTime Birthday { get; set; }
-
- ///
- /// 性别
- ///
- public enum SexType
- {
- ///
- /// 男
- ///
- Man,
-
- ///
- /// 女
- ///
- Woman
- }
-
- ///
- /// 性别
- ///
- public SexType Sex { get; set; }
-
- ///
- /// 是否15位旧卡
- ///
- public bool IsOld { get; set; }
-
- ///
- /// 地区编码
- ///
- public string AreaNum { get; set; }
-
- #endregion 属性
-
- #region 验证
-
- ///
- /// 验证身份证是否合法
- ///
- /// The card.
- /// true if XXXX, false otherwise.
- public static bool Valid(string card)
- {
- try
- {
- if (Parse(card) != null)
- {
- return true;
- }
- }
- catch
- {
- // ignored
- }
-
- return false;
- }
-
- #endregion 验证
-
- #region 分析
-
- private static readonly Dictionary Cache = new Dictionary();
-
- ///
- /// 使用身份证号码初始化
- ///
- /// The card.
- /// IdentityCard.
- public static IdentityCard Parse(string card)
- {
- if (string.IsNullOrEmpty(card))
- {
- return null;
- }
-
- if (card.Length != 15 && card.Length != 18)
- {
- return null;
- }
-
- //转为小写,18位身份证后面有个字母x
- card = card.ToLower();
-
- if (Cache.TryGetValue(card, out var ic))
- {
- return ic;
- }
-
- lock (Cache)
- {
- if (Cache.TryGetValue(card, out ic))
- {
- return ic;
- }
-
- var idc = Parse2(card);
- Cache.Add(card, idc);
- return idc;
- }
- }
-
- private static IdentityCard Parse2(string card)
- {
- var area = card.Substring(0, 6);
-
- var idc = new IdentityCard
- {
- AreaNum = ParseArea(area)
- };
-
- if (card.Length == 15)
- {
- idc.ParseBirthdayAndSex15(card);
- }
- else if (card.Length == 18)
- {
- idc.ParseBirthdayAndSex18(card);
-
- //校验码验证 GB11643-1999标准
- var arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
- var Wi = new[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
- var Ai = card.Remove(17).ToCharArray();
- var sum = 0;
- for (var i = 0; i < 17; i++)
- {
- sum += Wi[i] * (Ai[i] - '0');
- }
-
- Math.DivRem(sum, 11, out var y);
- if (arrVarifyCode[y] != card.Substring(17, 1).ToLower())
- {
- throw new Exception("验证码校验失败!");
- }
- }
-
- return idc;
- }
-
- #endregion 分析
-
- #region 分析地区
-
- private static readonly List AreaList = new List(new[] { 11, 22, 35, 44, 53, 12, 23, 36, 45, 54, 13, 31, 37, 46, 61, 14, 32, 41, 50, 62, 15, 33, 42, 51, 63, 21, 34, 43, 52, 64, 65, 71, 81, 82, 91 });
-
- private static string ParseArea(string area)
- {
- if (!int.TryParse(area, out var n))
- {
- throw new Exception("非法地区编码!");
- }
-
- var str = area.Substring(0, 2);
- if (!int.TryParse(str, out n))
- {
- throw new Exception("非法省份编码!");
- }
-
- if (!AreaList.Contains(n))
- {
- throw new Exception("没有找到该省份!");
- }
-
- return area;
- }
-
- #endregion 分析地区
-
- #region 分析生日、性别
-
- private void ParseBirthdayAndSex15(string card)
- {
- var str = card.Substring(6, 2);
- var n = int.Parse(str);
- n = n < 20 ? 20 : 19;
-
- var birth = n + card.Substring(6, 6).Insert(2, "-").Insert(5, "-");
- if (!DateTime.TryParse(birth, out var d))
- {
- throw new Exception("生日不正确!");
- }
-
- Birthday = d;
-
- //最后一位是性别
- n = Convert.ToInt32(card.Substring(card.Length - 1, 1));
- var man = n % 2 != 0;
- Sex = man ? SexType.Man : SexType.Woman;
- }
-
- private void ParseBirthdayAndSex18(string card)
- {
- var birth = card.Substring(6, 8).Insert(4, "-").Insert(7, "-");
- if (!DateTime.TryParse(birth, out var d))
- {
- throw new Exception("生日不正确!");
- }
-
- Birthday = d;
-
- //倒数第二位是性别
- var n = Convert.ToInt32(card.Substring(card.Length - 2, 1));
- var man = n % 2 != 0;
- Sex = man ? SexType.Man : SexType.Woman;
- }
-
- #endregion 分析生日、性别
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/UIniConfig.cs b/SunnyUI/Units/UIniConfig.cs
index e770cc17..c9a4d4ee 100644
--- a/SunnyUI/Units/UIniConfig.cs
+++ b/SunnyUI/Units/UIniConfig.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIniConfig.cs
* 文件说明: INI 配置文件类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Units/UIniFile.cs b/SunnyUI/Units/UIniFile.cs
index dd6b4a07..867937f8 100644
--- a/SunnyUI/Units/UIniFile.cs
+++ b/SunnyUI/Units/UIniFile.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UIniFile.cs
* 文件说明: INI 文件读取类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
@@ -259,351 +259,6 @@ namespace Sunny.UI
}
}
- ///
- /// 对象转换扩展类
- ///
- public static class ConvertEx
- {
- ///
- /// 可以对象和字符串互相转换的类型
- ///
- /// 类型
- /// 结果
- 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;
- }
-
- ///
- /// 字符串转对象
- ///
- /// 字符串
- /// 类型
- /// 默认对象
- /// 对象
- 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;
- }
-
- ///
- /// 字符串转对象扩展
- ///
- /// 字符串
- /// 类型
- /// 默认对象
- /// 对象
- 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;
- }
-
- ///
- /// 对象转字符串
- ///
- /// 对象
- /// 类型
- /// 字符串
- 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;
- }
-
- ///
- /// 对象转字符串扩展
- ///
- /// 对象
- /// 类型
- /// 字符串
- 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;
- }
- }
-
///
/// IniFile的类
///
diff --git a/SunnyUI/Units/UJson.cs b/SunnyUI/Units/UJson.cs
index e7e7c87e..b971ba42 100644
--- a/SunnyUI/Units/UJson.cs
+++ b/SunnyUI/Units/UJson.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UJson.cs
* 文件说明: Json扩展类,不引用第三方组件实现简单的Json字符串和对象的转换
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-10-21
*
* 2020-10-21: V2.2.9 增加文件说明
@@ -22,7 +22,9 @@
using System;
using System.IO;
using System.Text;
+#if NETFRAMEWORK
using System.Web.Script.Serialization;
+#endif
namespace Sunny.UI
{
@@ -32,8 +34,12 @@ namespace Sunny.UI
{
try
{
+#if NETFRAMEWORK
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Deserialize(input);
+#else
+ return System.Text.Json.JsonSerializer.Deserialize(input);
+#endif
}
catch (Exception e)
{
@@ -44,8 +50,12 @@ namespace Sunny.UI
public static string Serialize(object obj)
{
+#if NETFRAMEWORK
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Serialize(obj);
+#else
+ return System.Text.Json.JsonSerializer.Serialize(obj);
+#endif
}
public static T DeserializeFromFile(string filename, Encoding encoding)
diff --git a/SunnyUI/Units/UJsonConfig.cs b/SunnyUI/Units/UJsonConfig.cs
index c6ef11f0..c12c4c9a 100644
--- a/SunnyUI/Units/UJsonConfig.cs
+++ b/SunnyUI/Units/UJsonConfig.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UJsonConfig.cs
* 文件说明: Json配置文件类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.9 增加文件说明
diff --git a/SunnyUI/Units/UKeyScope.cs b/SunnyUI/Units/UKeyScope.cs
deleted file mode 100644
index ea59a71b..00000000
--- a/SunnyUI/Units/UKeyScope.cs
+++ /dev/null
@@ -1,238 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UKeyScope.cs
- * 文件说明: 整数范围及集合
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Sunny.UI
-{
- ///
- /// KeyScope 用于表示一个整数范围。显示为:3..12
- ///
- public class KeyScope
- {
- ///
- /// 构造函数
- ///
- public KeyScope()
- {
- }
-
- ///
- /// 构造函数
- ///
- /// 最小值
- /// 最大值
- public KeyScope(int theMin, int theMax)
- {
- Min = theMin;
- Max = theMax;
- }
-
- ///
- /// 构造函数
- ///
- /// 字符串,以逗号分隔
- public KeyScope(string scopeStr)
- {
- SetScopeStr(scopeStr);
- }
-
- private void SetScopeStr(string str)
- {
- str = str.Replace("..", ",");
- string[] parts = str.Split(',');
- Min = parts[0].Trim().ToInt(int.MinValue);
- Max = parts[1].Trim().ToInt(int.MaxValue);
- }
-
- ///
- /// ScopeString 以..分隔,如"10..1000"
- ///
- public string ScopeString
- {
- get => $"{Min}..{Max}";
- set => SetScopeStr(value);
- }
-
- ///
- /// 最大值
- ///
- public int Max { get; set; } = int.MinValue;
-
- ///
- /// 最小值
- ///
- public int Min { get; set; } = int.MaxValue;
-
- ///
- /// 包含
- ///
- /// 整数
- /// 是否包含
- public bool Contains(int val)
- {
- return Min <= val && val <= Max;
- }
-
- ///
- /// 包含
- ///
- /// 范围
- /// 是否包含
- public bool Contains(KeyScope scope)
- {
- return scope.Min >= Min && scope.Max <= Max;
- }
-
- ///
- /// 交叉
- ///
- /// 范围
- /// 是否交叉
- public bool Intersect(KeyScope scope)
- {
- for (int i = Min; i < Max; i++)
- {
- if (scope.Contains(i))
- {
- return true;
- }
- }
-
- return false;
- }
-
- ///
- /// 字符串
- ///
- /// 字符串
- public override string ToString()
- {
- return ScopeString;
- }
- }
-
- ///
- /// KeyScopes 用于表示多个整数范围和一组离散的整数值
- ///
- public class KeyScopes
- {
- private readonly SortedSet array = new SortedSet();
-
- ///
- /// 最小值
- ///
- /// 最小值
- public int Min => array.Min;
-
- ///
- /// 最大值
- ///
- /// 最大值
- public int Max => array.Max;
-
- ///
- /// 增加
- ///
- /// 值
- public void Add(int value)
- {
- if (!array.Contains(value))
- {
- array.Add(value);
- }
- }
-
- ///
- /// 增加
- ///
- /// 值
- public void Add(KeyScope value)
- {
- for (int i = value.Min; i <= value.Max; i++)
- {
- Add(i);
- }
- }
-
- ///
- /// 增加
- ///
- /// 值,以..分隔的字符串
- public void Add(string value)
- {
- KeyScope scope = new KeyScope(value);
- Add(scope);
- }
-
- ///
- /// 包含
- ///
- /// 整数
- /// 是否包含
- public bool Contains(int value)
- {
- return array.Contains(value);
- }
-
- ///
- /// 字符串
- ///
- /// 字符串
- public override string ToString()
- {
- if (array.Count == 0) return String.Empty;
-
- List list = array.ToList();
-
- if (array.Count == 1) return list[0].ToString();
- if (array.Count == 2) return list[0].ToString() + list[1].ToString();
-
- int idx = 0;
- int min = Min;
-
- List sb = new List();
-
- while (idx < list.Count - 1)
- {
- idx++;
- if (list[idx] - list[idx - 1] > 1)
- {
- if (min == list[idx - 1])
- sb.Add(min.ToString());
- else
- sb.Add(min + ".." + list[idx - 1]);
-
- min = list[idx];
- }
- }
-
- if (min == list[idx])
- sb.Add(min.ToString());
- else
- sb.Add(min + ".." + list[idx]);
-
- return string.Join(", ", sb.ToArray());
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/ULimitedQueue.cs b/SunnyUI/Units/ULimitedQueue.cs
deleted file mode 100644
index 312e8219..00000000
--- a/SunnyUI/Units/ULimitedQueue.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: ULimitedQueue.cs
- * 文件说明: 定长队列类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-
-namespace Sunny.UI
-{
- ///
- /// 表示固定长度的对象的先进先出集合。
- ///
- /// 指定队列中元素的类型。
- public class LimitedQueue : Queue
- {
- ///
- /// 队列长度
- ///
- public int Limit { get; set; }
-
- ///
- /// 定长队列
- ///
- ///
- public LimitedQueue(int limit) : base(limit)
- {
- Limit = limit;
- }
-
- ///
- /// 入队
- ///
- ///
- public new void Enqueue(T item)
- {
- if (Count >= Limit)
- {
- Dequeue();
- }
-
- base.Enqueue(item);
- }
- }
-
- ///
- /// 表示固定长度的线程安全的先进先出 (FIFO) 集合。
- ///
- /// 队列中包含的元素的类型。
- public class ConcurrentLimitedQueue : ConcurrentQueue
- {
- ///
- /// 长度
- ///
- public int Limit { get; set; }
-
- ///
- /// 定长队列
- ///
- ///
- public ConcurrentLimitedQueue(int limit)
- {
- Limit = limit;
- }
-
- ///
- /// 入队
- ///
- ///
- public new void Enqueue(T item)
- {
- if (Count >= Limit)
- {
- TryDequeue(out var _);
- }
-
- base.Enqueue(item);
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/UListEx.cs b/SunnyUI/Units/UListEx.cs
deleted file mode 100644
index a4f312bd..00000000
--- a/SunnyUI/Units/UListEx.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UListEx.cs
- * 文件说明: 带增加、删除事件的List列表
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections.Generic;
-
-namespace Sunny.UI
-{
- ///
- /// 支持事件的List
- ///
- ///
- public class ListEx : List
- {
- public delegate void OnListChange(object sender, T item, int index);
-
- ///
- /// 删除事件
- ///
- public event OnListChange OnDelete;
-
- ///
- /// 添加事件
- ///
- public event OnListChange OnAppend;
-
- public new void Add(T item)
- {
- base.Add(item);
- OnAppend?.Invoke(this, item, this.Count);
- }
-
- public new void Insert(int index, T item)
- {
- base.Insert(index, item);
- OnAppend?.Invoke(this, item, index);
- }
-
- public new void Remove(T item)
- {
- int index = IndexOf(item);
- base.Remove(item);
- OnDelete?.Invoke(this, item, index);
- }
-
- public new void RemoveAt(int index)
- {
- T item = base[index];
- base.RemoveAt(index);
- OnDelete?.Invoke(this, item, index);
- }
-
- public new void RemoveRange(int index, int count)
- {
- for (int i = index; i < index + count; i++)
- {
- this.RemoveAt(i);
- }
- }
-
- public new void AddRange(IEnumerable collection)
- {
- int Index = Count;
- base.AddRange(collection);
- foreach (var item in collection)
- {
- OnAppend?.Invoke(this, item, Index);
- Index++;
- }
- }
-
- public new void InsertRange(int index, IEnumerable collection)
- {
- base.InsertRange(index, collection);
- foreach (var item in collection)
- {
- OnAppend?.Invoke(this, item, index);
- index++;
- }
- }
- }
-
- public class NListEventArgs : EventArgs
- {
- public NListEventArgs(T item, int index)
- {
- Item = item;
- Index = index;
- }
-
- public T Item { get; set; }
- public int Index { get; set; }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/ULogFile.cs b/SunnyUI/Units/ULogFile.cs
deleted file mode 100644
index 212c2f1a..00000000
--- a/SunnyUI/Units/ULogFile.cs
+++ /dev/null
@@ -1,567 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: ULogFile.cs
- * 文件说明: 日志文件记录类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections.Concurrent;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.IO;
-using System.Text;
-using System.Threading;
-using Timer = System.Windows.Forms.Timer;
-
-namespace Sunny.UI
-{
- ///
- /// 日志级别
- ///
- public enum LogLevel
- {
- ///
- /// 所有
- ///
- [DisplayText("ALL")]
- ALL = -2147483648,
-
- ///
- /// 调试
- ///
- [DisplayText("DEBUG")]
- DEBUG = 30000,
-
- ///
- /// 信息
- ///
- [DisplayText("INFO")]
- INFO = 40000,
-
- ///
- /// 警告
- ///
- [DisplayText("WARN")]
- WARN = 60000,
-
- ///
- /// 错误
- ///
- [DisplayText("ERROR")]
- ERROR = 70000,
-
- ///
- /// 致命错误
- ///
- [DisplayText("FATAL")]
- FATAL = 110000,
-
- ///
- /// 关闭
- ///
- [DisplayText("OFF")]
- OFF = 2147483647
- }
-
- ///
- /// 日志文件记录类
- ///
- public class LogFile : IDisposable
- {
- private readonly StringBuilder sb = new StringBuilder();
-
- private BackgroundWorker saver;
-
- private Timer timer;
-
- private readonly ConcurrentQueue Queue = new ConcurrentQueue();
-
- private LogInfo NoWriteLog;
-
- private bool needLog = true;
-
- ///
- /// 日子级别
- ///
- public LogLevel Level { get; set; }
-
- ///
- /// 记录调试信息
- ///
- public bool LogDebugInfo { get; set; }
-
- ///
- /// 使用多线程保存
- ///
- public bool UseThread { get; set; }
-
- ///
- /// 使用定时器保存
- ///
- public bool UseTimer { get; set; }
-
- ///
- /// 日志时间格式
- ///
- public string DateTimeFormat { get; set; }
-
- ///
- /// 获取或设置日志文件的名称
- ///
- public string FileNamePrefix { get; set; }
-
- ///
- /// 获取或设置日志文件的路径
- ///
- public string FilePath { get; set; }
-
- ///
- /// 获取或设置定义日志文件大小
- ///
- public int MaxFileSize { get; set; }
-
- ///
- /// 默认构造函数,初始化日志文件大小[2M]
- ///
- public LogFile()
- : this("Log", string.Empty)
- {
- }
-
- ///
- /// 一个参数构造方法。参数用以初始化日志文件(部分)名称
- ///
- /// 日志文件(部分)名称
- public LogFile(string name)
- : this(name, string.Empty)
- {
- }
-
- ///
- /// 两个参数构造方法。分别初始化日志文件(部分)名称和日志路径
- ///
- /// 日志文件(部分)名称
- /// 日志文件相对路径
- public LogFile(string name, string direct)
- {
- Level = LogLevel.ALL;
- DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff";
-
- MaxFileSize = 1048576;
- FileNamePrefix = name;
- FilePath = string.Concat(CurrentDir(), "Logs\\");
- if (!direct.IsNullOrEmpty())
- {
- FilePath = string.Concat(FilePath, direct, "\\");
- }
- }
-
- ///
- /// 启动定时器
- ///
- ///
- public void StartTimer(int interval = 200)
- {
- if (timer == null)
- {
- timer = new Timer();
- timer.Tick += timer_Tick;
- }
-
- timer.Interval = 200;
- UseThread = false;
- UseTimer = true;
- timer.Start();
- }
-
- private void timer_Tick(object sender, EventArgs e)
- {
- timer.Stop();
- WriteLog();
- timer.Start();
- }
-
- ///
- /// 停止定时器
- ///
- public void StopTimer()
- {
- UseTimer = false;
- timer?.Stop();
- }
-
- ///
- /// 开启线程
- ///
- public void StartThread()
- {
- if (saver == null)
- {
- saver = new BackgroundWorker();
- saver.DoWork += Saver_DoWork;
- }
-
- saver.WorkerSupportsCancellation = true;
- UseThread = true;
- UseTimer = false;
-
- if (!saver.IsBusy)
- {
- saver.RunWorkerAsync();
- }
- }
-
- ///
- /// 停止线程
- ///
- public void StopThread()
- {
- needLog = false;
- }
-
- private static string CurrentDir()
- {
- return DealPath(AppDomain.CurrentDomain.BaseDirectory);
- }
-
- ///
- /// 处理文件夹名称末尾加反斜杠\
- ///
- /// 文件夹名称
- /// 结果
- private static string DealPath(string path)
- {
- return path.Right(1) == "\\" ? path : path + "\\";
- }
-
- private void Dispose(bool disposing)
- {
- ReleaseUnmanagedResources();
- if (disposing)
- {
- StopTimer();
- StopThread();
- }
- }
-
- ///
- /// 释放
- ///
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
-
- private static String StackFrameLocationInfo()
- {
- StackTrace st = new StackTrace(1, true);
- //GetFrame(2), 参数:0 当前行数;1 上级函数;2:上上级函数,依次类推
- StackFrame sf = st.GetFrame(2);
- if (sf == null)
- {
- return "UnknownClass";
- }
-
- string className = Path.GetFileNameWithoutExtension(sf.GetFileName());
- return $@"{className},{sf.GetMethod().Name},L{sf.GetFileLineNumber()}";
- }
-
- private static string YearMonthFolder(DateTime dt, string path, bool createIfNotExist = false)
- {
- if (path.IsNullOrEmpty())
- {
- return path;
- }
-
- string result = DealPath(path) + dt.Year.ToString("D4") + dt.Month.ToString("D2") + "\\";
- if (createIfNotExist)
- {
- CreateDir(result);
- }
-
- return result;
- }
-
- private static void CreateDir(string directoryPath)
- {
- //如果目录不存在则创建该目录
- if (!Directory.Exists(directoryPath))
- {
- try
- {
- Directory.CreateDirectory(directoryPath);
- }
- catch (Exception e)
- {
- Console.WriteLine(e);
- }
- }
- }
-
- private string GetLogFileName(LogInfo log)
- {
- string filepath = YearMonthFolder(log.Time, FilePath, true);
- int i = 1;
- string fileName = string.Concat(filepath, log.Time.ToString("yyyyMMdd"), ".", i, ".", FileNamePrefix, ".log");
- FileInfo infile = new FileInfo(fileName);
- while (true)
- {
- if (!infile.Exists || infile.Length < MaxFileSize)
- {
- break;
- }
-
- i++;
- fileName = string.Concat(filepath, log.Time.ToString("yyyyMMdd"), ".", i, ".", FileNamePrefix, ".log");
- infile = new FileInfo(fileName);
- }
-
- return fileName;
- }
-
- private void ReleaseUnmanagedResources()
- {
- saver.CancelAsync();
- }
-
- private void Saver_DoWork(object sender, DoWorkEventArgs e)
- {
- while (needLog)
- {
- if (saver.CancellationPending)
- {
- break;
- }
-
- WriteLog();
- Thread.Sleep(100);
- }
-
- e.Cancel = true;
- }
-
- ///
- /// 记录日志
- ///
- /// 信息
- public void Debug(params string[] message)
- {
- AddLog(LogLevel.DEBUG, message);
- }
-
- ///
- /// 记录日志
- ///
- /// 信息
- public void Info(params string[] message)
- {
- AddLog(LogLevel.INFO, message);
- }
-
- ///
- /// 记录日志
- ///
- /// 信息
- public void Warn(params string[] message)
- {
- AddLog(LogLevel.WARN, message);
- }
-
- ///
- /// 记录日志
- ///
- /// 信息
- public void Error(params string[] message)
- {
- AddLog(LogLevel.ERROR, message);
- }
-
- ///
- /// 记录日志
- ///
- /// 信息
- public void Fatal(params string[] message)
- {
- AddLog(LogLevel.FATAL, message);
- }
-
- ///
- /// 记录日志
- ///
- /// 错误信息
- public void WarnException(Exception e)
- {
- AddLog(LogLevel.WARN, e.Message.Trim(), e.StackTrace.Trim());
- }
-
- ///
- /// 记录日志
- ///
- /// 错误信息
- public void ErrorException(Exception e)
- {
- AddLog(LogLevel.ERROR, e.Message.Trim(), e.StackTrace.Trim());
- }
-
- ///
- /// 记录日志
- ///
- /// 错误信息
- public void FatalException(Exception e)
- {
- AddLog(LogLevel.FATAL, e.Message.Trim(), e.StackTrace.Trim());
- }
-
- private void AddLog(LogLevel level, params string[] message)
- {
- if (level < Level)
- {
- return;
- }
-
- LogInfo info = new LogInfo();
- if (LogDebugInfo || level >= LogLevel.WARN)
- {
- info.DebugInfo = StackFrameLocationInfo();
- }
-
- info.Level = level;
- info.Time = DateTime.Now;
- info.Message = string.Join(",", message);
-
- if (UseThread)
- {
- Queue.Enqueue(info);
- }
- else
- {
- WriteAtOnce(info);
- }
- }
-
- private void WriteAtOnce(LogInfo log)
- {
- sb.Clear();
- AddLog(log);
-
- bool isAdd = false;
- while (!isAdd)
- {
- try
- {
- string filename = GetLogFileName(log);
- StreamWriter sw = File.AppendText(filename);
- sw.WriteLine(sb.ToString());
- sw.Flush();
- sw.Close();
- sw.Dispose();
- isAdd = true;
- }
- catch (Exception)
- {
- // ignored
- }
- }
- }
-
- private void AddLog(LogInfo log)
- {
- sb.Append(log.Time.ToString(DateTimeFormat));
- sb.Append(",");
-
- sb.Append(log.Level.DisplayText());
- sb.Append(",");
-
- sb.Append(log.DebugInfo);
- sb.Append(",");
-
- sb.Append(log.Message);
- }
-
- private void WriteLog()
- {
- if (NoWriteLog != null || Queue.Count != 0)
- {
- sb.Clear();
-
- LogInfo log = null;
- if (NoWriteLog == null)
- {
- while (log == null)
- {
- Queue.TryDequeue(out log);
- }
- }
- else
- {
- log = NoWriteLog;
- NoWriteLog = null;
- }
-
- try
- {
- DateTime dt = log.Time;
- string filename = GetLogFileName(log);
- AddLog(log);
-
- while (Queue.Count > 0)
- {
- if (Queue.TryDequeue(out log))
- {
- if (log.Time.Date == dt.Date)
- {
- sb.Append("\r\n");
- AddLog(log);
- }
- else
- {
- NoWriteLog = log;
- break;
- }
- }
- }
-
- // using (StreamWriter sw = File.AppendText(filename))
- // {
- // sw.WriteLine(sb.ToString());
- // sw.Flush();
- // }
-
- StreamWriter sw = File.AppendText(filename);
- sw.WriteLine(sb.ToString());
- sw.Flush();
- sw.Close();
- sw.Dispose();
- }
- catch (Exception exception)
- {
- Console.WriteLine(exception);
- }
- }
- }
-
- private class LogInfo
- {
- public LogLevel Level { get; set; }
- public DateTime Time { get; set; }
- public string Message { get; set; }
- public string DebugInfo { get; set; }
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/USerialPort.cs b/SunnyUI/Units/USerialPort.cs
deleted file mode 100644
index 4f55089c..00000000
--- a/SunnyUI/Units/USerialPort.cs
+++ /dev/null
@@ -1,233 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: USerialPort.cs
- * 文件说明: 串口扩展类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.IO.Ports;
-using System.Threading;
-
-namespace Sunny.UI
-{
- ///
- /// 串口数据类型
- ///
- public enum SerialPortDataType
- {
- ///
- /// 字符串
- ///
- String,
-
- ///
- /// 数组
- ///
- Bytes
- }
-
- ///
- /// 串口扩展类
- ///
- public abstract class SerialPortEx
- {
- private SerialPort _comm;
-
- ///
- /// 串口数据类型
- ///
- public SerialPortDataType DataType { get; protected set; }
-
- ///
- /// 最后需要处理的字符串
- ///
- public string LastString { get; protected set; }
-
- ///
- /// 串口
- ///
- public SerialPort Com => _comm;
-
- ///
- /// 最后需要处理的数组
- ///
- public byte[] LastBytes;
-
- ///
- /// 数组转换为字符串
- ///
- /// 值
- /// 结果
- public string ToHexString(byte[] value)
- {
- return value.ToHexString();
- }
-
- ///
- /// 字符串转换为数组
- ///
- /// 值
- /// 结果
- public byte[] ToBytes(string value)
- {
- return value.ToHexBytes();
- }
-
- ///
- /// 串口是否打开
- ///
- public bool IsOpen { get; private set; }
-
- ///
- /// 关闭串口
- ///
- public void CloseCom()
- {
- if (!IsOpen)
- {
- return;
- }
-
- _comm.Close();
- _comm.Dispose();
- IsOpen = false;
- }
-
- ///
- /// 获取所有的串口名称
- ///
- public string[] AllPortNames
- {
- get { return SerialPort.GetPortNames(); }
- }
-
- ///
- /// 串口名称
- ///
- public string PortName => _comm == null ? "" : _comm.PortName;
-
- ///
- /// 打开串口
- ///
- /// 串口名称
- /// 波特率
- /// 奇偶校验
- /// 数据位
- /// 停止位
- public void OpenCom(string portName, int baudRate = 9600, Parity parity = Parity.None, int dataBits = 8, StopBits stopBits = StopBits.One)
- {
- CloseCom();
-
- _comm = new SerialPort
- {
- PortName = portName,
- BaudRate = baudRate,
- Parity = parity,
- DataBits = dataBits,
- StopBits = stopBits,
- };
- _comm.DataReceived += SerialPortDataReceived;
-
- try
- {
- _comm.Open();
- IsOpen = true;
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- }
- }
-
- private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)
- {
- if (DataType == SerialPortDataType.String)
- {
- DealString(ReadCommString());
- }
-
- if (DataType == SerialPortDataType.Bytes)
- {
- DealBytes(ReadCommBytes());
- }
- }
-
- ///
- /// 处理字符串
- ///
- /// 字符串
- public abstract void DealString(string value);
-
- ///
- /// 处理数组
- ///
- /// 数组
- public abstract void DealBytes(byte[] value);
-
- private string ReadCommString()
- {
- LastString = _comm.ReadExisting();
- return LastString;
- }
-
- private byte[] ReadCommBytes()
- {
- Thread.Sleep(200);
- var bytesRead = _comm.BytesToRead;
- var dataBytes = new byte[bytesRead];
- //读取缓冲区数据
- _comm.Read(dataBytes, 0, bytesRead);
- LastBytes = (byte[])dataBytes.Clone();
- return dataBytes;
- }
-
- ///
- /// 发送命令
- ///
- /// 命令
- public void SendCommand(byte[] commandBytes)
- {
- if (_comm.IsOpen)
- {
- _comm.Write(commandBytes, 0, commandBytes.Length);
- }
- }
-
- ///
- /// 发送命令
- ///
- /// 字符串
- /// 回车换行
- public void SendCommand(string cmdString, bool addEnterNew = false)
- {
- if (!IsOpen)
- {
- return;
- }
-
- if (!addEnterNew)
- {
- _comm.WriteLine(cmdString);
- }
- else
- {
- _comm.WriteLine(cmdString + "\r\n");
- }
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/USevenZip.cs b/SunnyUI/Units/USevenZip.cs
index e4c462e5..76721563 100644
--- a/SunnyUI/Units/USevenZip.cs
+++ b/SunnyUI/Units/USevenZip.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: USevenZip.cs
* 文件说明: 7-zip 文件压缩解压类(需要 7z.exe 和 7z.dll)
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Units/USnowflakeID.cs b/SunnyUI/Units/USnowflakeID.cs
deleted file mode 100644
index 21af4d28..00000000
--- a/SunnyUI/Units/USnowflakeID.cs
+++ /dev/null
@@ -1,248 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com
- *
- * Blog: https://www.cnblogs.com/yhuse
- * Gitee: https://gitee.com/yhuse/SunnyUI.git
- * GitHub: https://github.com/yhuse/SunnyUI
- *
- * SunnyUI can be used for free under the GPL-3.0 license.
- * If you use this code, please keep this note.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: USnowflakeID.cs
- * 文件说明: 雪花ID
- * 当前版本: V2.2.0.0
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Text;
-
-namespace Sunny.UI
-{
- /*
- * https://blog.csdn.net/jackpk/article/details/78248351
- * https://www.cnblogs.com/sunyuliang/
- * https://www.cnblogs.com/relucent/p/4955340.html
- * 雪花ID
- * Twitter_Snowflake
- * SnowFlake的结构如下(每部分用-分开)
- * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
- * 1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0
- * 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截)得到的值),
- * 41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69
- * 这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。
- * 10位的数据机器位,可以部署在1024个节点,包括5位datacenterId和5位workerId
- * 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号
- * 总共加起来刚好64位,为一个Long型。
- * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),
- * 并且效率较高,经测试,SnowFlake单机每秒都能够产生出极限4,096,000个ID来
- */
-
- ///
- /// 雪花ID
- ///
- public class SnowflakeID
- {
- private static SnowflakeID instance;
-
- public static SnowflakeID Instance => instance ?? (instance = new SnowflakeID());
-
- // 开始时间截 (new DateTime(2020, 1, 1).ToUniversalTime() - Jan1st1970).TotalMilliseconds
- private const long twepoch = 1577808000000L;
-
- // 机器id所占的位数
- private const int workerIdBits = 5;
-
- // 数据标识id所占的位数
- private const int datacenterIdBits = 5;
-
- // 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数)
- private const long maxWorkerId = -1L ^ (-1L << workerIdBits);
-
- // 支持的最大数据标识id,结果是31
- private const long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);
-
- // 序列在id中占的位数
- private const int sequenceBits = 12;
-
- // 数据标识id向左移17位(12+5)
- private const int datacenterIdShift = sequenceBits + workerIdBits;
-
- // 机器ID向左移12位
- private const int workerIdShift = sequenceBits;
-
- // 时间截向左移22位(5+5+12)
- private const int timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;
-
- // 生成序列的掩码,这里为4095 (0b111111111111 = 0xfff = 4095)
- private const long sequenceMask = -1L ^ (-1L << sequenceBits);
-
- // 数据中心ID(0~31)
- public long DataCenterID { get; }
-
- // 工作机器ID(0~31)
- public long WorkerID { get; }
-
- // 毫秒内序列(0~4095)
- private long Sequence { get; set; }
-
- // 上次生成ID的时间截
- private long LastTimestamp { get; set; }
-
- ///
- /// 雪花ID
- ///
- /// 数据中心ID
- /// 工作机器ID
- public SnowflakeID(long dataCenterId = 0, long workerId = 0)
- {
- if (dataCenterId > maxDatacenterId || dataCenterId < 0)
- {
- throw new Exception($"datacenter Id can't be greater than {maxDatacenterId} or less than 0");
- }
-
- if (workerId > maxWorkerId || workerId < 0)
- {
- throw new Exception($"worker Id can't be greater than {maxWorkerId} or less than 0");
- }
-
- WorkerID = workerId;
- DataCenterID = dataCenterId;
- Sequence = 0L;
- LastTimestamp = -1L;
- }
-
- ///
- /// 获得下一个ID
- ///
- ///
- public long NextID()
- {
- lock (this)
- {
- long timestamp = GetCurrentTimestamp();
- if (timestamp > LastTimestamp) //时间戳改变,毫秒内序列重置
- {
- Sequence = 0L;
- }
- else if (timestamp == LastTimestamp) //如果是同一时间生成的,则进行毫秒内序列
- {
- Sequence = (Sequence + 1) & sequenceMask;
- if (Sequence == 0) //毫秒内序列溢出
- {
- timestamp = GetNextTimestamp(LastTimestamp); //阻塞到下一个毫秒,获得新的时间戳
- }
- }
- else //当前时间小于上一次ID生成的时间戳,证明系统时钟被回拨,此时需要做回拨处理
- {
- Sequence = (Sequence + 1) & sequenceMask;
- if (Sequence > 0)
- {
- timestamp = LastTimestamp; //停留在最后一次时间戳上,等待系统时间追上后即完全度过了时钟回拨问题。
- }
- else //毫秒内序列溢出
- {
- timestamp = LastTimestamp + 1; //直接进位到下一个毫秒
- }
- //throw new Exception(string.Format("Clock moved backwards. Refusing to generate id for {0} milliseconds", LastTimestamp - timestamp));
- }
-
- LastTimestamp = timestamp; //上次生成ID的时间截
-
- //移位并通过或运算拼到一起组成64位的ID
- var id = ((timestamp - twepoch) << timestampLeftShift)
- | (DataCenterID << datacenterIdShift)
- | (WorkerID << workerIdShift)
- | Sequence;
- return id;
- }
- }
-
- ///
- /// 解析雪花ID
- ///
- ///
- public static SnowflakeIDDetail AnalyzeID(long Id)
- {
- SnowflakeIDDetail result = new SnowflakeIDDetail();
- result.SnowflakeID = Id;
- var timestamp = (Id >> timestampLeftShift);
- var time = DateTimeEx.Jan1st1970.AddMilliseconds(timestamp + twepoch);
- result.DateTime = time.ToLocalTime();
- result.DataCenterID = (Id ^ (timestamp << timestampLeftShift)) >> datacenterIdShift;
- result.WorkerID = (Id ^ ((timestamp << timestampLeftShift) | (result.DataCenterID << datacenterIdShift))) >> workerIdShift;
- result.Sequence = Id & sequenceMask;
- return result;
- }
-
- ///
- /// 阻塞到下一个毫秒,直到获得新的时间戳
- ///
- /// 上次生成ID的时间截
- /// 当前时间戳
- private static long GetNextTimestamp(long lastTimestamp)
- {
- long timestamp = GetCurrentTimestamp();
- while (timestamp <= lastTimestamp)
- {
- timestamp = GetCurrentTimestamp();
- }
- return timestamp;
- }
-
- ///
- /// 获取当前时间戳
- ///
- ///
- private static long GetCurrentTimestamp()
- {
- return (long)(DateTime.UtcNow - DateTimeEx.Jan1st1970).TotalMilliseconds;
- }
- }
-
- public struct SnowflakeIDDetail
- {
- ///
- /// 雪花ID
- ///
- public long SnowflakeID;
-
- ///
- /// 时间
- ///
- public DateTime DateTime;
-
- ///
- /// 数据中心ID(0~31)
- ///
- public long DataCenterID;
-
- ///
- /// 工作机器ID(0~31)
- ///
- public long WorkerID;
-
- ///
- /// 毫秒内序列(0~4095)
- ///
- public long Sequence;
-
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append(DateTime.ToString("yyyy-MM-dd HH:mm:ss.fff"));
- sb.Append(", ");
- sb.Append(DataCenterID);
- sb.Append(", ");
- sb.Append(WorkerID);
- sb.Append(", ");
- sb.Append(Sequence);
- return sb.ToString();
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/UStringList.cs b/SunnyUI/Units/UStringList.cs
deleted file mode 100644
index 297534d1..00000000
--- a/SunnyUI/Units/UStringList.cs
+++ /dev/null
@@ -1,222 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UStringList.cs
- * 文件说明: 字符串列表
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-
-namespace Sunny.UI
-{
- ///
- /// 字符串列表
- ///
- public class StringList
- {
- private readonly List _strings = new List();
-
- ///
- /// 数据个数属性
- ///
- public int Count => _strings.Count;
-
- ///
- /// 显示文本
- ///
- public string Text => ToString();
-
- ///
- /// 读取某行内容
- ///
- /// 序号
- /// 结果
- public string this[int index]
- {
- get
- {
- if (index < 0 || index >= Count)
- {
- throw new ArgumentOutOfRangeException();
- }
-
- return _strings[index];
- }
-
- set
- {
- if (index < 0 || index >= Count)
- {
- throw new ArgumentOutOfRangeException();
- }
-
- _strings[index] = value;
- }
- }
-
- ///
- /// 字符串数组
- ///
- public string[] Strings => _strings.ToArray();
-
- ///
- /// 追加一行
- ///
- /// 值
- /// 序号
- public int Add(string value)
- {
- _strings.Add(value);
- return Count;
- }
-
- ///
- /// 插入一行
- ///
- /// 序号
- /// 值
- /// 结果
- public void Insert(int index, string value)
- {
- if (index < 0)
- {
- index = 0;
- }
-
- _strings.Insert(index, value);
- }
-
- ///
- /// 查找数据的位置
- ///
- /// 值
- /// 位置
- public int IndexOf(string value)
- {
- return _strings.IndexOf(value);
- }
-
- ///
- /// 删除一行
- ///
- /// 序号
- public void Delete(int index)
- {
- if (index < 0 || index >= Count)
- {
- throw new ArgumentOutOfRangeException();
- }
-
- _strings.RemoveAt(index);
- }
-
- ///
- /// 转换为字符串。
- ///
- /// 结果
- public override string ToString()
- {
- return string.Join(Environment.NewLine, _strings.ToArray());
- }
-
- ///
- /// 转换为字符串。
- ///
- /// 开始序号
- /// 长度
- /// 字符串
- public string ToString(int startIndex, int count)
- {
- if (startIndex < 0)
- {
- startIndex = 0;
- }
- else if (startIndex >= Count)
- {
- return "";
- }
-
- if (count <= 0)
- {
- return "";
- }
-
- if (count + startIndex > Count)
- {
- count = Count - startIndex;
- }
-
- var s = new StringBuilder(Count);
- for (int i = startIndex; i < count; i++)
- {
- s.Append(_strings[i] + Environment.NewLine);
- }
-
- return s.ToString();
- }
-
- ///
- /// 清除内容
- ///
- public void Clear()
- {
- _strings.Clear();
- }
-
- ///
- /// 保存为一个文件
- ///
- /// 文件名
- /// 编码
- public void SaveToFile(string fileName, Encoding encoding)
- {
- File.WriteAllLines(fileName, _strings.ToArray(), encoding);
- }
-
- ///
- /// 保存文件
- ///
- /// 文件名
- public void SaveToFile(string fileName)
- {
- SaveToFile(fileName, Encoding.UTF8);
- }
-
- ///
- /// 读入一个文本文件
- ///
- /// 文件名
- public void LoadFromFile(string fileName)
- {
- LoadFromFile(fileName, Encoding.UTF8);
- }
-
- ///
- /// 从文件载入
- ///
- /// 文件名
- /// 编码
- public void LoadFromFile(string fileName, Encoding encoding)
- {
- Clear();
- _strings.AddRange(File.ReadAllLines(fileName, encoding));
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/USuspendCtrlAltDel.cs b/SunnyUI/Units/USuspendCtrlAltDel.cs
index 480831c0..ed170f09 100644
--- a/SunnyUI/Units/USuspendCtrlAltDel.cs
+++ b/SunnyUI/Units/USuspendCtrlAltDel.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: USuspendCtrlAltDel.cs
* 文件说明: 通过挂起winlogon线程来屏蔽Ctrl+Alt+Delete
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-09-17: V2.2.7 增加文件说明
diff --git a/SunnyUI/Units/UTemplate.cs b/SunnyUI/Units/UTemplate.cs
deleted file mode 100644
index e282348d..00000000
--- a/SunnyUI/Units/UTemplate.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UTemplate.cs
- * 文件说明: 模版引擎
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Text.RegularExpressions;
-
-namespace Sunny.UI
-{
- ///
- /// 模版引擎
- ///
- public class UITemplate
- {
- private string Content { get; set; }
-
- ///
- /// 模版引擎
- ///
- ///
- public UITemplate(string content)
- {
- Content = content;
- }
-
- ///
- /// 设置变量
- ///
- ///
- ///
- ///
- public UITemplate Set(string key, string value)
- {
- Content = Content.Replace("{{" + key + "}}", value);
- return this;
- }
-
- ///
- /// 渲染模板
- ///
- ///
- public string Render()
- {
- var mc = Regex.Matches(Content, @"\{\{.+?\}\}");
- foreach (Match m in mc)
- {
- throw new ArgumentException($"模版变量{m.Value}未被使用");
- }
-
- return Content;
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/UThunder.cs b/SunnyUI/Units/UThunder.cs
index 08b62dff..600da6a8 100644
--- a/SunnyUI/Units/UThunder.cs
+++ b/SunnyUI/Units/UThunder.cs
@@ -13,7 +13,7 @@
******************************************************************************
* 文件名称: UThunder.cs
* 文件说明: 迅雷下载帮助类
- * 当前版本: V2.2
+ * 当前版本: V3.0
* 创建日期: 2020-01-01
*
* 2020-01-01: V2.2.0 增加文件说明
diff --git a/SunnyUI/Units/UUdp.cs b/SunnyUI/Units/UUdp.cs
deleted file mode 100644
index 64203de4..00000000
--- a/SunnyUI/Units/UUdp.cs
+++ /dev/null
@@ -1,279 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UUdp.cs
- * 文件说明: UDP 通讯类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections.Concurrent;
-using System.Net;
-using System.Net.Sockets;
-using System.Threading;
-
-namespace Sunny.UI
-{
- ///
- /// UDP 数据接收类
- ///
- public class UdpReceiver : BackgroundWorkerEx
- {
- private UdpClient _socket;
- private IPEndPoint remoteHost;
-
- ///
- /// Udp端口
- ///
- public int Port { get; set; }
-
- ///
- /// 最后一次接收到的数据
- ///
- public byte[] LastBytes;
-
- ///
- /// 数据长度,为0时不判断长度
- ///
- public int DataLength { get; set; }
-
- ///
- /// 接收的数据队列
- ///
- public ConcurrentQueue Datas = new ConcurrentQueue();
-
- ///
- /// UDP是否连接成功
- ///
- public bool Connected { get; set; }
-
- ///
- /// 开始前调用
- ///
- protected override void InitStart()
- {
- try
- {
- _socket = new UdpClient(Port) { Client = { ReceiveBufferSize = 1024 * 1024 } };
- remoteHost = new IPEndPoint(IPAddress.Any, 0);
- Connected = true;
- }
- catch
- {
- _socket = null;
- Connected = false;
- }
-
- WorkerDelay = 0;
- }
-
- ///
- /// 停止前调用
- ///
- protected override void BeforeStop()
- {
- if (Connected)
- {
- Connected = false;
- Thread.Sleep(100);
- _socket.Close();
- _socket = null;
- }
-
- Clear();
- }
-
- ///
- /// 停止后调用
- ///
- protected override void FinalStop()
- {
- }
-
- ///
- /// 完成后调用
- ///
- protected override void DoCompleted()
- {
- }
-
- ///
- /// 线程执行代码
- ///
- protected override void DoWorker()
- {
- try
- {
- if (!Connected || _socket == null)
- {
- return;
- }
-
- if (_socket.Available <= 0)
- {
- return;
- }
-
- if (_socket.Client == null)
- {
- return;
- }
-
- byte[] receiveBytes = _socket.Receive(ref remoteHost);
-
- if (DataLength == 0 || receiveBytes.Length == DataLength)
- {
- Datas.Enqueue(receiveBytes);
- }
-
- LastBytes = (byte[])receiveBytes.Clone();
- }
- catch (Exception y)
- {
- Console.WriteLine(y.Message);
- }
- }
-
- ///
- /// 接收记录条数
- ///
- public int Count => Datas.Count;
-
- ///
- /// 清除数据
- ///
- public void Clear()
- {
- while (Datas.Count > 0)
- {
- Datas.TryDequeue(out _);
- }
- }
- }
-
- ///
- /// UDP 数据发送类
- ///
- public class UdpSender : BackgroundWorkerEx
- {
- private readonly ConcurrentQueue _queue = new ConcurrentQueue();
-
- ///
- /// 发送至此IP
- ///
- public string IpAddress { get; set; }
-
- ///
- /// 发送至此端口
- ///
- public int Port { get; set; }
-
- ///
- /// 开始前调用
- ///
- protected override void InitStart()
- {
- WorkerDelay = 10;
- Clear();
- }
-
- ///
- /// 停止后调用
- ///
- protected override void FinalStop()
- {
- Clear();
- }
-
- ///
- /// 停止前调用
- ///
- protected override void BeforeStop()
- {
- }
-
- ///
- /// 待发数据条数
- ///
- public int Count => _queue.Count;
-
- ///
- /// 清除数据
- ///
- public void Clear()
- {
- while (_queue.Count > 0)
- {
- _queue.TryDequeue(out _);
- }
- }
-
- ///
- /// 线程执行代码
- ///
- protected override void DoWorker()
- {
- while (_queue.Count > 0)
- {
- if (!_queue.TryDequeue(out var data))
- {
- continue;
- }
-
- SendData(data);
- }
- }
-
- ///
- /// 结束后调用
- ///
- protected override void DoCompleted()
- {
- }
-
- ///
- /// 发送数据
- ///
- /// 数据
- public void SendData(byte[] Data)
- {
- try
- {
- UdpClient uc = new UdpClient(IpAddress, Port);
- uc.Send(Data, Data.Length);
- uc.Close();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- }
-
- ///
- /// 增加数据
- ///
- /// 数据
- public void AddData(byte[] datas)
- {
- if (!IsStart)
- {
- return;
- }
-
- _queue.Enqueue(datas);
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/UWMI.cs b/SunnyUI/Units/UWMI.cs
deleted file mode 100644
index edf506ec..00000000
--- a/SunnyUI/Units/UWMI.cs
+++ /dev/null
@@ -1,564 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UWMI.cs
- * 文件说明: 系统信息获取类
- * 当前版本: V2.2
- * 创建日期: 2020-01-01
- *
- * 2020-01-01: V2.2.0 增加文件说明
-******************************************************************************/
-
-using System;
-using System.Collections;
-using System.Collections.Specialized;
-using System.Management;
-using System.Text;
-
-namespace Sunny.UI
-{
- #region WMIPath
-
- ///
- /// WMI 路径
- ///
- public enum WMIPath
- {
- #region 硬件
-
- ///
- /// CPU 处理器
- ///
- Win32_Processor,
-
- ///
- /// 物理内存条
- ///
- Win32_PhysicalMemory,
-
- ///
- /// 键盘
- ///
- Win32_Keyboard,
-
- ///
- /// 点输入设备,包括鼠标
- ///
- Win32_PointingDevice,
-
- ///
- /// 软盘驱动器
- ///
- Win32_FloppyDrive,
-
- ///
- /// 硬盘驱动器
- ///
- Win32_DiskDrive,
-
- ///
- /// 光盘驱动器
- ///
- Win32_CDROMDrive,
-
- ///
- /// 主板
- ///
- Win32_BaseBoard,
-
- ///
- /// BIOS 芯片
- ///
- Win32_BIOS,
-
- ///
- /// 并口
- ///
- Win32_ParallelPort,
-
- ///
- /// 串口
- ///
- Win32_SerialPort,
-
- ///
- /// 串口配置
- ///
- Win32_SerialPortConfiguration,
-
- ///
- /// 多媒体设置,一般指声卡
- ///
- Win32_SoundDevice,
-
- ///
- /// 主板插槽 (ISA、PCI、AGP)
- ///
- Win32_SystemSlot,
-
- ///
- /// USB 控制器
- ///
- Win32_USBController,
-
- ///
- /// 网络适配器
- ///
- Win32_NetworkAdapter,
-
- ///
- /// 网络适配器设置
- ///
- Win32_NetworkAdapterConfiguration,
-
- ///
- /// 打印机
- ///
- Win32_Printer,
-
- ///
- /// 打印机设置
- ///
- Win32_PrinterConfiguration,
-
- ///
- /// 打印机任务
- ///
- Win32_PrintJob,
-
- ///
- /// 打印机端口
- ///
- Win32_TCPIPPrinterPort,
-
- ///
- /// MODEM
- ///
- Win32_POTSModem,
-
- ///
- /// MODEM 端口
- ///
- Win32_POTSModemToSerialPort,
-
- ///
- /// 显示器
- ///
- Win32_DesktopMonitor,
-
- ///
- /// 显卡
- ///
- Win32_DisplayConfiguration,
-
- ///
- /// 显卡设置
- ///
- Win32_DisplayControllerConfiguration,
-
- ///
- /// 显卡细节
- ///
- Win32_VideoController,
-
- ///
- /// 显卡支持的显示模式
- ///
- Win32_VideoSettings,
-
- #endregion 硬件
-
- #region 软件
-
- ///
- /// 时区
- ///
- Win32_TimeZone,
-
- ///
- /// 驱动程序
- ///
- Win32_SystemDriver,
-
- ///
- /// 磁盘分区
- ///
- Win32_DiskPartition,
-
- ///
- /// 逻辑磁盘
- ///
- Win32_LogicalDisk,
-
- ///
- /// 逻辑磁盘所在分区及始末位置
- ///
- Win32_LogicalDiskToPartition,
-
- ///
- /// 逻辑内存配置
- ///
- Win32_LogicalMemoryConfiguration,
-
- ///
- /// 系统页文件信息
- ///
- Win32_PageFile,
-
- ///
- /// 页文件设置
- ///
- Win32_PageFileSetting,
-
- ///
- /// 系统启动配置
- ///
- Win32_BootConfiguration,
-
- ///
- /// 计算机信息简要
- ///
- Win32_ComputerSystem,
-
- ///
- /// 操作系统信息
- ///
- Win32_OperatingSystem,
-
- ///
- /// 系统自动启动程序
- ///
- Win32_StartupCommand,
-
- ///
- /// 系统安装的服务
- ///
- Win32_Service,
-
- ///
- /// 系统管理组
- ///
- Win32_Group,
-
- ///
- /// 系统组帐号
- ///
- Win32_GroupUser,
-
- ///
- /// 用户帐号
- ///
- Win32_UserAccount,
-
- ///
- /// 系统进程
- ///
- Win32_Process,
-
- ///
- /// 系统线程
- ///
- Win32_Thread,
-
- ///
- /// 共享
- ///
- Win32_Share,
-
- ///
- /// 已安装的网络客户端
- ///
- Win32_NetworkClient,
-
- ///
- /// 已安装的网络协议
- ///
- Win32_NetworkProtocol,
-
- #endregion 软件
- }
-
- #endregion WMIPath
-
- /*
-
- 获取系统信息
-
-
-
- WMI w = new WMI(WMIPath.Win32_NetworkAdapterConfiguration);
- for (int i = 0; i < w.Count; i ++)
- {
- if ((bool)w[i, "IPEnabled"])
- {
- Console.WriteLine("Caption:{0}", w[i, "Caption"]);
- Console.WriteLine("MAC Address:{0}", w[i, "MACAddress"]);
- }
- }
-
-
- */
-
- ///
- /// WMI
- ///
- public sealed class WMI
- {
- private readonly ArrayList mocs;
- private readonly StringDictionary names; // 用来存储属性名,便于忽略大小写查询正确名称。
-
- ///
- /// 信息集合数量
- ///
- public int Count => mocs.Count;
-
- ///
- /// 获取指定属性值,注意某些结果可能是数组。
- ///
- /// index
- /// propertyName
- /// object
- public object this[int index, string propertyName]
- {
- get
- {
- try
- {
- string trueName = names[propertyName.Trim()]; // 以此可不区分大小写获得正确的属性名称。
- Hashtable h = (Hashtable)mocs[index];
- return h[trueName];
- }
- catch
- {
- return null;
- }
- }
- }
-
- ///
- /// 返回所有属性名称。
- ///
- /// index
- /// string[]
- public string[] PropertyNames(int index)
- {
- try
- {
- Hashtable h = (Hashtable)mocs[index];
- string[] result = new string[h.Keys.Count];
- h.Keys.CopyTo(result, 0);
- Array.Sort(result);
- return result;
- }
- catch
- {
- return null;
- }
- }
-
- ///
- /// 返回测试信息。
- ///
- /// string
- public string Test()
- {
- try
- {
- StringBuilder result = new StringBuilder(1000);
-
- for (int i = 0; i < Count; i++)
- {
- int j = 0;
- foreach (string s in PropertyNames(i))
- {
- result.Append(string.Format("{0}:{1}={2}\n", ++j, s, this[i, s]));
-
- if (this[i, s] is Array)
- {
- Array v1 = this[i, s] as Array;
- for (int x = 0; x < v1.Length; x++)
- {
- result.Append("\t" + v1.GetValue(x) + "\n");
- }
- }
- }
-
- result.Append("======WMI=======\n");
- }
-
- return result.ToString();
- }
- catch
- {
- return string.Empty;
- }
- }
-
- ///
- /// 构造函数
- ///
- /// path
- public WMI(string path)
- {
- names = new StringDictionary();
- mocs = new ArrayList();
-
- try
- {
- ManagementClass cimobject = new ManagementClass(path);
- ManagementObjectCollection moc = cimobject.GetInstances();
- bool ok = false;
- foreach (var mo in moc)
- {
- Hashtable o = new Hashtable();
- mocs.Add(o);
-
- foreach (PropertyData p in mo.Properties)
- {
- o.Add(p.Name, p.Value);
- if (!ok)
- {
- names.Add(p.Name, p.Name);
- }
- }
-
- ok = true;
- mo.Dispose();
- }
-
- moc.Dispose();
- }
- catch (Exception e)
- {
- throw new Exception(e.Message);
- }
- }
-
- ///
- /// 构造函数
- ///
- /// path
- public WMI(WMIPath path) : this(path.ToString())
- {
- }
- }
-
- ///
- /// WMI 扩展类
- ///
- public static class WMIEx
- {
- private static string GetString(WMIPath path, string name, int index = 0)
- {
- try
- {
- WMI wmi = new WMI(path);
- if (wmi.Count > index)
- {
- var obj = wmi[index, name];
- if (obj != null)
- {
- return obj.ToString().Trim();
- }
- }
- }
- catch (Exception e)
- {
- Console.WriteLine(e);
- }
-
- return path.ToString();
- }
-
- ///
- /// 主板编号
- ///
- /// 字符串
- public static string BoardID()
- {
- return GetString(WMIPath.Win32_BaseBoard, "SerialNumber");
- }
-
- ///
- /// 主板厂家
- ///
- /// 字符串
- public static string BoardManufacturer()
- {
- return GetString(WMIPath.Win32_BaseBoard, "Manufacturer");
- }
-
- ///
- /// 主板名称
- ///
- /// 字符串
- public static string BoardName()
- {
- return GetString(WMIPath.Win32_BaseBoard, "Name");
- }
-
- ///
- /// 主板型号
- ///
- /// 字符串
- public static string BoardProduct()
- {
- return GetString(WMIPath.Win32_BaseBoard, "Product");
- }
-
- ///
- /// 硬盘编号
- ///
- /// 字符串
- public static string DiskID()
- {
- return GetString(WMIPath.Win32_DiskDrive, "SerialNumber");
- }
-
- ///
- /// 硬盘名称
- ///
- /// 字符串
- public static string DiskCaption()
- {
- return GetString(WMIPath.Win32_DiskDrive, "Caption");
- }
-
- ///
- /// CPU 编号
- ///
- /// 字符串
- public static string CPUID()
- {
- return GetString(WMIPath.Win32_Processor, "ProcessorId");
- }
-
- ///
- /// CPU 名称
- ///
- /// 字符串
- public static string CPUName()
- {
- return GetString(WMIPath.Win32_Processor, "Name");
- }
-
- ///
- /// 当前系统唯一识别号
- ///
- /// 字符串
- public static string ThisOSMD5()
- {
- return (BoardID() + CPUID() + DiskID()).Md5String();
- }
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/Units/UXmlConfig.cs b/SunnyUI/Units/UXmlConfig.cs
deleted file mode 100644
index 28e45507..00000000
--- a/SunnyUI/Units/UXmlConfig.cs
+++ /dev/null
@@ -1,156 +0,0 @@
-/******************************************************************************
- * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
- * CopyRight (C) 2012-2020 ShenYongHua(沈永华).
- * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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.
- * 如果您使用此代码,请保留此说明。
- ******************************************************************************
- * 文件名称: UXmlConfig.cs
- * 文件说明: XML 配置文件类
- * 当前版本: V2.2
- * 创建日期: 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
-{
- ///
- /// XML 配置文件类
- ///
- /// 类型
- public class XmlConfig : BaseConfig where TConfig : XmlConfig, new()
- {
- #region 加载
-
- /// 加载指定配置文件
- /// 文件名
- /// 结果
- public override bool Load(string filename)
- {
- if (filename.IsNullOrWhiteSpace())
- {
- filename = DirEx.CurrentDir() + ConfigFile;
- }
-
- if (filename.IsNullOrWhiteSpace())
- {
- throw new ApplicationException($"未指定{typeof(TConfig).Name}的配置文件路径!");
- }
-
- if (!File.Exists(filename))
- {
- return false;
- }
-
- try
- {
- ConcurrentDictionary 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;
- }
- }
-
- /// 保存到配置文件中去
- /// 文件名
- public override void Save(string filename)
- {
- if (filename.IsNullOrWhiteSpace())
- {
- filename = DirEx.CurrentDir() + ConfigFile;
- }
-
- if (filename.IsNullOrWhiteSpace())
- {
- throw new ApplicationException($"未指定{typeof(TConfig).Name}的配置文件路径!");
- }
-
- ConcurrentDictionary idents = ConfigHelper.InitIdents(current);
- ConfigHelper.SaveConfigValue(Current, idents);
-
- List strs = new List { " ", " " };
-
- strs.Add("<" + GetType().Name + ">");
-
- SortedList slist = new SortedList();
- foreach (var ident in idents.Values)
- {
- slist.Add(ident.Index, ident);
- }
-
- foreach (var ident in slist.Values)
- {
- if (!ident.Description.IsNullOrEmpty())
- {
- strs.Add(" ");
- }
-
- 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 + "");
- }
-
- strs.Add(" " + ident.Key + ">");
- }
- }
-
- strs.Add("" + GetType().Name + ">");
- DirEx.CreateDir(Path.GetDirectoryName(filename));
- File.WriteAllLines(filename, strs.ToArray(), Encoding.UTF8);
- }
-
- #endregion 加载
- }
-}
\ No newline at end of file
diff --git a/SunnyUI/gpl-3.0.txt b/SunnyUI/gpl-3.0.txt
deleted file mode 100644
index f288702d..00000000
--- a/SunnyUI/gpl-3.0.txt
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- Copyright (C)
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-.