MSChart水平最小x和最大x值

时间:2012-10-04 07:33:19

标签: mschart

我已成功在多个图表区域实现了多个系列,这些系列在放大时都可以很好地滚动。

首次显示数据时,最小和最大X值(日期/时间)由我从SQL中提取的数据确定。用户可以选择放大图形,此时会出现水平滚动条。到目前为止一切都很好。

我想要实现的是在我的WinForm上有两个文本控件,它会显示当前正在查看的最小和最大X值,因为用户向左或向右移动水平滚动条,这些值应该自动更新

我应该关注哪些属性和方法?

谢谢, KH

1 个答案:

答案 0 :(得分:0)

您可以使用AxisViewChanged事件并检查可见范围内的系列点。这是我的意思的一个例子:

void chart1_AxisViewChanged(object sender, System.Windows.Forms.DataVisualization.Charting.ViewEventArgs e)
{
    var left = e.ChartArea.CursorX.SelectionStart;
    var right = e.ChartArea.CursorX.SelectionEnd;
    var top = e.ChartArea.CursorY.SelectionStart;
    var bottom = e.ChartArea.CursorY.SelectionEnd;

    foreach (var series in this.chart1.Series)
    {
        if (series.ChartArea == e.ChartArea.Name)
        {
            var pointsInRange = series.Points.Where(p => p.XValue <= right && p.XValue >= left &&
                                                            p.YValues[0] <= top && p.YValues[0] >= bottom);
            if (pointsInRange.Any())
            {
                var minY = pointsInRange.Min(p => p.YValues[0]);
                var maxY = pointsInRange.Max(p => p.YValues[0]);

                // print the points in your textbox
                textBox1.AppendText("Series: " + series.Name + " min visible Y=" + minY + " max visibleY=" + maxY + Environment.NewLine);
            }
        }
    }
}