在Winforms平台下,C1Chart支持了tooltips。本文就在这个基础上讨论如何通过图表的tooltip展示可移动Y轴。
实现是非常简单的。我们需要获取数据点,然后在图表上创建一个仿Y轴。
具体实现步骤如下:
为了实现这个,当鼠标在图表移动的时候,我们首先需要获取鼠标的位置。我们使用Chart的Move事件来存储X/Y的位置。
代码参考如下:
private void c1Chart1_MouseMove(object sender, MouseEventArgs e) { X = e.X; Y = e.X; Invalidate(true); }
下一步是为了创建一个仿Y轴,用来展示鼠标滑动通过图表时候的数据。为此,我们需要处理C1Chart的Paint事件,且使用Graphics.DrawLine() 方法画线。
代码参考:
Graphics g = e.Graphics; g.DrawLine(pen, X, c1Chart1.ChartArea.PlotArea.Location.Y, X, c1Chart1.ChartArea.PlotArea.Location.Y + c1Chart1.ChartArea.PlotArea.Size.Height);
接着我们需要计算通过Chartdataseries点计算Y轴的这条线,然后将值画在Y轴。因此Paint事件如下所示:
private void c1Chart1_Paint(object sender, PaintEventArgs e) { if (X > 75 && X < 700) { Graphics g = e.Graphics; g.DrawLine(pen, X, c1Chart1.ChartArea.PlotArea.Location.Y, X, c1Chart1.ChartArea.PlotArea.Location.Y + c1Chart1.ChartArea.PlotArea.Size.Height); double numofpoints = c1Chart1.ChartArea.AxisY.Max - c1Chart1.ChartArea.AxisY.Min; double unitmajor = c1Chart1.ChartArea.AxisY.UnitMajor; double ymin = c1Chart1.ChartArea.AxisY.Min; float x = 0, ypoint = 0; for (int i = 0; i <= (int)numofpoints / unitmajor; i++) { c1Chart1.ChartGroups[0].DataCoordToCoord(0, ymin + (i * unitmajor), ref x, ref ypoint); g.DrawString((ymin + (i * unitmajor)).ToString(), new Font("Microsoft Sans Serif", 8.25f), new SolidBrush(Color.Red), X, ypoint - 5); ypoint = ypoint - (25 * (float)unitmajor); } } }
最后运行程序。在运行时,鼠标在C1Chart上滑动的时候,我们就可以看到一条可移动的Y轴,如下所示:
最后附上本文的Demo如下:Sample_MovableAxis.zip (14.59 kb)
如果你对C1Chart有兴趣,可以到我们的官方网页下载该控件试用:/developer
如果你对此有疑问,欢迎到我们的GCDN论坛获取更多的帮助:http://gcdn.grapecity.com.cn/index.aspx