получить точку данных, когда пользователь щелкнет линейный график с помощью DataVisualization.Charting.Chart - PullRequest
2 голосов
/ 04 января 2012

Я использую DataVisualization.Charting.Chart (winform), мне нужно получить индекс точки данных, когда пользователь щелкает линейный график в событии MouseDown.

Я знаю, что есть функция HitTest, принимающая x &y, но для линейного графика нам нужно только проверить x, если мы отсканируем y (от 0 до высоты графика), он будет работать, но производительность слишком низкая.

Ответы [ 2 ]

1 голос
/ 18 июня 2013

если вы используете HitTestResult's ChartElementType.

HitTestResult result = chart.HitTest(e.X, e.Y);

if (result.ChartElementType == ChartElementType.DataPoint)
{
    int index = result.PointIndex;
    // todo something...
}
1 голос
/ 05 января 2012

Один из способов сделать это - включить курсор

chartArea1.CursorX.IsUserEnabled = true;
chartArea1.CursorX.IsUserSelectionEnabled = true;
// set selection color to transparent so that range selection is not drawn
chartArea1.CursorX.SelectionColor = System.Drawing.Color.Transparent;

и обработать событие CursorPositionChanged.

private void chart1_CursorPositionChanged(object sender, CursorEventArgs e)
{
   // find a point (this series only has Y values, so using position as index works
   // for a series with actual X values, you'd need to Find the closest point
   DataPoint pt = chart1.Series[0].Points[(int)Math.Max(e.ChartArea.CursorX.Position - 1, 0)];
   // do what is need with the data point
   pt.MarkerStyle = MarkerStyle.Square; 
}

Это, очевидно, предполагает одну серию в вашей ChartArea.

...