样条图表,如何获取点击的项目?

时间:2016-04-26 15:37:49

标签: c# visual-studio charts click

我在c#上使用whit图表。

我想知道一种方法来点击图表上的iten(样条曲线)来做一些改变颜色或隐藏的事情。

enter image description here

1 个答案:

答案 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或更改ColorHitTestResult就足够了:

 result.Series.Enabled = flase;

 result.Series.Color = Color.Fuchsia;

但要访问点击的值,可能不是..:

请注意,尤其是SplineLine图表,只需非常 DataPoints来创建他们的行;所以HitTest的结果还不够; 告诉您点击了哪个系列以及最近 DataPoint,但要获得正确的,您仍可能需要将像素转换为数据值

因此,您可能更愿意使用便捷功能HitTest而不是PixelPositionToValue结果:

 float px = (float)yourChartArea.AxisX.PixelPositionToValue(e.X);

这将获得实际DataPoints之间的所有值。当然,你可以为Y值做同样的事情:

 float py = (float)yourChartArea.AxisY.PixelPositionToValue(e.Y);

注意,当图表不忙于确定布局时,您只能使用这些功能;官方这只是在三个Paint事件中的任何一个。但我发现在实践中鼠标事件也没问题。当图表未准备就绪时,您将获得空值。