mirror of https://github.com/yhuse/SunnyUI.git

14 changed files with 332 additions and 1086 deletions
-
1.gitignore
-
BINBin/net40/SunnyUI.Common.dll
-
BINBin/net40/SunnyUI.Demo.exe
-
BINBin/net40/SunnyUI.dll
-
4SunnyUI.Demo/Properties/AssemblyInfo.cs
-
6SunnyUI.Demo/SunnyUI.Demo.csproj
-
2SunnyUI.Demo/packages.config
-
8SunnyUI.Net5.Demo/SunnyUI.Net5.Demo.csproj
-
3SunnyUI/Common/UImage.cs
-
788SunnyUI/Common/UIniFileEx.cs
-
4SunnyUI/Properties/Resources.Designer.cs
-
12SunnyUI/Properties/Resources.resx
-
11SunnyUI/SunnyUI.csproj
-
579Updates.md
@ -1,4 +1,4 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<packages> |
|||
<package id="SunnyUI.Common" version="3.0.8" targetFramework="net40" /> |
|||
<package id="SunnyUI.Common" version="3.0.9" targetFramework="net40" /> |
|||
</packages> |
@ -1,788 +0,0 @@ |
|||
/****************************************************************************** |
|||
* SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 |
|||
* CopyRight (C) 2012-2021 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. |
|||
* 如果您使用此代码,请保留此说明。 |
|||
****************************************************************************** |
|||
* 文件名称: UIniFileEx.cs |
|||
* 文件说明: INI 文件读取类(不用WinAPI) |
|||
* 当前版本: V3.0 |
|||
* 创建日期: 2021-10-27 |
|||
* |
|||
* 2021-10-27: V2.2.0 增加文件说明 |
|||
******************************************************************************/ |
|||
|
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Collections.Specialized; |
|||
using System.ComponentModel; |
|||
using System.Drawing; |
|||
using System.Globalization; |
|||
using System.IO; |
|||
using System.Text; |
|||
using System.Text.RegularExpressions; |
|||
|
|||
namespace Sunny.UI |
|||
{ |
|||
public class IniFileEx |
|||
{ |
|||
private readonly Dictionary<string, NameValueCollection> data = new(); |
|||
|
|||
private static readonly Regex regRemoveEmptyLines = |
|||
new Regex |
|||
( |
|||
@"(\s*;[\d\D]*?\r?\n)+|\r?\n(\s*\r?\n)*", |
|||
RegexOptions.Multiline | RegexOptions.Compiled |
|||
); |
|||
|
|||
private static readonly Regex regParseIniData = |
|||
new Regex |
|||
( |
|||
@"
|
|||
(?<IsSection> |
|||
^\s*\[(?<SectionName>[^\]]+)?\]\s*$ |
|||
) |
|||
| |
|||
(?<IsKeyValue> |
|||
^\s*(?<Key>[^(\s*\=\s*)]+)?\s*\=\s*(?<Value>[\d\D]*)$ |
|||
)",
|
|||
RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace |
|||
); |
|||
|
|||
public IniFileEx(string fileName) : this(fileName, Encoding.Default) { } |
|||
|
|||
public IniFileEx(string fileName, Encoding encoding) |
|||
{ |
|||
FileName = fileName; |
|||
Encoding = encoding; |
|||
using FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); |
|||
ReadIniData(fs, encoding); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 文件名
|
|||
/// </summary>
|
|||
[Description("文件名")] |
|||
public string FileName { get; set; } //INI文件名
|
|||
|
|||
public Encoding Encoding { get; set; } |
|||
|
|||
private void ReadIniData(Stream stream, Encoding encoding) |
|||
{ |
|||
string lastSection = string.Empty; |
|||
data.Add(lastSection, new NameValueCollection()); |
|||
if (stream != null && encoding != null) |
|||
{ |
|||
using StreamReader reader = new StreamReader(stream, encoding); |
|||
string iniData = reader.ReadToEnd(); |
|||
|
|||
iniData = regRemoveEmptyLines.Replace(iniData, "\n"); |
|||
string[] lines = iniData.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); |
|||
|
|||
foreach (string s in lines) |
|||
{ |
|||
Match m = regParseIniData.Match(s); |
|||
if (m.Success) |
|||
{ |
|||
if (m.Groups["IsSection"].Length > 0) |
|||
{ |
|||
string sName = m.Groups["SectionName"].Value.ToLowerInvariant(); |
|||
if (lastSection != sName) |
|||
{ |
|||
lastSection = sName; |
|||
if (!data.ContainsKey(sName)) |
|||
{ |
|||
data.Add(sName, new NameValueCollection()); |
|||
} |
|||
} |
|||
} |
|||
else if (m.Groups["IsKeyValue"].Length > 0) |
|||
{ |
|||
data[lastSection].Add(m.Groups["Key"].Value, m.Groups["Value"].Value); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public NameValueCollection this[string section] |
|||
{ |
|||
get |
|||
{ |
|||
section = section.ToLowerInvariant(); |
|||
if (!data.ContainsKey(section)) |
|||
data.Add(section, new NameValueCollection()); |
|||
return data[section]; |
|||
} |
|||
} |
|||
|
|||
public string this[string section, string key] |
|||
{ |
|||
get => this[section][key]; |
|||
set => this[section][key] = value; |
|||
} |
|||
|
|||
public object this[string section, string key, Type t] |
|||
{ |
|||
get |
|||
{ |
|||
if (t == null || t == (Type)Type.Missing) |
|||
return this[section][key]; |
|||
return GetValue(section, key, null, t); |
|||
} |
|||
set |
|||
{ |
|||
if (t == null || t == (Type)Type.Missing) |
|||
this[section][key] = String.Empty; |
|||
else |
|||
SetValue(section, key, value); |
|||
} |
|||
} |
|||
|
|||
public string[] KeyNames(string section) |
|||
{ |
|||
return this[section].AllKeys; |
|||
} |
|||
|
|||
public string[] SectionValues(string section) |
|||
{ |
|||
return this[section].GetValues(0); |
|||
} |
|||
|
|||
private object GetValue(string section, string key, object defaultValue, Type t) |
|||
{ |
|||
if (!data.ContainsKey(section)) return defaultValue; |
|||
string v = data[section][key]; |
|||
if (string.IsNullOrEmpty(v)) return defaultValue; |
|||
TypeConverter conv = TypeDescriptor.GetConverter(t); |
|||
if (!conv.CanConvertFrom(typeof(string))) return defaultValue; |
|||
|
|||
try |
|||
{ |
|||
return conv.ConvertFrom(v); |
|||
} |
|||
catch |
|||
{ |
|||
return defaultValue; |
|||
} |
|||
} |
|||
|
|||
private T GetValue<T>(string section, string key, T defaultValue) |
|||
{ |
|||
return (T)GetValue(section, key, defaultValue, typeof(T)); |
|||
} |
|||
|
|||
private void SetValue(string section, string key, object value) |
|||
{ |
|||
if (value == null) |
|||
{ |
|||
this[section][key] = string.Empty; |
|||
} |
|||
else |
|||
{ |
|||
TypeConverter conv = TypeDescriptor.GetConverter(value); |
|||
if (!conv.CanConvertTo(typeof(string))) |
|||
{ |
|||
this[section][key] = value.ToString(); |
|||
} |
|||
else |
|||
{ |
|||
this[section][key] = (string)conv.ConvertTo(value, typeof(string)); |
|||
} |
|||
} |
|||
|
|||
UpdateFile(); |
|||
} |
|||
|
|||
public void Write(string section, string key, string value) |
|||
{ |
|||
SetValue(section, key, value); |
|||
} |
|||
|
|||
public string Read(string section, string key, string Default) |
|||
{ |
|||
return GetValue(section, key, Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读取指定的Section的所有Value到列表中
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
public NameValueCollection GetSectionValues(string section) |
|||
{ |
|||
return this[section]; |
|||
} |
|||
|
|||
public void UpdateFile() |
|||
{ |
|||
Save(); |
|||
} |
|||
|
|||
public void Save() |
|||
{ |
|||
Save(FileName, Encoding); |
|||
} |
|||
|
|||
public void Save(string fileName, Encoding encoding) |
|||
{ |
|||
using FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); |
|||
Save(fs, encoding); |
|||
} |
|||
|
|||
private void Save(Stream stream, Encoding encoding) |
|||
{ |
|||
using StreamWriter sw = new StreamWriter(stream, encoding); |
|||
foreach (var cur in data) |
|||
{ |
|||
if (!string.IsNullOrEmpty(cur.Key)) |
|||
{ |
|||
sw.WriteLine("[{0}]", cur.Key); |
|||
} |
|||
|
|||
NameValueCollection col = cur.Value; |
|||
foreach (string key in col.Keys) |
|||
{ |
|||
if (!string.IsNullOrEmpty(key)) |
|||
{ |
|||
string value = col[key]; |
|||
if (!string.IsNullOrEmpty(value)) |
|||
sw.WriteLine("{0}={1}", key, value); |
|||
} |
|||
} |
|||
} |
|||
|
|||
sw.Flush(); |
|||
} |
|||
|
|||
public bool HasSection(string section) |
|||
{ |
|||
return data.ContainsKey(section.ToLowerInvariant()); |
|||
} |
|||
|
|||
public bool HasKey(string section, string key) |
|||
{ |
|||
return |
|||
data.ContainsKey(section) && |
|||
!string.IsNullOrEmpty(data[section][key]); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写结构
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
/// <typeparam name="T">T</typeparam>
|
|||
public void WriteStruct<T>(string section, string key, T value) where T : struct |
|||
{ |
|||
Write(section, key, value.StructToBytes()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读结构
|
|||
/// </summary>
|
|||
/// <typeparam name="T">T</typeparam>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public T ReadStruct<T>(string section, string key, T Default) where T : struct |
|||
{ |
|||
//得到结构体的大小
|
|||
int size = Default.Size(); |
|||
byte[] bytes = Read(section, key, "").ToHexBytes(); |
|||
return size > bytes.Length ? Default : bytes.ToStruct<T>(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写Byte数组
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, byte[] value) |
|||
{ |
|||
Write(section, key, value.ToHexString()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读Byte数组
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public byte[] ReadBytes(string section, string key, byte[] Default) |
|||
{ |
|||
return Read(section, key, Default.ToHexString()).ToHexBytes(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写Char
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, char value) |
|||
{ |
|||
Write(section, key, value.ToString()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读Char
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public char ReadChar(string section, string key, char Default = ' ') |
|||
{ |
|||
return Read(section, key, Default.ToString()).ToChar(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写Decimal
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, decimal value) |
|||
{ |
|||
Write(section, key, value.ToString(CultureInfo.InvariantCulture)); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读Decimal
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public decimal ReadDecimal(string section, string key, decimal Default = 0) |
|||
{ |
|||
return Read(section, key, Default.ToString(CultureInfo.InvariantCulture)).ToDecimal(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, short value) |
|||
{ |
|||
Write(section, key, value.ToString()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public short ReadShort(string section, string key, short Default = 0) |
|||
{ |
|||
return Read(section, key, Default.ToString()).ToShort(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, ushort value) |
|||
{ |
|||
Write(section, key, value.ToString()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public ushort ReadUShort(string section, string key, ushort Default = 0) |
|||
{ |
|||
return Read(section, key, Default.ToString()).ToUShort(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, int value) |
|||
{ |
|||
Write(section, key, value.ToString()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public int ReadInt(string section, string key, int Default = 0) |
|||
{ |
|||
return Read(section, key, Default.ToString()).ToInt(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, uint value) |
|||
{ |
|||
Write(section, key, value.ToString()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public uint ReadUInt(string section, string key, uint Default = 0) |
|||
{ |
|||
return Read(section, key, Default.ToString()).ToUInt(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, ulong value) |
|||
{ |
|||
Write(section, key, value.ToString()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public ulong ReadULong(string section, string key, ulong Default = 0) |
|||
{ |
|||
return Read(section, key, Default.ToString()).ToULong(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, long value) |
|||
{ |
|||
Write(section, key, value.ToString()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读整数
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public long ReadLong(string section, string key, long Default = 0) |
|||
{ |
|||
return Read(section, key, Default.ToString()).ToLong(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写布尔
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, bool value) |
|||
{ |
|||
Write(section, key, value ? bool.TrueString : bool.FalseString); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读布尔
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public bool ReadBool(string section, string key, bool Default = false) |
|||
{ |
|||
string str = Read(section, key, Default.ToString()); |
|||
if (string.Equals(str, bool.TrueString, StringComparison.CurrentCultureIgnoreCase)) |
|||
{ |
|||
return true; |
|||
} |
|||
|
|||
if (string.Equals(str, bool.FalseString, StringComparison.CurrentCultureIgnoreCase)) |
|||
{ |
|||
return false; |
|||
} |
|||
|
|||
return Default; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写Double
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, double value) |
|||
{ |
|||
Write(section, key, value.ToString(CultureInfo.InvariantCulture)); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读Double
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public double ReadDouble(string section, string key, double Default = 0) |
|||
{ |
|||
return Read(section, key, Default.ToString(CultureInfo.InvariantCulture)).ToDouble(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写Float
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, float value) |
|||
{ |
|||
Write(section, key, value.ToString(CultureInfo.InvariantCulture)); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读Float
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public float ReadFloat(string section, string key, float Default = 0) |
|||
{ |
|||
return Read(section, key, Default.ToString(CultureInfo.InvariantCulture)).ToFloat(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写Byte
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, byte value) |
|||
{ |
|||
Write(section, key, value.ToString()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读Byte
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public byte ReadByte(string section, string key, byte Default = 0) |
|||
{ |
|||
return Read(section, key, Default.ToString()).ToByte(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写SByte
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, sbyte value) |
|||
{ |
|||
Write(section, key, value.ToString()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读Byte
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public sbyte ReadSByte(string section, string key, sbyte Default = 0) |
|||
{ |
|||
return Read(section, key, Default.ToString()).ToSByte(Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写DateTime
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, DateTime value) |
|||
{ |
|||
Write(section, key, value.ToString(DateTimeEx.DateTimeFormat)); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读DateTime
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public DateTime ReadDateTime(string section, string key, DateTime Default) |
|||
{ |
|||
string str = Read(section, key, Default.ToString(CultureInfo.InvariantCulture)); |
|||
try |
|||
{ |
|||
return str.ToDateTime(DateTimeEx.DateTimeFormat); |
|||
} |
|||
catch (Exception) |
|||
{ |
|||
return Default; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写Point
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, Point value) |
|||
{ |
|||
Write(section, key, ConvertEx.ObjectToString(value, typeof(Point))); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读Point
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public Point ReadPoint(string section, string key, Point Default) |
|||
{ |
|||
string str = Read(section, key, ""); |
|||
return (Point)ConvertEx.StringToObject(str, typeof(Point), Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写PointF
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, PointF value) |
|||
{ |
|||
Write(section, key, ConvertEx.ObjectToString(value, typeof(PointF))); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读PointF
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public PointF ReadPointF(string section, string key, PointF Default) |
|||
{ |
|||
string str = Read(section, key, ""); |
|||
return (PointF)ConvertEx.StringToObject(str, typeof(PointF), Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写Size
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, Size value) |
|||
{ |
|||
Write(section, key, ConvertEx.ObjectToString(value, typeof(Size))); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读Size
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public Size ReadSize(string section, string key, Size Default) |
|||
{ |
|||
string str = Read(section, key, ""); |
|||
return (Size)ConvertEx.StringToObject(str, typeof(Size), Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写SizeF
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, SizeF value) |
|||
{ |
|||
Write(section, key, ConvertEx.ObjectToString(value, typeof(SizeF))); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读SizeF
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public SizeF ReadSizeF(string section, string key, SizeF Default) |
|||
{ |
|||
string str = Read(section, key, ""); |
|||
return (SizeF)ConvertEx.StringToObject(str, typeof(SizeF), Default); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 写Color
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="value">value</param>
|
|||
public void Write(string section, string key, Color value) |
|||
{ |
|||
Write(section, key, ConvertEx.ObjectToString(value, typeof(Color))); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 读Color
|
|||
/// </summary>
|
|||
/// <param name="section">section</param>
|
|||
/// <param name="key">key</param>
|
|||
/// <param name="Default">Normal</param>
|
|||
/// <returns>结果</returns>
|
|||
public Color ReadColor(string section, string key, Color Default) |
|||
{ |
|||
string str = Read(section, key, ""); |
|||
return (Color)ConvertEx.StringToObject(str, typeof(Color), Default); |
|||
} |
|||
} |
|||
} |
@ -1,320 +1,351 @@ |
|||
:fa-plus:增加; :fa-asterisk:修改; :fa-minus:删除 |
|||
+ 增加; |
|||
* 修改; |
|||
- 删除 |
|||
|
|||
#### 2021-11-19 V3.0.9 |
|||
+ SunnyUI: 增加.Net6版本的支持 |
|||
+ UIStyle: 全部SunnyUI控件支持DPI自适应缩放 |
|||
+ UISplitContainer: 增加UISplitContainer控件 |
|||
+ IniFileEx: 增加INI文件读取类(不用WinAPI) |
|||
+ UIForm: 增加全局热键 |
|||
+ UIForm: 增加IFrame接口 |
|||
* UILabel: 增加文字旋转角度 |
|||
* UIMessageForm: 多个按钮显示时增加FocusLine |
|||
* UIFlowLayoutPanel: 修改不同DPI缩放滚动条未覆盖的问题 |
|||
* UIComboDataGridView: 增加过滤 |
|||
* UIDataGridView: 增加一个可能出错的判断 |
|||
* UIEditForm: 代码生成增加ComboCheckedListBox类型 |
|||
* UIEditForm: 代码生成增加ComboTreeView类型 |
|||
* UIFlowLayoutPanel: 增加Scroll事件 |
|||
* UIRoundProcess: 增加显示小数位数 |
|||
* UICombobox: 右侧边框不显示时,去除绘制线 |
|||
* UILine: 调整最小长、宽为1 |
|||
* UITextBox: 支持修改背景色 |
|||
* UICheckBoxGroup :增加SetItemCheckState功能 |
|||
* UITextBox: 调整最小高度限制 |
|||
* UIProcessBar: 调整最小高度为3 |
|||
* UILineChart: 修改图线显示超出范围的问题 |
|||
* UITreeView: 判断节点Checked是否改变,只有改变时才赋值 |
|||
* UIListBox: 增加DrawItem和Demo |
|||
* UILineChart: 修改自定义最大值最小值为无穷时出错的问题 |
|||
* UILineChart: 显示点的颜色支持自定义 |
|||
* UILineChart: 支持数据包括Nan |
|||
|
|||
#### 2021-10-01 V3.0.8 |
|||
:fa-plus: Mapper: 轻量级的对象映射框架,可以映射值类型(包括Struct),和以值类型构成的List和数组。 |
|||
:fa-asterisk: UITreeView:修复TreeView默认展开时,绘制半选状态报错的问题 |
|||
:fa-asterisk: UIDataGridViewFooter: 文字显示方向与Column列显示方向一致 |
|||
:fa-asterisk: UICombobox: 修复使用BindingList进行绑定,DisplayMember是空字符串显示错误 |
|||
:fa-asterisk: UIStyle: 修改默认字体的GdiCharSet |
|||
:fa-asterisk: UIHeaderButton: 增加Disabled颜色 |
|||
:fa-asterisk: UISwitch: 增加Disabled颜色 |
|||
:fa-asterisk: UIForm: 增加Movable属性,控制点击标题行是否能移动窗体 |
|||
+ Mapper: 轻量级的对象映射框架,可以映射值类型(包括Struct),和以值类型构成的List和数组。 |
|||
* UITreeView: 修复TreeView默认展开时,绘制半选状态报错的问题 |
|||
* UIDataGridViewFooter: 文字显示方向与Column列显示方向一致 |
|||
* UICombobox: 修复使用BindingList进行绑定,DisplayMember是空字符串显示错误 |
|||
* UIStyle: 修改默认字体的GdiCharSet |
|||
* UIHeaderButton: 增加Disabled颜色 |
|||
* UISwitch: 增加Disabled颜色 |
|||
* UIForm: 增加Movable属性,控制点击标题行是否能移动窗体 |
|||
|
|||
#### 2021-09-08 V3.0.7 |
|||
:fa-plus: MMFile: 增加多进程通信框架 |
|||
:fa-plus: UIComboDataGridView: 增加表格下拉列表框 |
|||
:fa-plus: UIMillisecondTimer: 增加毫秒定时器 |
|||
:fa-plus: 增加ToolTip接口,在用UIToolTip时解决类似UITextBox这类的组合控件无法显示ToolTip的问题 |
|||
:fa-asterisk: UIForm: 修复多屏时最大化显示的问题 |
|||
:fa-asterisk: UIPage: 修复OnLoad在加载时重复加载两次的问题 |
|||
:fa-asterisk: UITextBox: 重写了水印文字的画法,并增加水印文字颜色 |
|||
:fa-asterisk: UICombobox: 修改Watermark及其颜色 |
|||
:fa-asterisk: UITextBox:增加按钮 |
|||
:fa-asterisk: UIPanel: 支持背景图片显示 |
|||
:fa-asterisk: UITitlePanel: 增加标题文字颜色 |
|||
:fa-asterisk: UIDropControl: 优化下拉框控件显示效果 |
|||
:fa-asterisk: UIEditForm: 代码创建时增加UISwitch开关文字描述 |
|||
:fa-asterisk: UINavMenu: 增加自定义TipsText显示的颜色 |
|||
:fa-asterisk: UITreeView: CheckBoxes增加三态,感谢群友:笑口常开 |
|||
:fa-asterisk: UILineChart: 增加可只显示点的模式 |
|||
:fa-asterisk: UICombobox: 增加ShowDropDown函数 |
|||
:fa-asterisk: UIGroupBox: 解决Radius为0时的报错 |
|||
:fa-asterisk: UIAnalogMeter: 增加ValueChanged事件 |
|||
:fa-asterisk: Demo: 修改Demo的UITitlePage为UIPage,UITitlePage已废弃 |
|||
:fa-asterisk: UIForm, UIPage: 增加TitleFont属性 |
|||
:fa-asterisk: UIProcessBar: 修改不显示百分比时,显示数值 |
|||
:fa-asterisk: UIDatePicker: 增加可选择年、年月、年月日 |
|||
:fa-asterisk: UIDateTimePicker: 选中的年月日标记显示 |
|||
:fa-asterisk: UIImageButton: 更改了一个属性为私有,在VB.Net下不区分大小写而出错 |
|||
:fa-asterisk: UITabControl: 增加DisposeTabPageAfterRemove标志,移除TabPage后,是否自动销毁TabPage |
|||
:fa-asterisk: UITabControl: 关闭TabPage并销毁TabPage |
|||
:fa-asterisk: 整理了一些GDI绘图的常用方法扩展 |
|||
:fa-asterisk: 整理了一些扩展函数 |
|||
+ MMFile: 增加多进程通信框架 |
|||
+ UIComboDataGridView: 增加表格下拉列表框 |
|||
+ UIMillisecondTimer: 增加毫秒定时器 |
|||
+ 增加ToolTip接口,在用UIToolTip时解决类似UITextBox这类的组合控件无法显示ToolTip的问题 |
|||
* UIForm: 修复多屏时最大化显示的问题 |
|||
* UIPage: 修复OnLoad在加载时重复加载两次的问题 |
|||
* UITextBox: 重写了水印文字的画法,并增加水印文字颜色 |
|||
* UICombobox: 修改Watermark及其颜色 |
|||
* UITextBox: 增加按钮 |
|||
* UIPanel: 支持背景图片显示 |
|||
* UITitlePanel: 增加标题文字颜色 |
|||
* UIDropControl: 优化下拉框控件显示效果 |
|||
* UIEditForm: 代码创建时增加UISwitch开关文字描述 |
|||
* UINavMenu: 增加自定义TipsText显示的颜色 |
|||
* UITreeView: CheckBoxes增加三态,感谢群友: 笑口常开 |
|||
* UILineChart: 增加可只显示点的模式 |
|||
* UICombobox: 增加ShowDropDown函数 |
|||
* UIGroupBox: 解决Radius为0时的报错 |
|||
* UIAnalogMeter: 增加ValueChanged事件 |
|||
* Demo: 修改Demo的UITitlePage为UIPage,UITitlePage已废弃 |
|||
* UIForm, UIPage: 增加TitleFont属性 |
|||
* UIProcessBar: 修改不显示百分比时,显示数值 |
|||
* UIDatePicker: 增加可选择年、年月、年月日 |
|||
* UIDateTimePicker: 选中的年月日标记显示 |
|||
* UIImageButton: 更改了一个属性为私有,在VB.Net下不区分大小写而出错 |
|||
* UITabControl: 增加DisposeTabPageAfterRemove标志,移除TabPage后,是否自动销毁TabPage |
|||
* UITabControl: 关闭TabPage并销毁TabPage |
|||
* 整理了一些GDI绘图的常用方法扩展 |
|||
* 整理了一些扩展函数 |
|||
|
|||
#### 2021-08-12 V3.0.6 |
|||
:fa-plus: UIPipe: 增加管道控件 |
|||
:fa-plus: UIValve: 增加阀门控件 |
|||
:fa-plus: UIStyle:增加多彩主题,以颜色深色,文字白色为主 |
|||
:fa-plus: UIStyle:增加紫色主题 |
|||
:fa-plus: UITableLayoutPanel:增加控件 |
|||
:fa-plus: Demo:增加工控分类 |
|||
:fa-plus: ITranslate:增加多语翻译接口 |
|||
:fa-plus: UGif: GIF图片解析类 |
|||
:fa-plus: SunnyUI: Nuget项目引用增加签名 |
|||
:fa-asterisk: UIFlowLayoutPanel: 增加了几个原生方法 |
|||
:fa-asterisk: UITransfer: 增加了显示多个移动的属性 |
|||
:fa-asterisk: UIProcessBar: 增加垂直方向的进度显示 |
|||
:fa-asterisk: UILight: 默认不显示灯光亮线 |
|||
:fa-asterisk: UINavMenu:显示子节点提示箭头 |
|||
:fa-asterisk: UINavBar: 增加选中项圆角 |
|||
:fa-asterisk: UIImageListBox: 从文件载入图片,并且解除占用 |
|||
:fa-asterisk: UICombobox: 增加几个原生方法 |
|||
:fa-asterisk: UIListBox: 增加一大波ListBox原生方法 |
|||
:fa-asterisk: UIListBox:增加Items变更的事件 |
|||
:fa-asterisk: UIForm: 修复最大化盖住任务栏的问题 |
|||
:fa-asterisk: UITextBox: 增加GotFocus和LostFocus事件 |
|||
:fa-asterisk: UIFlowLayoutPanel: 可像原生控件一样通过Controls.Add增加 |
|||
:fa-asterisk: UIListBox: 选中项显示方角 |
|||
:fa-asterisk: UIListBox:增加多选行 |
|||
:fa-asterisk: UIComboTreeView : 修复SelectedNode=null的问题 |
|||
:fa-asterisk: UIRichTextBox: 修改滚动条没有文字时自动隐藏 |
|||
:fa-asterisk: UIPage: 修复OnMouseMove事件 |
|||
:fa-asterisk: UIStyle: 更新了放在TableLayoutPanel里控件的自定义颜色问题 |
|||
:fa-asterisk: UILocalize: 内置支付串已经处理完国际化 |
|||
:fa-asterisk: UILineChart:可自定义背景色 |
|||
:fa-asterisk: UILineChart:增加实时数据的Demo |
|||
:fa-asterisk: UIBarChart, UIPieChart, UIDoughnutChart增加更新数据的方法 |
|||
:fa-asterisk: UITreeView: 调整了显示CheckBoxes时图片位置 |
|||
:fa-asterisk: ISymbol: 将字体图标最大尺寸从64调整到128 |
|||
:fa-asterisk: UITextBox: 修改Focus可用 |
|||
:fa-asterisk: UIButton:增加ShowFocusColor,用来显示Focus状态 |
|||
:fa-asterisk: UIPage:修复OnLoad在加载时重复加载两次的问题,增加Final函数,每次页面切换,退出页面都会执行 |
|||
:fa-asterisk: UIStyle: 多彩颜色增加随机颜色Demo |
|||
:fa-asterisk: UIScrollingText: 增加属性控制开启滚动 |
|||
:fa-asterisk: UIPage:恢复删除的Initialize事件 |
|||
:fa-asterisk: ISytle:调整主题切换执行流程 |
|||
:fa-asterisk: IStyle:支持自定义主题 |
|||
:fa-asterisk: ISymbol:增加SymbolOffset接口 |
|||
:fa-asterisk: UITabControl:支持Tab在下方显示 |
|||
+ UIPipe: 增加管道控件 |
|||
+ UIValve: 增加阀门控件 |
|||
+ UIStyle: 增加多彩主题,以颜色深色,文字白色为主 |
|||
+ UIStyle: 增加紫色主题 |
|||
+ UITableLayoutPanel: 增加控件 |
|||
+ Demo: 增加工控分类 |
|||
+ ITranslate: 增加多语翻译接口 |
|||
+ UGif: GIF图片解析类 |
|||
+ SunnyUI: Nuget项目引用增加签名 |
|||
* UIFlowLayoutPanel: 增加了几个原生方法 |
|||
* UITransfer: 增加了显示多个移动的属性 |
|||
* UIProcessBar: 增加垂直方向的进度显示 |
|||
* UILight: 默认不显示灯光亮线 |
|||
* UINavMenu: 显示子节点提示箭头 |
|||
* UINavBar: 增加选中项圆角 |
|||
* UIImageListBox: 从文件载入图片,并且解除占用 |
|||
* UICombobox: 增加几个原生方法 |
|||
* UIListBox: 增加一大波ListBox原生方法 |
|||
* UIListBox: 增加Items变更的事件 |
|||
* UIForm: 修复最大化盖住任务栏的问题 |
|||
* UITextBox: 增加GotFocus和LostFocus事件 |
|||
* UIFlowLayoutPanel: 可像原生控件一样通过Controls.Add增加 |
|||
* UIListBox: 选中项显示方角 |
|||
* UIListBox: 增加多选行 |
|||
* UIComboTreeView : 修复SelectedNode=null的问题 |
|||
* UIRichTextBox: 修改滚动条没有文字时自动隐藏 |
|||
* UIPage: 修复OnMouseMove事件 |
|||
* UIStyle: 更新了放在TableLayoutPanel里控件的自定义颜色问题 |
|||
* UILocalize: 内置支付串已经处理完国际化 |
|||
* UILineChart: 可自定义背景色 |
|||
* UILineChart: 增加实时数据的Demo |
|||
* UIBarChart, UIPieChart, UIDoughnutChart增加更新数据的方法 |
|||
* UITreeView: 调整了显示CheckBoxes时图片位置 |
|||
* ISymbol: 将字体图标最大尺寸从64调整到128 |
|||
* UITextBox: 修改Focus可用 |
|||
* UIButton: 增加ShowFocusColor,用来显示Focus状态 |
|||
* UIPage: 修复OnLoad在加载时重复加载两次的问题,增加Final函数,每次页面切换,退出页面都会执行 |
|||
* UIStyle: 多彩颜色增加随机颜色Demo |
|||
* UIScrollingText: 增加属性控制开启滚动 |
|||
* UIPage: 恢复删除的Initialize事件 |
|||
* ISytle: 调整主题切换执行流程 |
|||
* IStyle: 支持自定义主题 |
|||
* ISymbol: 增加SymbolOffset接口 |
|||
* UITabControl: 支持Tab在下方显示 |
|||
|
|||
#### 2021-07-11 V3.0.5 |
|||
:fa-plus: 字体图标:增加FontAwesome V5.15版本字体图标 |
|||
:fa-plus: UISignal: 增加信号强度显示控件 |
|||
:fa-plus: UIToolStripDropDown: 增加了一个弹窗管理类 |
|||
:fa-asterisk: UIPage:增加标题行,后期以替代UITitlePage |
|||
:fa-asterisk: Demo的Controls下的页面全部从UITitlePage切换到UIPage,后期会逐步舍弃UITitlePage。 |
|||
:fa-asterisk: UIDataGridView:增加了一个RowHeight,默认23 |
|||
:fa-asterisk: IStyleInterface:设置为Public,可基于此扩展外部控件 |
|||
:fa-asterisk: UIRichTextBox:支持可改背景色 |
|||
:fa-asterisk: UIPagination:更新了Demo,分页切换事件加载数据。 |
|||
:fa-asterisk: UITitlePage:解决标题栏闪烁 |
|||
:fa-asterisk: UITextBox:增加图标和字体图标的显示 |
|||
:fa-asterisk: UITextBox: MaximumEnabled,MinimumEnabled代替HasMaximum,HasMinim |
|||
:fa-asterisk: UIHeaderButton: 增加了TextImageRelation,实现文本和图像的相对位置 |
|||
:fa-asterisk: UIListBox:修改对象绑定的显示问题 |
|||
:fa-asterisk: UICombobox: 更新了数据绑定相关代码 |
|||
:fa-asterisk: UITabControl:Tab页标题选中高亮颜色增加可调整高度 |
|||
:fa-asterisk: UINavBar: 标题选中高亮颜色增加可调整高度 |
|||
:fa-asterisk: UIListBox:更新一处数据绑定显示错误 |
|||
:fa-asterisk: UINavMenu:增加右侧图标 |
|||
:fa-asterisk: UIBattery:修改可自定义背景色 |
|||
:fa-asterisk: UILight:增加方形显示,优化渐变色 |
|||
:fa-asterisk: UIHeaderButton:增加ShowSelected,是否显示选中状态 |
|||
:fa-asterisk: UIBarChart:修正一个显示的Bug |
|||
:fa-asterisk: UIRoundProcess:修改显示值 |
|||
:fa-asterisk: UIRichTextBox:增加WordWrap属性 |
|||
:fa-asterisk: UIDataGridView:自定义单元格颜色 |
|||
:fa-asterisk: IFame:增加一个反馈的接口,Feedback,Page可将对象反馈给Frame |
|||
:fa-asterisk: UIAvatar:更改图片显示 |
|||
:fa-asterisk: UIPagination:设置总数在页面不超过总页数的情况下不刷新 |
|||
:fa-asterisk: UITextBox等组合控件将其回调事件的Sender设置为this,而不是其内置控件 |
|||
:fa-asterisk: UIFlowLayoutPanel:增加滚动条颜色属性 |
|||
+ 字体图标: 增加FontAwesome V5.15版本字体图标 |
|||
+ UISignal: 增加信号强度显示控件 |
|||
+ UIToolStripDropDown: 增加了一个弹窗管理类 |
|||
* UIPage: 增加标题行,后期以替代UITitlePage |
|||
* Demo的Controls下的页面全部从UITitlePage切换到UIPage,后期会逐步舍弃UITitlePage。 |
|||
* UIDataGridView: 增加了一个RowHeight,默认23 |
|||
* IStyleInterface: 设置为Public,可基于此扩展外部控件 |
|||
* UIRichTextBox: 支持可改背景色 |
|||
* UIPagination: 更新了Demo,分页切换事件加载数据。 |
|||
* UITitlePage: 解决标题栏闪烁 |
|||
* UITextBox: 增加图标和字体图标的显示 |
|||
* UITextBox: MaximumEnabled,MinimumEnabled代替HasMaximum,HasMinim |
|||
* UIHeaderButton: 增加了TextImageRelation,实现文本和图像的相对位置 |
|||
* UIListBox: 修改对象绑定的显示问题 |
|||
* UICombobox: 更新了数据绑定相关代码 |
|||
* UITabControl: Tab页标题选中高亮颜色增加可调整高度 |
|||
* UINavBar: 标题选中高亮颜色增加可调整高度 |
|||
* UIListBox: 更新一处数据绑定显示错误 |
|||
* UINavMenu: 增加右侧图标 |
|||
* UIBattery: 修改可自定义背景色 |
|||
* UILight: 增加方形显示,优化渐变色 |
|||
* UIHeaderButton: 增加ShowSelected,是否显示选中状态 |
|||
* UIBarChart: 修正一个显示的Bug |
|||
* UIRoundProcess: 修改显示值 |
|||
* UIRichTextBox: 增加WordWrap属性 |
|||
* UIDataGridView: 自定义单元格颜色 |
|||
* IFame: 增加一个反馈的接口,Feedback,Page可将对象反馈给Frame |
|||
* UIAvatar: 更改图片显示 |
|||
* UIPagination: 设置总数在页面不超过总页数的情况下不刷新 |
|||
* UITextBox等组合控件将其回调事件的Sender设置为this,而不是其内置控件 |
|||
* UIFlowLayoutPanel: 增加滚动条颜色属性 |
|||
|
|||
#### 2021-05-20 V3.0.4 |
|||
:fa-plus: UIObjectCollection:带集合个数改变事件的对象集合类 |
|||
:fa-plus: UIStringCollection:带集合个数改变事件的字符串集合类 |
|||
:fa-plus: UIDataGridViewFooter:增加DataGridView页脚,可做统计显示 |
|||
:fa-asterisk: UIBreadcrumb, UICheckBoxGroup, UIRadioButtonGroup: 更改列表项为UIObjectCollection |
|||
:fa-asterisk: UIScrollingText:增加属性可设置双击暂停滚动 |
|||
:fa-asterisk: UIEditForm:动态生成表单,增加校验方法 |
|||
:fa-asterisk: UIDoubleUpDown, UIIntegerUpDown:将双击编辑更改为单机编辑并选中 |
|||
:fa-asterisk: IFrame:增加RemovePage接口 |
|||
:fa-asterisk: UIMessageDialog,UIMessageBox:增加TopMost参数 |
|||
:fa-asterisk: UIBarChart:修改了一个显示负值的Bug |
|||
:fa-asterisk: UIForm:加了个属性AllowAddControlOnTitle,允许在标题栏放置控件 |
|||
:fa-asterisk: UICombobox:解决鼠标下拉选择,触发SelectedIndexChanged两次的问题 |
|||
:fa-asterisk: UISwitch:更新Active状态改变时触发ValueChanged事件 |
|||
:fa-asterisk: UIDataGridView:设置数据行头部颜色 |
|||
:fa-asterisk: UIEditForm:代码生成增加Switch类型,增加Combobox类型 |
|||
:fa-asterisk: UICheckBox,UIRadioButton:增加默认事件CheckedChanged |
|||
:fa-asterisk: UIProcessBar:可设置显示进度条小数个数 |
|||
:fa-asterisk: 等待提示框:更新等待时间短时无法关闭等待窗体的问题 |
|||
:fa-asterisk: DirEx:增加一个文件夹选择框 |
|||
:fa-asterisk: UITextBox:增加ShowScrollBar属性,单独控制垂直滚动条 |
|||
:fa-asterisk: UITextBox:不限制高度为根据字体计算,可进行调整 |
|||
:fa-asterisk: UITextBox:解决多行输入时不能输入回车的问题 |
|||
:fa-asterisk: UITextBox:修改文字可以居中显示 |
|||
:fa-asterisk: UIDatePicker,UIDateTimePicker:增加ShowToday显示今日属性 |
|||
:fa-asterisk: UILineChart:有右键菜单时,取消恢复上次缩放,可在右键菜单增加节点,调用ZoomBack()方法 |
|||
+ UIObjectCollection: 带集合个数改变事件的对象集合类 |
|||
+ UIStringCollection: 带集合个数改变事件的字符串集合类 |
|||
+ UIDataGridViewFooter: 增加DataGridView页脚,可做统计显示 |
|||
* UIBreadcrumb, UICheckBoxGroup, UIRadioButtonGroup: 更改列表项为UIObjectCollection |
|||
* UIScrollingText: 增加属性可设置双击暂停滚动 |
|||
* UIEditForm: 动态生成表单,增加校验方法 |
|||
* UIDoubleUpDown, UIIntegerUpDown: 将双击编辑更改为单机编辑并选中 |
|||
* IFrame: 增加RemovePage接口 |
|||
* UIMessageDialog,UIMessageBox: 增加TopMost参数 |
|||
* UIBarChart: 修改了一个显示负值的Bug |
|||
* UIForm: 加了个属性AllowAddControlOnTitle,允许在标题栏放置控件 |
|||
* UICombobox: 解决鼠标下拉选择,触发SelectedIndexChanged两次的问题 |
|||
* UISwitch: 更新Active状态改变时触发ValueChanged事件 |
|||
* UIDataGridView: 设置数据行头部颜色 |
|||
* UIEditForm: 代码生成增加Switch类型,增加Combobox类型 |
|||
* UICheckBox,UIRadioButton: 增加默认事件CheckedChanged |
|||
* UIProcessBar: 可设置显示进度条小数个数 |
|||
* 等待提示框: 更新等待时间短时无法关闭等待窗体的问题 |
|||
* DirEx: 增加一个文件夹选择框 |
|||
* UITextBox: 增加ShowScrollBar属性,单独控制垂直滚动条 |
|||
* UITextBox: 不限制高度为根据字体计算,可进行调整 |
|||
* UITextBox: 解决多行输入时不能输入回车的问题 |
|||
* UITextBox: 修改文字可以居中显示 |
|||
* UIDatePicker,UIDateTimePicker: 增加ShowToday显示今日属性 |
|||
* UILineChart: 有右键菜单时,取消恢复上次缩放,可在右键菜单增加节点,调用ZoomBack()方法 |
|||
|
|||
#### 2021-04-11 V3.0.2 |
|||
:fa-plus: UIMarkLabel:增加带颜色标签的Label |
|||
:fa-plus: UIRoundProcess:圆形滚动条 |
|||
:fa-plus: UIBreadcrumb:增加面包屑导航 |
|||
:fa-plus: UILedLabel:增加Led标签 |
|||
:fa-asterisk: UIHeaderButton:在工具箱中显示 |
|||
:fa-asterisk: UILineChart:支持拖拽选取放大 |
|||
:fa-asterisk: UIDateTimePicker:修复下拉选择日期后关闭的Bug |
|||
:fa-asterisk: UINavMenu:增加设置二级菜单底色 |
|||
:fa-asterisk: UIColorPicker:增加单击事件以选中颜色 |
|||
:fa-asterisk: UITitlePage:增加ShowTitle可控制是否显示标题 |
|||
:fa-asterisk: UINavBar:增加可设置背景图片 |
|||
:fa-asterisk: 框架增加IFrame接口,方便页面跳转 |
|||
:fa-asterisk: UIDataGridView:修改垂直滚动条和原版一致,并增加翻页方式滚动 |
|||
:fa-asterisk: UIPagination: 修正因两次查询数量相等而引起的不刷新 |
|||
:fa-asterisk: UIHeaderButton: 增加字体图标背景时鼠标移上背景色 |
|||
:fa-asterisk: UITabControl:修改第一个TabPage关不掉的Bug |
|||
:fa-asterisk: UIDataGridView:增加EnterAsTab属性,编辑输入时,用Enter键代替Tab键跳到下一个单元格 |
|||
:fa-asterisk: UILineChart:增加鼠标框选放大,可多次放大,右键点击恢复一次,双击恢复 |
|||
:fa-asterisk: UITitlePanel:修复OnMouseMove事件 |
|||
:fa-asterisk: UITrackBar:增加垂直显示方式 |
|||
:fa-asterisk: UIFlowLayoutPanel:修改了一处因为其加入控件大小发生变化而引起的滚动条出错 |
|||
+ UIMarkLabel: 增加带颜色标签的Label |
|||
+ UIRoundProcess: 圆形滚动条 |
|||
+ UIBreadcrumb: 增加面包屑导航 |
|||
+ UILedLabel: 增加Led标签 |
|||
* UIHeaderButton: 在工具箱中显示 |
|||
* UILineChart: 支持拖拽选取放大 |
|||
* UIDateTimePicker: 修复下拉选择日期后关闭的Bug |
|||
* UINavMenu: 增加设置二级菜单底色 |
|||
* UIColorPicker: 增加单击事件以选中颜色 |
|||
* UITitlePage: 增加ShowTitle可控制是否显示标题 |
|||
* UINavBar: 增加可设置背景图片 |
|||
* 框架增加IFrame接口,方便页面跳转 |
|||
* UIDataGridView: 修改垂直滚动条和原版一致,并增加翻页方式滚动 |
|||
* UIPagination: 修正因两次查询数量相等而引起的不刷新 |
|||
* UIHeaderButton: 增加字体图标背景时鼠标移上背景色 |
|||
* UITabControl: 修改第一个TabPage关不掉的Bug |
|||
* UIDataGridView: 增加EnterAsTab属性,编辑输入时,用Enter键代替Tab键跳到下一个单元格 |
|||
* UILineChart: 增加鼠标框选放大,可多次放大,右键点击恢复一次,双击恢复 |
|||
* UITitlePanel: 修复OnMouseMove事件 |
|||
* UITrackBar: 增加垂直显示方式 |
|||
* UIFlowLayoutPanel: 修改了一处因为其加入控件大小发生变化而引起的滚动条出错 |
|||
|
|||
#### 2021-02-26 V3.0.1 |
|||
:fa-plus: UIForm:标题栏增加扩展按钮 |
|||
:fa-plus: UIHeaderButton:新增大图标的导航按钮 |
|||
:fa-plus: 新增UIComboboxEx,从Combobox原生控件继承,以方便做查询过滤等操作 |
|||
:fa-asterisk: UIForm:修正不显示标题栏时,标题栏位置可放置控件 |
|||
:fa-asterisk: UIListBox:增加一些原有属性 |
|||
:fa-asterisk: FCombobox:增加数据绑定Demo |
|||
:fa-asterisk: UICombobox:更改索引改变事件的多次触发 |
|||
:fa-asterisk: UIForm:修改一处Icon图片显示的问题 |
|||
:fa-asterisk: UIEditForm:修改通过代码生成窗体控件的TabIndex |
|||
:fa-asterisk: UIDatePicker,UIDateTimePicker:将日期选择控件的最小值调整为1900年 |
|||
:fa-asterisk: UIHeaderButton:将其命名空间从Sunny.UI.Control改为Sunny.UI |
|||
+ UIForm: 标题栏增加扩展按钮 |
|||
+ UIHeaderButton: 新增大图标的导航按钮 |
|||
+ 新增UIComboboxEx,从Combobox原生控件继承,以方便做查询过滤等操作 |
|||
* UIForm: 修正不显示标题栏时,标题栏位置可放置控件 |
|||
* UIListBox: 增加一些原有属性 |
|||
* FCombobox: 增加数据绑定Demo |
|||
* UICombobox: 更改索引改变事件的多次触发 |
|||
* UIForm: 修改一处Icon图片显示的问题 |
|||
* UIEditForm: 修改通过代码生成窗体控件的TabIndex |
|||
* UIDatePicker,UIDateTimePicker: 将日期选择控件的最小值调整为1900年 |
|||
* UIHeaderButton: 将其命名空间从Sunny.UI.Control改为Sunny.UI |
|||
|
|||
#### 2021-01-26 V3.0.0 |
|||
:fa-plus: 同时兼容.Net Framework 4.0:fa-plus:、.Net Core3.1、.Net 5 框架 |
|||
:fa-asterisk: 更新UIMessageTip |
|||
:fa-asterisk: UIForm:增加ShowTitleIcon用来显示标题栏图标,与ShowIcon分开 |
|||
:fa-asterisk: UINavBar:增加下拉菜单可设置自动高度或者固定高度,可显示ImageList绑定 |
|||
:fa-asterisk: UIDataGridView更新行头和列头的选中颜色 |
|||
+ 同时兼容.Net Framework 4.0+:、.Net Core3.1、.Net 5 框架 |
|||
* 更新UIMessageTip |
|||
* UIForm: 增加ShowTitleIcon用来显示标题栏图标,与ShowIcon分开 |
|||
* UINavBar: 增加下拉菜单可设置自动高度或者固定高度,可显示ImageList绑定 |
|||
* UIDataGridView更新行头和列头的选中颜色 |
|||
|
|||
#### 2021-01-05 V2.2.10 |
|||
:fa-asterisk: V2.2 .Net Framewok 4.0最终版本 |
|||
:fa-asterisk: V3.0 开始将同时兼容.Net Framework 4.0:fa-plus:、.Net Core3.1、.Net 5 框架 |
|||
* V2.2 .Net Framewok 4.0最终版本 |
|||
* V3.0 开始将同时兼容.Net Framework 4.0+:、.Net Core3.1、.Net 5 框架 |
|||
|
|||
#### 2020-12-20 V2.2.9 |
|||
:fa-plus: UIWaitForm:等待窗体 |
|||
:fa-plus: UIComboTreeView:新增下拉框TreeView |
|||
:fa-plus: UIMessageForm:消息提示框增加黑色半透明遮罩层 |
|||
:fa-plus: Win32API:新增Win32API函数 |
|||
:fa-plus: UJsonConfig:不引用第三方控件,用.Net自带的序列化实现Json,增加Json文件配置类 |
|||
:fa-plus: UIDataGridViewForm:增加了一个表格模板基类 |
|||
:fa-asterisk: UIDataGridView:修改DataSource赋值后Column改变引起的水平滚动条错误 |
|||
:fa-asterisk: UIDoubleUpDown,UIIntegerUpDown:增加双击可编辑数值 |
|||
:fa-asterisk: UINavMenu:增加选中后图标的背景色或应用选中图片索引 |
|||
:fa-asterisk: 页面框架增加页面内跳转方法 |
|||
:fa-asterisk: 日期、时间选择框增加CanEmpty,输入可为空 |
|||
+ UIWaitForm: 等待窗体 |
|||
+ UIComboTreeView: 新增下拉框TreeView |
|||
+ UIMessageForm: 消息提示框增加黑色半透明遮罩层 |
|||
+ Win32API: 新增Win32API函数 |
|||
+ UJsonConfig: 不引用第三方控件,用.Net自带的序列化实现Json,增加Json文件配置类 |
|||
+ UIDataGridViewForm: 增加了一个表格模板基类 |
|||
* UIDataGridView: 修改DataSource赋值后Column改变引起的水平滚动条错误 |
|||
* UIDoubleUpDown,UIIntegerUpDown: 增加双击可编辑数值 |
|||
* UINavMenu: 增加选中后图标的背景色或应用选中图片索引 |
|||
* 页面框架增加页面内跳转方法 |
|||
* 日期、时间选择框增加CanEmpty,输入可为空 |
|||
|
|||
#### 2020-10-12 V2.2.8 |
|||
:fa-plus: UILineChart:完成曲线图表 |
|||
:fa-plus: UIScale:增加坐标轴刻度计算类 |
|||
:fa-plus: UIFlowLayoutPanel:增加 |
|||
:fa-plus: UIBarChartEx:增加了一个新的柱状图类型,序列个数可以不相等 |
|||
:fa-plus: UDateTimeInt64:增加DateTimeInt64类,时间整形互转类 |
|||
:fa-asterisk: UIForm:增加窗体阴影 |
|||
:fa-asterisk: UIMainFrame:页面框架增加Selecting事件,在页面切换时执行该事件 |
|||
:fa-asterisk: UITextBox:解决Anchor包含Top、Bottom时,在窗体最小化后恢复时高度变化 |
|||
:fa-asterisk: UISwitch:增加长方形形状开关,取消长宽比锁定 |
|||
:fa-asterisk: UITreeView:背景色可改,设置FillColor,以及SystemCustomMode = true |
|||
:fa-asterisk: UIDataGridView:解决水平滚动条在有列冻结时出错的问题 |
|||
+ UILineChart: 完成曲线图表 |
|||
+ UIScale: 增加坐标轴刻度计算类 |
|||
+ UIFlowLayoutPanel: 增加 |
|||
+ UIBarChartEx: 增加了一个新的柱状图类型,序列个数可以不相等 |
|||
+ UDateTimeInt64: 增加DateTimeInt64类,时间整形互转类 |
|||
* UIForm: 增加窗体阴影 |
|||
* UIMainFrame: 页面框架增加Selecting事件,在页面切换时执行该事件 |
|||
* UITextBox: 解决Anchor包含Top、Bottom时,在窗体最小化后恢复时高度变化 |
|||
* UISwitch: 增加长方形形状开关,取消长宽比锁定 |
|||
* UITreeView: 背景色可改,设置FillColor,以及SystemCustomMode = true |
|||
* UIDataGridView: 解决水平滚动条在有列冻结时出错的问题 |
|||
|
|||
#### 2020-09-17 V2.2.7 |
|||
:fa-plus: 新增双主键线程安全字典,分组线程安全字典 |
|||
:fa-plus: UIHorScrollBarEx,UIVerScrollBarEx:重写了两个滚动条 |
|||
:fa-asterisk: UIForm:恢复了WindowState,增加了窗体可拉拽调整大小 |
|||
:fa-asterisk: 增加控件属性显示值及Sunny UI分类 |
|||
:fa-asterisk: UIDateTimePicker,UITimePicker:更改滚轮选择时间的方向 |
|||
:fa-asterisk: UIButton:Tips颜色可设置 |
|||
:fa-asterisk: UIChart:增加图表的边框线颜色设置 |
|||
:fa-asterisk: UITextBox:增加FocusedSelectAll属性,激活时全选 |
|||
:fa-asterisk: UINavBar:增加节点的Image绘制 |
|||
:fa-asterisk: UIDataGridView:调整水平滚动条 |
|||
:fa-asterisk: UIButton:添加'是否启用双击事件'属性,解决连续点击效率问题 |
|||
:fa-asterisk: UIDataGridView:更新了水平和垂直滚动条的显示,优化滚动效果 |
|||
:fa-asterisk: UIBbutton:空格键按下press背景效果 |
|||
:fa-asterisk: UIListBox优化滚轮快速滚动流畅性 |
|||
:fa-asterisk: UIBarChart:可设置柱状图最小宽度 |
|||
:fa-asterisk: UIIntegerUpDown, UIDoubleUpDown:增加字体调整 |
|||
:fa-asterisk: UITabControl:标题垂直居中 |
|||
:fa-asterisk: UITreeView:更新可设置背景色 |
|||
:fa-asterisk: UIDatePicker,UITimePicker,UIDateTimePicker:可编辑输入,日期范围控制 |
|||
:fa-asterisk: UIDatePicker:更改日期范围最小值和最大值 |
|||
:fa-asterisk: UITitlePanel:更新大小调整后的按钮位置 |
|||
+ 新增双主键线程安全字典,分组线程安全字典 |
|||
+ UIHorScrollBarEx,UIVerScrollBarEx: 重写了两个滚动条 |
|||
* UIForm: 恢复了WindowState,增加了窗体可拉拽调整大小 |
|||
* 增加控件属性显示值及Sunny UI分类 |
|||
* UIDateTimePicker,UITimePicker: 更改滚轮选择时间的方向 |
|||
* UIButton: Tips颜色可设置 |
|||
* UIChart: 增加图表的边框线颜色设置 |
|||
* UITextBox: 增加FocusedSelectAll属性,激活时全选 |
|||
* UINavBar: 增加节点的Image绘制 |
|||
* UIDataGridView: 调整水平滚动条 |
|||
* UIButton: 添加'是否启用双击事件'属性,解决连续点击效率问题 |
|||
* UIDataGridView: 更新了水平和垂直滚动条的显示,优化滚动效果 |
|||
* UIBbutton: 空格键按下press背景效果 |
|||
* UIListBox优化滚轮快速滚动流畅性 |
|||
* UIBarChart: 可设置柱状图最小宽度 |
|||
* UIIntegerUpDown, UIDoubleUpDown: 增加字体调整 |
|||
* UITabControl: 标题垂直居中 |
|||
* UITreeView: 更新可设置背景色 |
|||
* UIDatePicker,UITimePicker,UIDateTimePicker: 可编辑输入,日期范围控制 |
|||
* UIDatePicker: 更改日期范围最小值和最大值 |
|||
* UITitlePanel: 更新大小调整后的按钮位置 |
|||
|
|||
#### 2020-07-30 V2.2.6 |
|||
:fa-plus: UIPagination:新增分页控件 |
|||
:fa-plus: UIToolTip:新增控件,可修改字体 |
|||
:fa-plus: UIHorScrollBar:新增水平滚动条 |
|||
:fa-plus: UIWaitingBar:新增等待滚动条控件 |
|||
:fa-asterisk: UIDataGridView:重绘水平滚动条,更新默认设置为原生控件设置 |
|||
:fa-asterisk: UITitlePanel:增加可收缩选项 |
|||
:fa-asterisk: UIPieChart,UIBarChart:增加序列自定义颜色 |
|||
:fa-asterisk: UISymbolButton:增加Image属性,增加图片和文字的摆放位置 |
|||
:fa-asterisk: UIButton:增加Selected及选中颜色配置 |
|||
:fa-asterisk: UIForm:支持点击窗体任务栏图标,可以进行最小化 |
|||
:fa-asterisk: UIForm:增加标题栏ICON图标绘制 |
|||
:fa-asterisk: UIDateTimePicker:重写下拉窗体,缩短创建时间 |
|||
:fa-asterisk: UITreeView:全部重写,增加圆角,CheckBoxes等 |
|||
:fa-asterisk: UIDatePicker:重写下拉窗体,缩短创建时间 |
|||
:fa-asterisk: UICheckBoxGroup,UIRadioButtonGroup:可以设置初始选中值 |
|||
:fa-asterisk: UILedBulb:边缘平滑 |
|||
:fa-asterisk: UIForm:仿照QQ,重绘标题栏按钮 |
|||
+ UIPagination: 新增分页控件 |
|||
+ UIToolTip: 新增控件,可修改字体 |
|||
+ UIHorScrollBar: 新增水平滚动条 |
|||
+ UIWaitingBar: 新增等待滚动条控件 |
|||
* UIDataGridView: 重绘水平滚动条,更新默认设置为原生控件设置 |
|||
* UITitlePanel: 增加可收缩选项 |
|||
* UIPieChart,UIBarChart: 增加序列自定义颜色 |
|||
* UISymbolButton: 增加Image属性,增加图片和文字的摆放位置 |
|||
* UIButton: 增加Selected及选中颜色配置 |
|||
* UIForm: 支持点击窗体任务栏图标,可以进行最小化 |
|||
* UIForm: 增加标题栏ICON图标绘制 |
|||
* UIDateTimePicker: 重写下拉窗体,缩短创建时间 |
|||
* UITreeView: 全部重写,增加圆角,CheckBoxes等 |
|||
* UIDatePicker: 重写下拉窗体,缩短创建时间 |
|||
* UICheckBoxGroup,UIRadioButtonGroup: 可以设置初始选中值 |
|||
* UILedBulb: 边缘平滑 |
|||
* UIForm: 仿照QQ,重绘标题栏按钮 |
|||
|
|||
#### 2020-06-29 V2.2.5 |
|||
:fa-plus: UIDoughnutChart:环状图 |
|||
:fa-plus: UILoginForm:登录窗体 |
|||
:fa-plus: UIScrollingText:滚动文字 |
|||
:fa-plus: UIBarChart:柱状图 |
|||
:fa-plus: UIPieChart:饼状图 |
|||
:fa-plus: UIRichTextBox:富文本框 |
|||
:fa-plus: UIBattery:电池电量显示 |
|||
:fa-plus: UIDatetimePicker:日期时间选择框 |
|||
:fa-plus: UIColorPicker:颜色选择框 |
|||
:fa-plus: UITimePicker:时间选择框 |
|||
:fa-plus: UIMessageTipHelper:增加MessageTip扩展方法 |
|||
:fa-asterisk: UIComboBox:增加数据绑定 |
|||
:fa-asterisk: 页面框架支持通过PageIndex和PageGuid关联 |
|||
:fa-asterisk: UITextBox:增加Multiline属性,增加滚动条 |
|||
:fa-asterisk: UITabControl:新增关闭按钮,重绘左右移动按钮 |
|||
:fa-asterisk: UIForm:更新标题移动、双击最大化/正常、到顶最大化、最大化后拖拽正常 |
|||
:fa-asterisk: UINavMenu:增加字体图标显示 |
|||
:fa-asterisk: 字体图标字体调整从资源文件中加载字体,不用另存为文件 |
|||
:fa-asterisk: UIListBox 增加跟随鼠标滑过高亮 |
|||
:fa-asterisk: UIDatePicker:重写日期选择界面 |
|||
:fa-asterisk: UIButton:增加ShowFocusLine,可获得焦点并显示 |
|||
+ UIDoughnutChart: 环状图 |
|||
+ UILoginForm: 登录窗体 |
|||
+ UIScrollingText: 滚动文字 |
|||
+ UIBarChart: 柱状图 |
|||
+ UIPieChart: 饼状图 |
|||
+ UIRichTextBox: 富文本框 |
|||
+ UIBattery: 电池电量显示 |
|||
+ UIDatetimePicker: 日期时间选择框 |
|||
+ UIColorPicker: 颜色选择框 |
|||
+ UITimePicker: 时间选择框 |
|||
+ UIMessageTipHelper: 增加MessageTip扩展方法 |
|||
* UIComboBox: 增加数据绑定 |
|||
* 页面框架支持通过PageIndex和PageGuid关联 |
|||
* UITextBox: 增加Multiline属性,增加滚动条 |
|||
* UITabControl: 新增关闭按钮,重绘左右移动按钮 |
|||
* UIForm: 更新标题移动、双击最大化/正常、到顶最大化、最大化后拖拽正常 |
|||
* UINavMenu: 增加字体图标显示 |
|||
* 字体图标字体调整从资源文件中加载字体,不用另存为文件 |
|||
* UIListBox 增加跟随鼠标滑过高亮 |
|||
* UIDatePicker: 重写日期选择界面 |
|||
* UIButton: 增加ShowFocusLine,可获得焦点并显示 |
|||
|
|||
#### 2020.05.05 V2.2.5 |
|||
:fa-plus: 增加页面框架 |
|||
:fa-plus: 增加下拉框窗体,进度提升窗体 |
|||
:fa-plus: UITreeView |
|||
+ 增加页面框架 |
|||
+ 增加下拉框窗体,进度提升窗体 |
|||
+ UITreeView |
|||
|
|||
#### 2020.04.25 V2.2.4 |
|||
:fa-asterisk: 更新主题风格类,各控件主题颜色调用不交叉,便于新增主题 |
|||
:fa-plus: 更新Sunny.Demo程序 |
|||
:fa-plus: 增加UIDataGridView,基于DataGridView增强、美化 |
|||
:fa-minus: UIGrid效率待改,暂时隐藏 |
|||
* 更新主题风格类,各控件主题颜色调用不交叉,便于新增主题 |
|||
+ 更新Sunny.Demo程序 |
|||
+ 增加UIDataGridView,基于DataGridView增强、美化 |
|||
- UIGrid效率待改,暂时隐藏 |
|||
|
|||
#### 2020.04.19 V2.2.3 |
|||
:fa-plus: UICheckBoxGroup,UIRadioButtonGroup |
|||
+ UICheckBoxGroup,UIRadioButtonGroup |
|||
|
|||
#### 2020.04.11 V2.2.2 |
|||
:fa-plus: 新增UIGrid |
|||
:fa-minus: 继承DataGridView更改主题风格的UIGridView |
|||
+ 新增UIGrid |
|||
- 继承DataGridView更改主题风格的UIGridView |
|||
|
|||
#### 2020.02.15 V2.2.1 |
|||
:fa-asterisk: Bug修复 |
|||
* Bug修复 |
|||
|
|||
#### 2020.01.01 V2.2.0 |
|||
:fa-asterisk: 增加文件说明,为开源做准备 |
|||
:fa-plus: 增加Office主题风格 |
|||
* 增加文件说明,为开源做准备 |
|||
+ 增加Office主题风格 |
|||
|
|||
#### 2019.10.01 V2.1.0 |
|||
:fa-plus: 增加Element主题风格 |
|||
+ 增加Element主题风格 |
|||
|
|||
#### 2019.03.12 V2.0.0 |
|||
:fa-plus: 增加自定义控件 |
|||
+ 增加自定义控件 |
|||
|
|||
#### 2012.03.31 V1.0.0 |
|||
:fa-plus: 增加工具类、扩展类 |
|||
+ 增加工具类、扩展类 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue