* UILineChart:修改一处日期类型可能引发的错误

This commit is contained in:
Sunny 2021-03-04 23:56:06 +08:00
parent c9a20a72d2
commit bf7c0759c6
7 changed files with 217 additions and 92 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -163,11 +163,6 @@ namespace Sunny.UI
DrawOther(g); DrawOther(g);
} }
protected virtual void DrawOther(Graphics g)
{
}
private void DrawAxis(Graphics g) private void DrawAxis(Graphics g)
{ {
g.DrawRectangle(ChartStyle.ForeColor, Option.Grid.Left, Option.Grid.Top, DrawSize.Width, DrawSize.Height); g.DrawRectangle(ChartStyle.ForeColor, Option.Grid.Left, Option.Grid.Top, DrawSize.Width, DrawSize.Height);
@ -483,6 +478,8 @@ namespace Sunny.UI
base.OnMouseMove(e); base.OnMouseMove(e);
if (!NeedDraw) return; if (!NeedDraw) return;
if (!IsMouseDown)
{
selectPointsTemp.Clear(); selectPointsTemp.Clear();
foreach (var series in Option.Series.Values) foreach (var series in Option.Series.Values)
{ {
@ -545,7 +542,8 @@ namespace Sunny.UI
else else
sb.Append(point.X.ToString("F" + Option.XAxis.AxisLabel.DecimalCount)); sb.Append(point.X.ToString("F" + Option.XAxis.AxisLabel.DecimalCount));
sb.Append('\n'); sb.Append('\n');
sb.Append(Option.YAxis.Name + ": " + point.Y.ToString("F" + Option.YAxis.AxisLabel.DecimalCount)); sb.Append(
Option.YAxis.Name + ": " + point.Y.ToString("F" + Option.YAxis.AxisLabel.DecimalCount));
idx++; idx++;
} }
@ -581,9 +579,123 @@ namespace Sunny.UI
PointValue?.Invoke(this, selectPoints.ToArray()); PointValue?.Invoke(this, selectPoints.ToArray());
} }
} }
else
{
if (e.Button == MouseButtons.Left && e.X > Option.Grid.Left && e.X < Width - Option.Grid.Right &&
e.Y > Option.Grid.Top && e.Y < Height - Option.Grid.Bottom)
{
StopPoint = e.Location;
Invalidate();
}
}
}
public delegate void OnPointValue(object sender, UILineSelectPoint[] points); public delegate void OnPointValue(object sender, UILineSelectPoint[] points);
public event OnPointValue PointValue; public event OnPointValue PointValue;
private bool IsMouseDown;
private Point StartPoint, StopPoint;
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (IsZoom) return;
if (e.Button == MouseButtons.Left && e.X > Option.Grid.Left && e.X < Width - Option.Grid.Right &&
e.Y > Option.Grid.Top && e.Y < Height - Option.Grid.Bottom)
{
//IsMouseDown = true;
StartPoint = e.Location;
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
if (IsMouseDown)
{
IsMouseDown = false;
Invalidate();
Zoom();
}
}
private bool IsZoom;
private bool XMinAuto, XMaxAuto, YMinAuto, YMaxAuto;
private double XMin, XMax, YMin, YMax;
private void Zoom()
{
IsZoom = true;
XMin = Option.XAxis.Min;
XMax = Option.XAxis.Max;
YMin = Option.YAxis.Min;
YMax = Option.YAxis.Max;
XMinAuto = Option.XAxis.MinAuto;
XMaxAuto = Option.XAxis.MaxAuto;
YMinAuto = Option.YAxis.MinAuto;
YMaxAuto = Option.YAxis.MaxAuto;
double xmin = XScale.CalcXPos(Math.Min(StartPoint.X, StopPoint.X), DrawOrigin.X, DrawSize.Width);
double xmax = XScale.CalcXPos(Math.Max(StartPoint.X, StopPoint.X), DrawOrigin.X, DrawSize.Width);
double ymax = YScale.CalcYPos(Math.Min(StartPoint.Y, StopPoint.Y), DrawOrigin.Y, DrawSize.Height);
double ymin = YScale.CalcYPos(Math.Max(StartPoint.Y, StopPoint.Y), DrawOrigin.Y, DrawSize.Height);
Option.XAxis.Min = xmin;
Option.XAxis.Max = xmax;
Option.YAxis.Min = ymin;
Option.YAxis.Max = ymax;
Option.XAxis.MinAuto = false;
Option.XAxis.MaxAuto = false;
Option.YAxis.MinAuto = false;
Option.YAxis.MaxAuto = false;
CalcData();
Invalidate();
}
private void ZoomNormal()
{
IsZoom = false;
Option.XAxis.Min = XMin;
Option.XAxis.Max = XMax;
Option.YAxis.Min = YMin;
Option.YAxis.Max = YMax;
Option.XAxis.MinAuto = XMinAuto;
Option.XAxis.MaxAuto = XMaxAuto;
Option.YAxis.MinAuto = YMinAuto;
Option.YAxis.MaxAuto = YMaxAuto;
CalcData();
Invalidate();
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
IsMouseDown = false;
}
protected virtual void DrawOther(Graphics g)
{
if (IsMouseDown)
{
Color color = Color.FromArgb(50, UIColor.Blue);
g.FillRectangle(color,
Math.Min(StartPoint.X, StopPoint.X),
Math.Min(StartPoint.Y, StopPoint.Y),
Math.Abs(StopPoint.X - StartPoint.X),
Math.Abs(StopPoint.Y - StartPoint.Y));
}
}
protected override void OnMouseClick(MouseEventArgs e)
{
base.OnMouseClick(e);
if (IsZoom)
{
ZoomNormal();
}
}
} }
} }

View File

@ -585,6 +585,7 @@ namespace Sunny.UI
double xlDate = xlDateNew.DoubleValue; double xlDate = xlDateNew.DoubleValue;
if (xlDate < _min) if (xlDate < _min)
{ {
/*
switch (_scaleLevel) switch (_scaleLevel)
{ {
default: year++; break; default: year++; break;
@ -597,6 +598,18 @@ namespace Sunny.UI
} }
xlDateNew = new DateTimeInt64(year, month, day, hour, minute, second, millisecond); xlDateNew = new DateTimeInt64(year, month, day, hour, minute, second, millisecond);
*/
switch (_scaleLevel)
{
default: xlDateNew.AddYears(1); break;
case UIDateScaleLevel.Month: xlDateNew.AddMonths(1); break;
case UIDateScaleLevel.Day: xlDateNew.AddDays(1); break;
case UIDateScaleLevel.Hour: xlDateNew.AddHours(1); break;
case UIDateScaleLevel.Minute: xlDateNew.AddMinutes(1); break;
case UIDateScaleLevel.Second: xlDateNew.AddSeconds(1); break;
case UIDateScaleLevel.Millisecond: xlDateNew.AddMilliseconds(1); break;
}
} }
return xlDateNew.DoubleValue; return xlDateNew.DoubleValue;