答案 0 :(得分:0)
您可以使用HitTest
按照建议检查点击的项目..:
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
HitTestResult result = chart1.HitTest(e.X, e.Y);
// now do what you want with the data..:
if (result.Series != null && result.PointIndex >= 0)
Text = "X = " + result.Series.Points[result.PointIndex].XValue +
" Y = " + result.Series.Points[result.PointIndex].YValues[0];
}
为了帮助用户,您可以指出可能的命中:
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
HitTestResult result = chart1.HitTest(e.X, e.Y);
Cursor = result.Series != null ? Cursors.Hand : Cursors.Default;
}
通过使样条线更大一点来帮助您的用户:
eachOfYourSeries.BorderWidth = 4;
当然,您显示的图表会在没有首先放大的情况下进行受控点击。
现在,如果您想要隐藏Series
或更改Color
,HitTestResult
就足够了:
result.Series.Enabled = flase;
或
result.Series.Color = Color.Fuchsia;
但要访问点击的值,可能不是..:
请注意,尤其是Spline
或Line
图表,只需非常 DataPoints
来创建他们的行;所以HitTest
的结果还不够; 会告诉您点击了哪个系列以及最近 DataPoint
,但要获得正确的值,您仍可能需要将像素转换为数据值。
因此,您可能更愿意使用便捷功能HitTest
而不是PixelPositionToValue
结果:
float px = (float)yourChartArea.AxisX.PixelPositionToValue(e.X);
这将获得实际DataPoints
之间的所有值。当然,你可以为Y值做同样的事情:
float py = (float)yourChartArea.AxisY.PixelPositionToValue(e.Y);
注意,当图表不忙于确定布局时,您只能使用这些功能;官方这只是在三个Paint
事件中的任何一个。但我发现在实践中鼠标事件也没问题。当图表未准备就绪时,您将获得空值。