赞
踩
在利用C#控件绘制曲线图后,有时我们需要通过鼠标查看数据点的值信息,常用的方法就是利用chart控件的chart1_GetToolTipText(object sender, ToolTipEventArgs e)事件来获取数据点的信息,如下我用两个label来显示获取的数据点的值
相关代码如下
private void chart1_GetToolTipText(object sender, ToolTipEventArgs e)
{
if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
{
int i = e.HitTestResult.PointIndex;
DataPoint dp = e.HitTestResult.Series.Points[i];
double x = dp.XValue;
double y = dp.YValues[0];
label1.Text = x.ToString();
label2.Text = y.ToString();
}
}
但是该方法有个弊端,那就是只能获取曲线上的点的信息,不能获取任意位置的信息。要解决这个问题,可以通过chart控件的
chart1_MouseMove(object sender, MouseEventArgs e)
事件来解决。
为了区分是捕获了曲线上的数据点,还是其他位置的信息,这里我再用一个label来显示,若鼠标捕获到了曲线上的数据点,label的标签就显示为“捕获”,否则为“未捕获”。
(当鼠标移动到曲线上的数据点时,显示数据点的信息,状态为捕获)
(当鼠标移开时,显示当前鼠标的坐标信息,状态为未捕获)
相关代码如下
private void chart1_MouseMove(object sender, MouseEventArgs e) { //将鼠标沿轴的绝对像素位置转换为轴值 double x = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X); double y = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Y); if(label3.Text=="未捕获") { label1.Text = x.ToString(); label2.Text = y.ToString(); } } private void chart1_GetToolTipText(object sender, ToolTipEventArgs e) { if(e.HitTestResult.ChartElementType==ChartElementType.DataPoint) { label3.Text = "未捕获"; int i=e.HitTestResult.PointIndex; DataPoint dp = e.HitTestResult.Series.Points[i]; double x = dp.XValue; double y = dp.YValues[0]; //若鼠标的坐标与曲线点的坐标差在3个像素之内,就认为鼠标捕获到了曲线上的数据点 if (Math.Abs(e.X - chart1.ChartAreas[0].AxisX.ValueToPixelPosition(x)) < 3 && Math.Abs(e.Y - chart1.ChartAreas[0].AxisY.ValueToPixelPosition(y)) < 3) { label3.Text = "捕获"; label1.Text = x.ToString(); label2.Text = y.ToString(); } } else label3.Text = "未捕获"; }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。