赞
踩
Hello大家好我是萌主,在C#项目开发中使用图表控件,我们希望随着鼠标的移动动态显示鼠标位置相应的数值,所以本期课程将带介绍Scottplot图表控件如何来实现这个功能。
1、在scottplot中实现通过十字光标线显示当前鼠标位置对应的XY轴对应的数值
Visual Studio 2019 .net5.0
添加1个复选框,4个文本显示label
using ScottPlot; using ScottPlot.Plottable; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Scottplot_01 { public partial class Form1 : Form { private readonly Crosshair Crosshair; public Form1() { InitializeComponent(); var plt = formsPlot1.Plot; // sample data //X轴数据 double[] xs = DataGen.Consecutive(51); //Y轴数据 double[] sin = DataGen.Sin(51); double[] cos = DataGen.Cos(51); // 2条曲线 plt.AddScatter(xs, sin); plt.AddScatter(xs, cos); // plot参数设置 plt.Title("标题"); plt.XLabel("X轴"); plt.YLabel("Y轴"); //添加十字光标线 this.Crosshair = this.formsPlot1.Plot.AddCrosshair(0.0, 0.0); //缩放进行配置 formsPlot1.Refresh(); } private void cbZoomable_CheckedChanged(object sender, EventArgs e) { //鼠标右键拖拽缩放 this.formsPlot1.Configuration.RightClickDragZoom = this.cbZoomable.Checked; //鼠标管轮缩放 this.formsPlot1.Configuration.ScrollWheelZoom = this.cbZoomable.Checked; } private void cbLockHorizontal_CheckedChanged(object sender, EventArgs e) { //锁定水平缩放 this.formsPlot1.Configuration.LockHorizontalAxis = this.cbLockHorizontal.Checked; } private void cbLockVertical_CheckedChanged(object sender, EventArgs e) { //锁定垂直缩放 this.formsPlot1.Configuration.LockVerticalAxis = this.cbLockVertical.Checked; } //鼠标移动时处理十字光标 private void formsPlot1_MouseMove(object sender, MouseEventArgs e) { if (CrosshaircheckBox.Checked) { ValueTuple<double, double> mouseCoordinates = this.formsPlot1.GetMouseCoordinates(); double coordinateX = mouseCoordinates.Item1; double coordinateY = mouseCoordinates.Item2; this.XPixelLabel.Text = string.Format("{0:0.000}", e.X); this.YPixelLabel.Text = string.Format("{0:0.000}", e.Y); this.XCoordinateLabel.Text = string.Format("{0:0.00000000}", coordinateX); this.YCoordinateLabel.Text = string.Format("{0:0.00000000}", coordinateY); this.Crosshair.X = coordinateX; this.Crosshair.Y = coordinateY; } //this.XPixelLabel.Location = new System.Drawing.Point(e.X, e.Y); //如果设置十字光标线为不显示数值就不显示了 if (!CrosshaircheckBox.Checked) { this.XPixelLabel.Text = ""; this.YPixelLabel.Text = ""; this.XCoordinateLabel.Text = ""; this.YCoordinateLabel.Text = ""; } this.formsPlot1.Refresh(false, false); } //十字功能复选框改变执行任务 private void CrosshaircheckBox_CheckedChanged(object sender, EventArgs e) { if (CrosshaircheckBox.Checked) { this.Crosshair.VerticalLine.IsVisible = true; this.Crosshair.HorizontalLine.IsVisible = true; } else{ this.Crosshair.VerticalLine.IsVisible = false; this.Crosshair.HorizontalLine.IsVisible = false; } this.formsPlot1.Refresh(false, false); } //鼠标进入图表中执行的任务 private void formsPlot1_MouseEnter(object sender, EventArgs e) { if (CrosshaircheckBox.Checked) { this.Crosshair.VerticalLine.IsVisible = true; this.Crosshair.HorizontalLine.IsVisible = true; } else { this.Crosshair.VerticalLine.IsVisible = false; this.Crosshair.HorizontalLine.IsVisible = false; } this.formsPlot1.Refresh(false, false); } //鼠标离开图表执行的任务 private void formsPlot1_MouseLeave(object sender, EventArgs e) { this.Crosshair.VerticalLine.IsVisible = false; this.Crosshair.HorizontalLine.IsVisible = false; this.formsPlot1.Refresh(false, false); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。