This commit is contained in:
Sunny 2021-05-20 14:54:51 +08:00
parent c9d2668fd6
commit b78e3e7225
17 changed files with 165 additions and 476 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -6,36 +6,36 @@
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v5.0": {
"SunnyUI/3.0.3": {
"SunnyUI/3.0.4": {
"dependencies": {
"SunnyUI.Common": "3.0.3"
"SunnyUI.Common": "3.0.4"
},
"runtime": {
"SunnyUI.dll": {}
}
},
"SunnyUI.Common/3.0.3": {
"SunnyUI.Common/3.0.4": {
"runtime": {
"lib/net5.0/SunnyUI.Common.dll": {
"assemblyVersion": "3.0.3.0",
"fileVersion": "3.0.3.0"
"assemblyVersion": "3.0.4.0",
"fileVersion": "3.0.4.0"
}
}
}
}
},
"libraries": {
"SunnyUI/3.0.3": {
"SunnyUI/3.0.4": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"SunnyUI.Common/3.0.3": {
"SunnyUI.Common/3.0.4": {
"type": "package",
"serviceable": true,
"sha512": "sha512-l1LSJK1mnk/GKQzKDFi3mKf9T+l+TEEerKU0zcEjkPfA2i3Y3UfAAcSRYfjxah8+DSsL3UVghKPEXYYFnhfk5Q==",
"path": "sunnyui.common/3.0.3",
"hashPath": "sunnyui.common.3.0.3.nupkg.sha512"
"sha512": "sha512-eFd9v+FBd6+pkdjFIOx2SWXmifFmYh9RL8wgrtt3A4Q81uCo7NNiYYJys/YIcpxQReObOWmJ1h/3vZCD3sfnlA==",
"path": "sunnyui.common/3.0.4",
"hashPath": "sunnyui.common.3.0.4.nupkg.sha512"
}
}
}

Binary file not shown.

Binary file not shown.

View File

@ -6,36 +6,36 @@
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v3.1": {
"SunnyUI/3.0.3": {
"SunnyUI/3.0.4": {
"dependencies": {
"SunnyUI.Common": "3.0.3"
"SunnyUI.Common": "3.0.4"
},
"runtime": {
"SunnyUI.dll": {}
}
},
"SunnyUI.Common/3.0.3": {
"SunnyUI.Common/3.0.4": {
"runtime": {
"lib/netcoreapp3.1/SunnyUI.Common.dll": {
"assemblyVersion": "3.0.3.0",
"fileVersion": "3.0.3.0"
"assemblyVersion": "3.0.4.0",
"fileVersion": "3.0.4.0"
}
}
}
}
},
"libraries": {
"SunnyUI/3.0.3": {
"SunnyUI/3.0.4": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"SunnyUI.Common/3.0.3": {
"SunnyUI.Common/3.0.4": {
"type": "package",
"serviceable": true,
"sha512": "sha512-l1LSJK1mnk/GKQzKDFi3mKf9T+l+TEEerKU0zcEjkPfA2i3Y3UfAAcSRYfjxah8+DSsL3UVghKPEXYYFnhfk5Q==",
"path": "sunnyui.common/3.0.3",
"hashPath": "sunnyui.common.3.0.3.nupkg.sha512"
"sha512": "sha512-eFd9v+FBd6+pkdjFIOx2SWXmifFmYh9RL8wgrtt3A4Q81uCo7NNiYYJys/YIcpxQReObOWmJ1h/3vZCD3sfnlA==",
"path": "sunnyui.common/3.0.4",
"hashPath": "sunnyui.common.3.0.4.nupkg.sha512"
}
}
}

Binary file not shown.

View File

@ -94,7 +94,7 @@ namespace Sunny.UI.Demo
private void ToolStripMenuItem1_Click(object sender, EventArgs e)
{
UIMessageBox.Show("SunnyUI.Net V3.0", "关于", Style, UIMessageBoxButtons.OK, false);
UIMessageBox.Show(Version, "关于", Style, UIMessageBoxButtons.OK, false);
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)

View File

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

View File

@ -35,11 +35,11 @@
<ApplicationIcon>SunnyUI.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="SunnyUI, Version=3.0.3.0, Culture=neutral, processorArchitecture=MSIL">
<Reference Include="SunnyUI, Version=3.0.4.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Bin\net40\SunnyUI.dll</HintPath>
</Reference>
<Reference Include="SunnyUI.Common, Version=3.0.3.0, Culture=neutral, processorArchitecture=MSIL">
<Reference Include="SunnyUI.Common, Version=3.0.4.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Bin\net40\SunnyUI.Common.dll</HintPath>
</Reference>

View File

@ -200,7 +200,7 @@ namespace Sunny.UI.Properties {
}
/// <summary>
/// 查找类似 V3.0.3 的本地化字符串。
/// 查找类似 V3.0.4 的本地化字符串。
/// </summary>
internal static string Version {
get {

View File

@ -162,8 +162,8 @@
<value>..\Resources\notifier.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Version" xml:space="preserve">
<value>V3.0.3</value>
<comment>2021-04-11</comment>
<value>V3.0.4</value>
<comment>2021-05-20</comment>
</data>
<data name="wind" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\wind.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>

View File

@ -8,7 +8,7 @@
<Description>SunnyUI.Net 是基于.Net Framework 4.0+、.Net Core3.1、.Net 5 框架的 C# WinForm 开源控件库、工具类库、扩展类库、多页面开发框架。</Description>
<Copyright>CopyRight © SunnyUI.Net 2012-2021</Copyright>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<Version>3.0.3</Version>
<Version>3.0.4</Version>
<Authors>ShenYonghua</Authors>
<Company>SunnyUI.Net</Company>
<PackageId>SunnyUI</PackageId>
@ -57,7 +57,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="SunnyUI.Common" Version="3.0.3" />
<PackageReference Include="SunnyUI.Common" Version="3.0.4" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net40'">

View File

@ -1,188 +0,0 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2021 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.dll can be used for free under the GPL-3.0 license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UIObjectCollection.cs
* :
* : V3.0
* : 2021-05-19
*
* 2021-05-19: V3.0.3
******************************************************************************/
using System;
using System.Collections;
namespace Sunny.UI
{
[Serializable]
public class UIObjectCollection : IList
{
private ArrayList data = new ArrayList();
public event EventHandler CountChange;
public object this[int index]
{
get => data[index];
set => data[index] = value;
}
public int Count => data.Count;
bool IList.IsReadOnly => false;
bool IList.IsFixedSize => false;
public int Add(object value)
{
int count = data.Add(value);
CountChange?.Invoke(this, new EventArgs());
return count;
}
public void AddRange(object[] value)
{
if (value == null)
{
throw new ArgumentNullException("value is null");
}
data.AddRange(value);
CountChange?.Invoke(this, new EventArgs());
}
public void Clear()
{
data.Clear();
CountChange?.Invoke(this, new EventArgs());
}
public bool Contains(object value)
{
return data.Contains(value);
}
public void CopyTo(object[] array, int index)
{
data.CopyTo(array, index);
}
public UIObjectEnumerator GetEnumerator()
{
return new UIObjectEnumerator(this);
}
public int IndexOf(object value)
{
return data.IndexOf(value);
}
public void Insert(int index, object value)
{
data.Insert(index, value);
CountChange?.Invoke(this, new EventArgs());
}
public bool IsReadOnly => false;
public bool IsSynchronized => false;
public void Remove(object value)
{
data.Remove(value);
CountChange?.Invoke(this, new EventArgs());
}
public void RemoveAt(int index)
{
data.RemoveAt(index);
CountChange?.Invoke(this, new EventArgs());
}
public object SyncRoot => data.SyncRoot;
object IList.this[int index]
{
get => this[index];
set => this[index] = value;
}
int IList.Add(object value)
{
int count = Add(value);
CountChange?.Invoke(this, new EventArgs());
return count;
}
bool IList.Contains(object value)
{
return Contains(value);
}
int IList.IndexOf(object value)
{
return IndexOf(value);
}
void IList.Insert(int index, object value)
{
Insert(index, value);
CountChange?.Invoke(this, new EventArgs());
}
void IList.Remove(object value)
{
Remove(value);
CountChange?.Invoke(this, new EventArgs());
}
void ICollection.CopyTo(Array array, int index)
{
data.CopyTo(array, index);
}
IEnumerator IEnumerable.GetEnumerator()
{
return data.GetEnumerator();
}
}
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public class UIObjectEnumerator
{
private readonly IEnumerator baseEnumerator;
private readonly IEnumerable temp;
internal UIObjectEnumerator(UIObjectCollection mappings)
{
this.temp = (IEnumerable)(mappings);
this.baseEnumerator = temp.GetEnumerator();
}
public object Current => baseEnumerator.Current;
public bool MoveNext()
{
return baseEnumerator.MoveNext();
}
public void Reset()
{
baseEnumerator.Reset();
}
}
}

View File

@ -1,258 +0,0 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2021 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.dll can be used for free under the GPL-3.0 license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UIStringCollection.cs
* :
* : V3.0
* : 2021-05-19
*
* 2021-05-19: V3.0.3
******************************************************************************/
using System;
using System.Collections;
namespace Sunny.UI
{
/// <devdoc>
/// <para>Represents a collection of strings.</para>
/// </devdoc>
[Serializable]
public class UIStringCollection : IList
{
private ArrayList data = new ArrayList();
public event EventHandler CountChange;
/// <devdoc>
/// <para>Represents the entry at the specified index of the <see cref='System.Collections.Specialized.StringCollection'/>.</para>
/// </devdoc>
public string this[int index]
{
get => (string)data[index];
set => data[index] = value;
}
/// <devdoc>
/// <para>Gets the number of strings in the
/// <see cref='System.Collections.Specialized.StringCollection'/> .</para>
/// </devdoc>
public int Count => data.Count;
bool IList.IsReadOnly => false;
bool IList.IsFixedSize => false;
/// <devdoc>
/// <para>Adds a string with the specified value to the
/// <see cref='System.Collections.Specialized.StringCollection'/> .</para>
/// </devdoc>
public int Add(string value)
{
int count = data.Add(value);
CountChange?.Invoke(this, new EventArgs());
return count;
}
/// <devdoc>
/// <para>Copies the elements of a string array to the end of the <see cref='System.Collections.Specialized.StringCollection'/>.</para>
/// </devdoc>
public void AddRange(string[] value)
{
if (value == null)
{
throw new ArgumentNullException("value");
}
data.AddRange(value);
CountChange?.Invoke(this, new EventArgs());
}
/// <devdoc>
/// <para>Removes all the strings from the
/// <see cref='System.Collections.Specialized.StringCollection'/> .</para>
/// </devdoc>
public void Clear()
{
data.Clear();
CountChange?.Invoke(this, new EventArgs());
}
/// <devdoc>
/// <para>Gets a value indicating whether the
/// <see cref='System.Collections.Specialized.StringCollection'/> contains a string with the specified
/// value.</para>
/// </devdoc>
public bool Contains(string value)
{
return data.Contains(value);
}
/// <devdoc>
/// <para>Copies the <see cref='System.Collections.Specialized.StringCollection'/> values to a one-dimensional <see cref='System.Array'/> instance at the
/// specified index.</para>
/// </devdoc>
public void CopyTo(string[] array, int index)
{
data.CopyTo(array, index);
}
/// <devdoc>
/// <para>Returns an enumerator that can iterate through
/// the <see cref='System.Collections.Specialized.StringCollection'/> .</para>
/// </devdoc>
public UIStringEnumerator GetEnumerator()
{
return new UIStringEnumerator(this);
}
/// <devdoc>
/// <para>Returns the index of the first occurrence of a string in
/// the <see cref='System.Collections.Specialized.StringCollection'/> .</para>
/// </devdoc>
public int IndexOf(string value)
{
return data.IndexOf(value);
}
/// <devdoc>
/// <para>Inserts a string into the <see cref='System.Collections.Specialized.StringCollection'/> at the specified
/// index.</para>
/// </devdoc>
public void Insert(int index, string value)
{
data.Insert(index, value);
CountChange?.Invoke(this, new EventArgs());
}
/// <devdoc>
/// <para>Gets a value indicating whether the <see cref='System.Collections.Specialized.StringCollection'/> is read-only.</para>
/// </devdoc>
public bool IsReadOnly => false;
/// <devdoc>
/// <para>Gets a value indicating whether access to the
/// <see cref='System.Collections.Specialized.StringCollection'/>
/// is synchronized (thread-safe).</para>
/// </devdoc>
public bool IsSynchronized => false;
/// <devdoc>
/// <para> Removes a specific string from the
/// <see cref='System.Collections.Specialized.StringCollection'/> .</para>
/// </devdoc>
public void Remove(string value)
{
data.Remove(value);
CountChange?.Invoke(this, new EventArgs());
}
/// <devdoc>
/// <para>Removes the string at the specified index of the <see cref='System.Collections.Specialized.StringCollection'/>.</para>
/// </devdoc>
public void RemoveAt(int index)
{
data.RemoveAt(index);
CountChange?.Invoke(this, new EventArgs());
}
/// <devdoc>
/// <para>Gets an object that can be used to synchronize access to the <see cref='System.Collections.Specialized.StringCollection'/>.</para>
/// </devdoc>
public object SyncRoot => data.SyncRoot;
object IList.this[int index]
{
get => this[index];
set => this[index] = (string)value;
}
int IList.Add(object value)
{
int count = Add((string)value);
CountChange?.Invoke(this, new EventArgs());
return count;
}
bool IList.Contains(object value)
{
return Contains((string)value);
}
int IList.IndexOf(object value)
{
return IndexOf((string)value);
}
void IList.Insert(int index, object value)
{
Insert(index, (string)value);
CountChange?.Invoke(this, new EventArgs());
}
void IList.Remove(object value)
{
Remove((string)value);
CountChange?.Invoke(this, new EventArgs());
}
void ICollection.CopyTo(Array array, int index)
{
data.CopyTo(array, index);
}
IEnumerator IEnumerable.GetEnumerator()
{
return data.GetEnumerator();
}
}
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public class UIStringEnumerator
{
private readonly IEnumerator baseEnumerator;
private readonly IEnumerable temp;
internal UIStringEnumerator(UIStringCollection mappings)
{
this.temp = (IEnumerable)(mappings);
this.baseEnumerator = temp.GetEnumerator();
}
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public string Current => (string)(baseEnumerator.Current);
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool MoveNext()
{
return baseEnumerator.MoveNext();
}
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Reset()
{
baseEnumerator.Reset();
}
}
}

135
SunnyUI/Units/ULocalize.cs Normal file
View File

@ -0,0 +1,135 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2021 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@QQ.Com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.Common.dll can be used for free under the MIT license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UIFormHelper.cs
* :
* : V3.0
* : 2020-01-01
*
* 2020-04-19: V2.2
******************************************************************************/
namespace Sunny.UI
{
public static class UILocalize
{
/// <summary>
/// 提示
/// </summary>
public static string InfoTitle = "提示";
/// <summary>
/// 正确
/// </summary>
public static string SuccessTitle = "正确";
/// <summary>
/// 警告
/// </summary>
public static string WarningTitle = "警告";
/// <summary>
/// 错误
/// </summary>
public static string ErrorTitle = "错误";
/// <summary>
/// 提示
/// </summary>
public static string AskTitle = "提示";
/// <summary>
/// 输入
/// </summary>
public static string InputTitle = "输入";
/// <summary>
/// 选择
/// </summary>
public static string SelectTitle = "选择";
/// <summary>
/// 全部关闭
/// </summary>
public static string CloseAll = "全部关闭";
/// <summary>
/// 确定
/// </summary>
public static string OK = "确定";
/// <summary>
/// 取消
/// </summary>
public static string Cancel = "取消";
/// <summary>
/// [ 无数据 ]
/// </summary>
public static string GridNoData = "[ 无数据 ]";
/// <summary>
/// 数据加载中,请稍候...
/// </summary>
public static string GridDataLoading = "数据加载中,请稍候...";
/// <summary>
/// 数据源必须为DataTable或者List
/// </summary>
public static string GridDataSourceException = "数据源必须为DataTable或者List";
/// <summary>
/// "系统正在处理中,请稍候..."
/// </summary>
public static string SystemProcessing = "系统正在处理中,请稍候...";
}
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 = "系统正在处理中,请稍候...";
}
}
}