diff --git a/SunnyUI/Controls/UITrackBar.cs b/SunnyUI/Controls/UITrackBar.cs index afa18524..133c05f6 100644 --- a/SunnyUI/Controls/UITrackBar.cs +++ b/SunnyUI/Controls/UITrackBar.cs @@ -19,6 +19,7 @@ * 2020-01-01: V2.2.0 增加文件说明 * 2021-04-11: V3.0.2 增加垂直显示方式 * 2022-03-19: V3.1.1 重构主题配色 + * 2023-11-28: V3.6.1 增加一种从上到下的进度显示方式 ******************************************************************************/ using System; @@ -59,9 +60,14 @@ namespace Sunny.UI Horizontal, /// - /// 竖直的 + /// 竖直上升 /// - Vertical + Vertical, + + /// + /// 竖直下降 + /// + VerticalDown } private BarDirection direction = BarDirection.Horizontal; @@ -194,6 +200,24 @@ namespace Sunny.UI g.DrawRoundRectangle(pen, new Rectangle((Width - BarSize) / 2 + 1, Height - len - 10, BarSize - 2, 8), 5); g.SetDefaultQuality(); } + + if (Direction == BarDirection.VerticalDown) + { + g.FillRoundRectangle(rectDisableColor, new Rectangle(Width / 2 - 3, 5, 6, Height - 10), 6); + + int len = (int)((Value - Minimum) * 1.0 * (Height - 1 - 10) / (Maximum - Minimum)); + if (len > 0) + { + g.FillRoundRectangle(foreColor, new Rectangle(Width / 2 - 3, 5, 6, len), 6); + } + + g.FillRoundRectangle(fillColor.IsValid() ? fillColor : Color.White, new Rectangle((Width - BarSize) / 2, len, BarSize, 10), 5); + + using Pen pen = new Pen(rectColor, 2); + g.SetHighQuality(); + g.DrawRoundRectangle(pen, new Rectangle((Width - BarSize) / 2 + 1, len + 1, BarSize - 2, 8), 5); + g.SetDefaultQuality(); + } } private int trackBarSize = 20; @@ -228,6 +252,13 @@ namespace Sunny.UI int value = (len * 1.0 * (Maximum - Minimum) / (Height - 10)).RoundEx() + Minimum; Value = Math.Min(Math.Max(Minimum, value), Maximum); } + + if (Direction == BarDirection.VerticalDown) + { + int len = e.Y - 5; + int value = (len * 1.0 * (Maximum - Minimum) / (Height - 10)).RoundEx() + Minimum; + Value = Math.Min(Math.Max(Minimum, value), Maximum); + } } } @@ -253,6 +284,13 @@ namespace Sunny.UI int value = (len * 1.0 * (Maximum - Minimum) / (Height - 10)).RoundEx() + Minimum; Value = Math.Min(Math.Max(Minimum, value), Maximum); } + + if (Direction == BarDirection.VerticalDown) + { + int len = e.Y - 5; + int value = (len * 1.0 * (Maximum - Minimum) / (Height - 10)).RoundEx() + Minimum; + Value = Math.Min(Math.Max(Minimum, value), Maximum); + } } } diff --git a/SunnyUI/UIRuler.cs b/SunnyUI/UIRuler.cs new file mode 100644 index 00000000..177b4a06 --- /dev/null +++ b/SunnyUI/UIRuler.cs @@ -0,0 +1,7 @@ +namespace Sunny.UI +{ + public class UIRuler : UIControl + { + + } +}