diff --git a/Bin/net40/SunnyUI.Demo.exe b/Bin/net40/SunnyUI.Demo.exe index d45850b0..553d6a6d 100644 Binary files a/Bin/net40/SunnyUI.Demo.exe and b/Bin/net40/SunnyUI.Demo.exe differ diff --git a/Bin/net40/SunnyUI.dll b/Bin/net40/SunnyUI.dll index c981d6f9..16cc0a07 100644 Binary files a/Bin/net40/SunnyUI.dll and b/Bin/net40/SunnyUI.dll differ diff --git a/Bin/net5.0-windows/SunnyUI.dll b/Bin/net5.0-windows/SunnyUI.dll index d265db5e..284f540c 100644 Binary files a/Bin/net5.0-windows/SunnyUI.dll 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 index dc5160ec..5f477f60 100644 Binary files a/Bin/net5.0-windows/ref/SunnyUI.dll and b/Bin/net5.0-windows/ref/SunnyUI.dll differ diff --git a/Bin/netcoreapp3.1/SunnyUI.dll b/Bin/netcoreapp3.1/SunnyUI.dll index ff60d2c1..5ea0f08a 100644 Binary files a/Bin/netcoreapp3.1/SunnyUI.dll and b/Bin/netcoreapp3.1/SunnyUI.dll differ diff --git a/SunnyUI.Demo/Controls/FProcess.designer.cs b/SunnyUI.Demo/Controls/FProcess.designer.cs index 4cf00f79..3e2d0605 100644 --- a/SunnyUI.Demo/Controls/FProcess.designer.cs +++ b/SunnyUI.Demo/Controls/FProcess.designer.cs @@ -45,11 +45,25 @@ namespace Sunny.UI.Demo this.uiProcessBar1 = new Sunny.UI.UIProcessBar(); this.uiLine2 = new Sunny.UI.UILine(); this.timer1 = new System.Windows.Forms.Timer(this.components); + this.uiTrackBar2 = new Sunny.UI.UITrackBar(); + this.uiTrackBar3 = new Sunny.UI.UITrackBar(); + this.uiTrackBar4 = new Sunny.UI.UITrackBar(); + this.uiTrackBar5 = new Sunny.UI.UITrackBar(); + this.uiTrackBar6 = new Sunny.UI.UITrackBar(); + this.uiTrackBar7 = new Sunny.UI.UITrackBar(); + this.uiTrackBar8 = new Sunny.UI.UITrackBar(); this.PagePanel.SuspendLayout(); this.SuspendLayout(); // // PagePanel // + this.PagePanel.Controls.Add(this.uiTrackBar8); + this.PagePanel.Controls.Add(this.uiTrackBar7); + this.PagePanel.Controls.Add(this.uiTrackBar6); + this.PagePanel.Controls.Add(this.uiTrackBar5); + this.PagePanel.Controls.Add(this.uiTrackBar4); + this.PagePanel.Controls.Add(this.uiTrackBar3); + this.PagePanel.Controls.Add(this.uiTrackBar2); this.PagePanel.Controls.Add(this.uiLine2); this.PagePanel.Controls.Add(this.uiBreadcrumb1); this.PagePanel.Controls.Add(this.uiRoundProcess2); @@ -77,10 +91,10 @@ namespace Sunny.UI.Demo "步骤四", "步骤五"}); this.uiBreadcrumb1.ItemWidth = 100; - this.uiBreadcrumb1.Location = new System.Drawing.Point(30, 372); + this.uiBreadcrumb1.Location = new System.Drawing.Point(29, 290); this.uiBreadcrumb1.MinimumSize = new System.Drawing.Size(1, 1); this.uiBreadcrumb1.Name = "uiBreadcrumb1"; - this.uiBreadcrumb1.Size = new System.Drawing.Size(588, 29); + this.uiBreadcrumb1.Size = new System.Drawing.Size(440, 25); this.uiBreadcrumb1.TabIndex = 73; this.uiBreadcrumb1.Text = "uiBreadcrumb1"; // @@ -90,7 +104,7 @@ namespace Sunny.UI.Demo this.uiRoundProcess2.Font = new System.Drawing.Font("微软雅黑", 12F); this.uiRoundProcess2.ForeColor = System.Drawing.Color.White; this.uiRoundProcess2.Inner = 0; - this.uiRoundProcess2.Location = new System.Drawing.Point(155, 138); + this.uiRoundProcess2.Location = new System.Drawing.Point(155, 132); this.uiRoundProcess2.MinimumSize = new System.Drawing.Size(1, 1); this.uiRoundProcess2.Name = "uiRoundProcess2"; this.uiRoundProcess2.ShowProcess = true; @@ -115,7 +129,7 @@ namespace Sunny.UI.Demo // this.uiRoundProcess1.BackColor = System.Drawing.Color.Transparent; this.uiRoundProcess1.Font = new System.Drawing.Font("微软雅黑", 12F); - this.uiRoundProcess1.Location = new System.Drawing.Point(28, 138); + this.uiRoundProcess1.Location = new System.Drawing.Point(28, 132); this.uiRoundProcess1.MinimumSize = new System.Drawing.Size(1, 1); this.uiRoundProcess1.Name = "uiRoundProcess1"; this.uiRoundProcess1.ShowProcess = true; @@ -158,25 +172,25 @@ namespace Sunny.UI.Demo // uiLine5 // this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F); - this.uiLine5.Location = new System.Drawing.Point(30, 264); + this.uiLine5.Location = new System.Drawing.Point(28, 334); this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16); this.uiLine5.Name = "uiLine5"; - this.uiLine5.Size = new System.Drawing.Size(319, 20); + this.uiLine5.Size = new System.Drawing.Size(672, 20); this.uiLine5.TabIndex = 66; this.uiLine5.Text = "UITrackBar"; this.uiLine5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // uiTrackBar1 // + this.uiTrackBar1.BarSize = 20; this.uiTrackBar1.DisableColor = System.Drawing.Color.Silver; this.uiTrackBar1.Font = new System.Drawing.Font("微软雅黑", 12F); - this.uiTrackBar1.Location = new System.Drawing.Point(30, 290); + this.uiTrackBar1.Location = new System.Drawing.Point(28, 360); 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 = 65; this.uiTrackBar1.Text = "uiTrackBar1"; - this.uiTrackBar1.Value = 50; // // uiLine4 // @@ -192,7 +206,7 @@ namespace Sunny.UI.Demo // uiProgressIndicator1 // this.uiProgressIndicator1.Font = new System.Drawing.Font("微软雅黑", 12F); - this.uiProgressIndicator1.Location = new System.Drawing.Point(381, 138); + this.uiProgressIndicator1.Location = new System.Drawing.Point(381, 132); this.uiProgressIndicator1.MinimumSize = new System.Drawing.Size(1, 1); this.uiProgressIndicator1.Name = "uiProgressIndicator1"; this.uiProgressIndicator1.Size = new System.Drawing.Size(120, 120); @@ -224,7 +238,7 @@ namespace Sunny.UI.Demo // uiLine2 // this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F); - this.uiLine2.Location = new System.Drawing.Point(30, 334); + this.uiLine2.Location = new System.Drawing.Point(29, 252); this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); this.uiLine2.Name = "uiLine2"; this.uiLine2.Size = new System.Drawing.Size(319, 20); @@ -236,6 +250,100 @@ namespace Sunny.UI.Demo // this.timer1.Tick += new System.EventHandler(this.timer1_Tick); // + // uiTrackBar2 + // + this.uiTrackBar2.BarSize = 20; + this.uiTrackBar2.Direction = Sunny.UI.UITrackBar.BarDirection.Vertical; + this.uiTrackBar2.DisableColor = System.Drawing.Color.Silver; + this.uiTrackBar2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTrackBar2.Location = new System.Drawing.Point(264, 360); + this.uiTrackBar2.MinimumSize = new System.Drawing.Size(1, 1); + this.uiTrackBar2.Name = "uiTrackBar2"; + this.uiTrackBar2.Size = new System.Drawing.Size(35, 99); + this.uiTrackBar2.TabIndex = 75; + this.uiTrackBar2.Text = "uiTrackBar2"; + this.uiTrackBar2.Value = 50; + // + // uiTrackBar3 + // + this.uiTrackBar3.BarSize = 20; + this.uiTrackBar3.DisableColor = System.Drawing.Color.Silver; + this.uiTrackBar3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTrackBar3.Location = new System.Drawing.Point(28, 395); + this.uiTrackBar3.MinimumSize = new System.Drawing.Size(1, 1); + this.uiTrackBar3.Name = "uiTrackBar3"; + this.uiTrackBar3.Size = new System.Drawing.Size(158, 29); + this.uiTrackBar3.TabIndex = 76; + this.uiTrackBar3.Text = "uiTrackBar3"; + // + // uiTrackBar4 + // + this.uiTrackBar4.BarSize = 20; + this.uiTrackBar4.DisableColor = System.Drawing.Color.Silver; + this.uiTrackBar4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTrackBar4.Location = new System.Drawing.Point(28, 430); + this.uiTrackBar4.MinimumSize = new System.Drawing.Size(1, 1); + this.uiTrackBar4.Name = "uiTrackBar4"; + this.uiTrackBar4.Size = new System.Drawing.Size(158, 29); + this.uiTrackBar4.TabIndex = 77; + this.uiTrackBar4.Text = "uiTrackBar4"; + // + // uiTrackBar5 + // + this.uiTrackBar5.BarSize = 20; + this.uiTrackBar5.Direction = Sunny.UI.UITrackBar.BarDirection.Vertical; + this.uiTrackBar5.DisableColor = System.Drawing.Color.Silver; + this.uiTrackBar5.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTrackBar5.Location = new System.Drawing.Point(305, 360); + this.uiTrackBar5.MinimumSize = new System.Drawing.Size(1, 1); + this.uiTrackBar5.Name = "uiTrackBar5"; + this.uiTrackBar5.Size = new System.Drawing.Size(35, 99); + this.uiTrackBar5.TabIndex = 78; + this.uiTrackBar5.Text = "uiTrackBar5"; + this.uiTrackBar5.Value = 50; + // + // uiTrackBar6 + // + this.uiTrackBar6.BarSize = 20; + this.uiTrackBar6.Direction = Sunny.UI.UITrackBar.BarDirection.Vertical; + this.uiTrackBar6.DisableColor = System.Drawing.Color.Silver; + this.uiTrackBar6.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTrackBar6.Location = new System.Drawing.Point(346, 360); + this.uiTrackBar6.MinimumSize = new System.Drawing.Size(1, 1); + this.uiTrackBar6.Name = "uiTrackBar6"; + this.uiTrackBar6.Size = new System.Drawing.Size(35, 99); + this.uiTrackBar6.TabIndex = 79; + this.uiTrackBar6.Text = "uiTrackBar6"; + this.uiTrackBar6.Value = 50; + // + // uiTrackBar7 + // + this.uiTrackBar7.BarSize = 20; + this.uiTrackBar7.Direction = Sunny.UI.UITrackBar.BarDirection.Vertical; + this.uiTrackBar7.DisableColor = System.Drawing.Color.Silver; + this.uiTrackBar7.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTrackBar7.Location = new System.Drawing.Point(387, 360); + this.uiTrackBar7.MinimumSize = new System.Drawing.Size(1, 1); + this.uiTrackBar7.Name = "uiTrackBar7"; + this.uiTrackBar7.Size = new System.Drawing.Size(35, 99); + this.uiTrackBar7.TabIndex = 80; + this.uiTrackBar7.Text = "uiTrackBar7"; + this.uiTrackBar7.Value = 50; + // + // uiTrackBar8 + // + this.uiTrackBar8.BarSize = 20; + this.uiTrackBar8.Direction = Sunny.UI.UITrackBar.BarDirection.Vertical; + this.uiTrackBar8.DisableColor = System.Drawing.Color.Silver; + this.uiTrackBar8.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTrackBar8.Location = new System.Drawing.Point(428, 360); + this.uiTrackBar8.MinimumSize = new System.Drawing.Size(1, 1); + this.uiTrackBar8.Name = "uiTrackBar8"; + this.uiTrackBar8.Size = new System.Drawing.Size(35, 99); + this.uiTrackBar8.TabIndex = 81; + this.uiTrackBar8.Text = "uiTrackBar8"; + this.uiTrackBar8.Value = 50; + // // FProcess // this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); @@ -266,5 +374,12 @@ namespace Sunny.UI.Demo private UIProcessBar uiProcessBar1; private UILine uiLine2; private System.Windows.Forms.Timer timer1; + private UITrackBar uiTrackBar2; + private UITrackBar uiTrackBar8; + private UITrackBar uiTrackBar7; + private UITrackBar uiTrackBar6; + private UITrackBar uiTrackBar5; + private UITrackBar uiTrackBar4; + private UITrackBar uiTrackBar3; } } \ No newline at end of file diff --git a/SunnyUI/Controls/UITrackBar.cs b/SunnyUI/Controls/UITrackBar.cs index 15f45853..8d0d53a7 100644 --- a/SunnyUI/Controls/UITrackBar.cs +++ b/SunnyUI/Controls/UITrackBar.cs @@ -47,6 +47,34 @@ namespace Sunny.UI rectColor = UIColor.Blue; } + public enum BarDirection + { + /// + /// 水平的 + /// + Horizontal, + + /// + /// 竖直的 + /// + Vertical + } + + private BarDirection direction = BarDirection.Horizontal; + + [DefaultValue(BarDirection.Horizontal)] + [Description("线条方向"), Category("SunnyUI")] + public BarDirection Direction + { + get => direction; + set + { + direction = value; + Invalidate(); + } + } + + private int _maximum = 100; private int _minimum; private int trackBarValue; @@ -118,21 +146,65 @@ namespace Sunny.UI protected override void OnPaintFill(Graphics g, GraphicsPath path) { g.Clear(fillColor); - g.FillRoundRectangle(rectDisableColor, new Rectangle(5, Height / 2 - 3, Width - 1 - 10, 6), 6); - int len = (int)((Value - Minimum) * 1.0 * (Width - 1 - 10) / (Maximum - Minimum)); - if (len > 0) + if (Direction == BarDirection.Horizontal) { - g.FillRoundRectangle(foreColor, new Rectangle(5, Height / 2 - 3, len, 6), 6); + g.FillRoundRectangle(rectDisableColor, + new Rectangle(5, Height / 2 - 3, Width - 1 - 10, 6), 6); + + int len = (int)((Value - Minimum) * 1.0 * (Width - 1 - 10) / (Maximum - Minimum)); + if (len > 0) + { + g.FillRoundRectangle(foreColor, new Rectangle(5, Height / 2 - 3, len, 6), 6); + } + + g.FillRoundRectangle(fillColor.IsValid() ? fillColor : Color.White, + new Rectangle(len, (Height - BarSize) / 2, 10, BarSize), 5); + + using (Pen pen = new Pen(rectColor, 2)) + { + g.SetHighQuality(); + g.DrawRoundRectangle(pen, + new Rectangle(len + 1, (Height - BarSize) / 2 + 1, 8, BarSize - 2), 5); + g.SetDefaultQuality(); + } } - g.FillRoundRectangle(fillColor.IsValid() ? fillColor : Color.White, new Rectangle(len, Height / 2 - 10, 10, 20), 5); - - using (Pen pen = new Pen(rectColor, 2)) + if (Direction == BarDirection.Vertical) { - g.SetHighQuality(); - g.DrawRoundRectangle(pen, new Rectangle(len + 1, Height / 2 - 9, 8, 18), 5); - g.SetDefaultQuality(); + g.FillRoundRectangle(rectDisableColor, + new Rectangle(Width / 2 - 3, 5, 6, Height - 1 - 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, Height - len - 5, 6, len), 6); + } + + g.FillRoundRectangle(fillColor.IsValid() ? fillColor : Color.White, + new Rectangle((Width - BarSize) / 2, Height - len - 10 - 1, BarSize, 10), 5); + + using (Pen pen = new Pen(rectColor, 2)) + { + g.SetHighQuality(); + g.DrawRoundRectangle(pen, + new Rectangle((Width - BarSize) / 2 + 1, Height - len - 10, BarSize - 2, 8), 5); + g.SetDefaultQuality(); + } + } + } + + private int trackBarSize = 20; + + [DefaultValue(20)] + [Description("按钮大小"), Category("SunnyUI")] + public int BarSize + { + get => trackBarSize; + set + { + trackBarSize = Math.Max(12, value); + Invalidate(); } } @@ -141,9 +213,19 @@ namespace Sunny.UI base.OnMouseClick(e); if (!ReadOnly) { - int len = e.X - 5; - int value = (len * 1.0 * (Maximum - Minimum) / (Width - 1 - 10)).RoundEx() + Minimum; - Value = Math.Min(Math.Max(Minimum, value), Maximum); + if (Direction == BarDirection.Horizontal) + { + int len = e.X - 5; + int value = (len * 1.0 * (Maximum - Minimum) / (Width - 10)).RoundEx() + Minimum; + Value = Math.Min(Math.Max(Minimum, value), Maximum); + } + + if (Direction == BarDirection.Vertical) + { + int len = Height - 10 - e.Y; + int value = (len * 1.0 * (Maximum - Minimum) / (Height - 10)).RoundEx() + Minimum; + Value = Math.Min(Math.Max(Minimum, value), Maximum); + } } } @@ -152,9 +234,19 @@ namespace Sunny.UI base.OnMouseMove(e); if (IsPress && !ReadOnly) { - int len = e.X - 5; - int value = (len * 1.0 * (Maximum - Minimum) / (Width - 1 - 10)).RoundEx() + Minimum; - Value = Math.Min(Math.Max(Minimum, value), Maximum); + if (Direction == BarDirection.Horizontal) + { + int len = e.X - 5; + int value = (len * 1.0 * (Maximum - Minimum) / (Width - 10)).RoundEx() + Minimum; + Value = Math.Min(Math.Max(Minimum, value), Maximum); + } + + if (Direction == BarDirection.Vertical) + { + int len = Height - 10 - e.Y; + int value = (len * 1.0 * (Maximum - Minimum) / (Height - 10)).RoundEx() + Minimum; + Value = Math.Min(Math.Max(Minimum, value), Maximum); + } } }