diff --git a/Bin/SunnyUI.dll b/Bin/SunnyUI.dll index cc886930..8cadc7f1 100644 Binary files a/Bin/SunnyUI.dll and b/Bin/SunnyUI.dll differ diff --git a/Bin/SunnyUI.pdb b/Bin/SunnyUI.pdb index d43fa333..a4678458 100644 Binary files a/Bin/SunnyUI.pdb and b/Bin/SunnyUI.pdb differ diff --git a/SunnyUI.Demo/Bin/SunnyUI.Demo.exe b/SunnyUI.Demo/Bin/SunnyUI.Demo.exe index b314b7cc..307be2ca 100644 Binary files a/SunnyUI.Demo/Bin/SunnyUI.Demo.exe and b/SunnyUI.Demo/Bin/SunnyUI.Demo.exe differ diff --git a/SunnyUI.Demo/Bin/SunnyUI.dll b/SunnyUI.Demo/Bin/SunnyUI.dll index cc886930..8cadc7f1 100644 Binary files a/SunnyUI.Demo/Bin/SunnyUI.dll and b/SunnyUI.Demo/Bin/SunnyUI.dll differ diff --git a/SunnyUI.Demo/Charts/FBarChartEx.Designer.cs b/SunnyUI.Demo/Charts/FBarChartEx.Designer.cs index ea581a83..d3b45fc5 100644 --- a/SunnyUI.Demo/Charts/FBarChartEx.Designer.cs +++ b/SunnyUI.Demo/Charts/FBarChartEx.Designer.cs @@ -114,7 +114,7 @@ this.uiLine1.Name = "uiLine1"; this.uiLine1.Size = new System.Drawing.Size(670, 20); this.uiLine1.TabIndex = 30; - this.uiLine1.Text = "UIBarChart"; + this.uiLine1.Text = "UIBarChartEx"; this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // BarChart diff --git a/SunnyUI.Demo/Charts/FBarChartEx.cs b/SunnyUI.Demo/Charts/FBarChartEx.cs index 5dbf2203..208f1c73 100644 --- a/SunnyUI.Demo/Charts/FBarChartEx.cs +++ b/SunnyUI.Demo/Charts/FBarChartEx.cs @@ -27,6 +27,9 @@ namespace Sunny.UI.Demo private void uiSymbolButton1_Click(object sender, System.EventArgs e) { UIBarOption option = new UIBarOption(); + + option.Grid.Bottom = 60; + option.Title = new UITitle(); option.Title.Text = "SunnyUI"; option.Title.SubText = "BarChartEx"; @@ -42,19 +45,25 @@ namespace Sunny.UI.Demo var series = new UIBarSeries(); series.Name = "Bar1"; + series.ShowBarName = true; + series.ShowValue = true; series.AddData("通道1", 11); series.AddData("通道2", 15); option.Series.Add(series); series = new UIBarSeries(); series.Name = "Bar2"; - series.AddData("通道1", -22); - series.AddData("通道2", -28); - series.AddData("通道3", -25); + series.ShowBarName = true; + series.ShowValue = true; + series.AddData("通道1", 22); + series.AddData("通道2", 28); + series.AddData("通道3", 25); option.Series.Add(series); series = new UIBarSeries(); series.Name = "Bar3"; + series.ShowBarName = true; + series.ShowValue = true; series.AddData("通道1", 7); option.Series.Add(series); @@ -70,6 +79,8 @@ namespace Sunny.UI.Demo option.XAxis.Name = "日期"; option.YAxis.Name = "数值"; + option.XAxis.AxisTick.Distance = 14; + option.FixedSeriesCount = 3; option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Red, Name = "上限", Value = 12 }); diff --git a/SunnyUI.Demo/Charts/FBarChartEx.resx b/SunnyUI.Demo/Charts/FBarChartEx.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.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.Demo/SunnyUI.Demo.csproj b/SunnyUI.Demo/SunnyUI.Demo.csproj index 65361429..8f7421c9 100644 --- a/SunnyUI.Demo/SunnyUI.Demo.csproj +++ b/SunnyUI.Demo/SunnyUI.Demo.csproj @@ -301,6 +301,9 @@ + + FBarChartEx.cs + FAvatar.cs diff --git a/SunnyUI/Charts/UIBarChartEx.cs b/SunnyUI/Charts/UIBarChartEx.cs index 229c2fd7..38334dbe 100644 --- a/SunnyUI/Charts/UIBarChartEx.cs +++ b/SunnyUI/Charts/UIBarChartEx.cs @@ -158,7 +158,7 @@ namespace Sunny.UI for (int j = 0; j < series.Data.Count; j++) { str += '\n'; - if (series.BarName.Count >= 0 && j < series.BarName.Count) + if (series.BarName.Count > 0 && j < series.BarName.Count) str += series.BarName[j] + " : "; str += series.Data[j].ToString(BarOption.ToolTip.ValueFormat); @@ -176,9 +176,39 @@ namespace Sunny.UI for (int i = 0; i < Bars.Count; i++) { var bars = Bars[i]; - foreach (var info in bars) + for (int j = 0; j < bars.Count; j++) { - g.FillRectangle(info.Color, info.Rect); + g.FillRectangle(bars[j].Color, bars[j].Rect); + var s = BarOption.Series[i]; + if (s.ShowBarName) + { + if (s.BarName.Count > 0 && j < s.BarName.Count) + { + SizeF sf = g.MeasureString(s.BarName[j], SubFont); + if (s.Data[j] >= 0) + g.DrawString(s.BarName[j], SubFont, ChartStyle.ForeColor, + bars[j].Rect.Left + bars[j].Rect.Width / 2 - sf.Width / 2, + bars[j].Rect.Bottom + 1); + else + g.DrawString(s.BarName[j], SubFont, ChartStyle.ForeColor, + bars[j].Rect.Left + bars[j].Rect.Width / 2 - sf.Width / 2, + bars[j].Rect.Top - sf.Height); + } + } + + if (s.ShowValue) + { + string value = s.Data[j].ToString("F" + BarOption.XAxis.AxisLabel.DecimalCount); + SizeF sf = g.MeasureString(value, SubFont); + if (s.Data[j] < 0) + g.DrawString(value, SubFont, bars[j].Color, + bars[j].Rect.Left + bars[j].Rect.Width / 2 - sf.Width / 2, + bars[j].Rect.Bottom + 1); + else + g.DrawString(value, SubFont, bars[j].Color, + bars[j].Rect.Left + bars[j].Rect.Width / 2 - sf.Width / 2, + bars[j].Rect.Top - sf.Height); + } } } @@ -238,12 +268,12 @@ namespace Sunny.UI foreach (var data in BarOption.Series) { SizeF sf = g.MeasureString(data.Name, SubFont); - g.DrawString(data.Name, SubFont, ChartStyle.ForeColor, start - sf.Width / 2.0f, DrawOrigin.Y + BarOption.XAxis.AxisTick.Length); + g.DrawString(data.Name, SubFont, ChartStyle.ForeColor, start - sf.Width / 2.0f, DrawOrigin.Y + BarOption.XAxis.AxisTick.Length + BarOption.XAxis.AxisTick.Distance); start += DrawBarWidth; } SizeF sfName = g.MeasureString(BarOption.XAxis.Name, SubFont); - g.DrawString(BarOption.XAxis.Name, SubFont, ChartStyle.ForeColor, DrawOrigin.X + (DrawSize.Width - sfName.Width) / 2.0f, DrawOrigin.Y + BarOption.XAxis.AxisTick.Length + sfName.Height); + g.DrawString(BarOption.XAxis.Name, SubFont, ChartStyle.ForeColor, DrawOrigin.X + (DrawSize.Width - sfName.Width) / 2.0f, DrawOrigin.Y + BarOption.XAxis.AxisTick.Length + BarOption.XAxis.AxisTick.Distance + sfName.Height); } if (BarOption.YAxis.AxisTick.Show) diff --git a/SunnyUI/Charts/UIBarChartOption.cs b/SunnyUI/Charts/UIBarChartOption.cs index 4d07a9f7..0441db72 100644 --- a/SunnyUI/Charts/UIBarChartOption.cs +++ b/SunnyUI/Charts/UIBarChartOption.cs @@ -179,6 +179,8 @@ namespace Sunny.UI /// 如果设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推。 /// public int Interval { get; set; } = 0; + + public int Distance { get; set; } = 0; } public class UIValueAxis : UIAxis @@ -203,6 +205,10 @@ namespace Sunny.UI public readonly List Colors = new List(); + public bool ShowBarName { get; set; } + + public bool ShowValue { get; set; } + public void AddData(double value) { Data.Add(value);