* UILineChart: 增加了鼠标移上绘制十字线样式

This commit is contained in:
Sunny 2024-11-13 11:05:53 +08:00
parent 92607169d5
commit c676e92fda
2 changed files with 36 additions and 2 deletions

View File

@ -53,6 +53,7 @@
* 2023-10-20: V3.5.1 线DashStyle样式 * 2023-10-20: V3.5.1 线DashStyle样式
* 2023-11-22: V3.6.0 * 2023-11-22: V3.6.0
* 2024-07-01: V3.6.7 Y轴自定义坐标显示 * 2024-07-01: V3.6.7 Y轴自定义坐标显示
* 2024-11-13: V3.7.2 线
******************************************************************************/ ******************************************************************************/
using System; using System;
@ -71,6 +72,10 @@ namespace Sunny.UI
{ {
protected bool NeedDraw; protected bool NeedDraw;
[DefaultValue(MouseLineType.None)]
[Description("鼠标移上绘制十字线样式"), Category("SunnyUI")]
public MouseLineType MouseLine { get; set; }
/// <summary> /// <summary>
/// 重载控件尺寸变更 /// 重载控件尺寸变更
/// </summary> /// </summary>
@ -98,7 +103,7 @@ namespace Sunny.UI
NeedDraw = false; NeedDraw = false;
if (Option?.Series == null || Option.Series.Count == 0) return; if (Option?.Series == null || Option.Series.Count == 0) return;
if (DrawSize.Width <= 0 || DrawSize.Height <= 0) return; if (DrawSize.Width <= 0 || DrawSize.Height <= 0) return;
CalcAxises(); CalcAxes();
foreach (var series in Option.Series.Values) foreach (var series in Option.Series.Values)
{ {
@ -137,7 +142,7 @@ namespace Sunny.UI
protected UIScale YScale; protected UIScale YScale;
protected UIScale Y2Scale; protected UIScale Y2Scale;
protected void CalcAxises() protected void CalcAxes()
{ {
if (Option.XAxisType == UIAxisType.DateTime) if (Option.XAxisType == UIAxisType.DateTime)
XScale = new UIDateScale(); XScale = new UIDateScale();
@ -289,6 +294,23 @@ namespace Sunny.UI
DrawAxisScales(g); DrawAxisScales(g);
DrawPointSymbols(g); DrawPointSymbols(g);
DrawOther(g); DrawOther(g);
if (MousePoint.InRect(DrawRect))
{
switch (MouseLine)
{
case MouseLineType.Horizontal:
g.DrawLine(Pens.Red, DrawRect.Left, MousePoint.Y, DrawRect.Right, MousePoint.Y);
break;
case MouseLineType.Vertical:
g.DrawLine(Pens.Red, MousePoint.X, DrawRect.Top, MousePoint.X, DrawRect.Bottom);
break;
case MouseLineType.Cross:
g.DrawLine(Pens.Red, DrawRect.Left, MousePoint.Y, DrawRect.Right, MousePoint.Y);
g.DrawLine(Pens.Red, MousePoint.X, DrawRect.Top, MousePoint.X, DrawRect.Bottom);
break;
}
}
} }
private void DrawAxis(Graphics g) private void DrawAxis(Graphics g)
@ -848,6 +870,7 @@ namespace Sunny.UI
private readonly List<UILineSelectPoint> selectPoints = new List<UILineSelectPoint>(); private readonly List<UILineSelectPoint> selectPoints = new List<UILineSelectPoint>();
private readonly List<UILineSelectPoint> selectPointsTemp = new List<UILineSelectPoint>(); private readonly List<UILineSelectPoint> selectPointsTemp = new List<UILineSelectPoint>();
public Point MousePoint;
/// <summary> /// <summary>
/// 重载鼠标移动事件 /// 重载鼠标移动事件
/// </summary> /// </summary>
@ -1014,6 +1037,9 @@ namespace Sunny.UI
} }
} }
MousePoint = e.Location;
if (MouseLine != MouseLineType.None) Invalidate();
} }
public delegate void OnPointValue(object sender, UILineSelectPoint[] points); public delegate void OnPointValue(object sender, UILineSelectPoint[] points);

View File

@ -33,6 +33,14 @@ using System.Linq;
namespace Sunny.UI namespace Sunny.UI
{ {
public enum MouseLineType
{
None,
Horizontal,
Vertical,
Cross
}
public enum UISeriesDataOrder public enum UISeriesDataOrder
{ {
X, X,