我已经成功地在多个图表区域上实现了多个系列,这些区域在放大时都很好地滚动在一起。
当数据首次呈现时,最小和最大 X 值(日期/时间)由我从 SQL 中提取的数据确定。用户虽然可以选择放大图表,此时会出现水平滚动条。到目前为止,一切都很好。
我想要实现的是在我的 WinForm 上的某处有两个文本控件,它们将显示当前正在查看的 Min 和 Max X 值,当用户向左或向右移动水平滚动条时,这些值应该自动更新。
我应该查看哪些属性和方法?
谢谢,KH
我已经成功地在多个图表区域上实现了多个系列,这些区域在放大时都很好地滚动在一起。
当数据首次呈现时,最小和最大 X 值(日期/时间)由我从 SQL 中提取的数据确定。用户虽然可以选择放大图表,此时会出现水平滚动条。到目前为止,一切都很好。
我想要实现的是在我的 WinForm 上的某处有两个文本控件,它们将显示当前正在查看的 Min 和 Max X 值,当用户向左或向右移动水平滚动条时,这些值应该自动更新。
我应该查看哪些属性和方法?
谢谢,KH
您可以使用 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);
}
}
}
}