2012-01-04 2 views
2

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

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

ответ

1

Один из способов сделать это для того, чтобы курсор

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.

+0

привет, моя серия имеет фактические значения x, это основано на времени, но интервал не согласован (фиксирован). как найти ближайшую точку? можем ли мы иметь положение всех точек, чтобы мы могли перебирать их, чтобы найти ближайший? – unruledboy

+0

большое спасибо! Мне удалось это сделать. – unruledboy

+1

Я согласен с unruledboy, это не работает в этом случае! – Tom

1

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

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

if (result.ChartElementType == ChartElementType.DataPoint) 
{ 
    int index = result.PointIndex; 
    // todo something... 
} 
Смежные вопросы