Winforms Charts提供了tooltips的支持。本文我们讨论为chart tooltip显示可移动的Y轴的方式。
实现这个非常简单。我们需要捕获数据点,然后在chart上创建Y轴。
开始之前,我们需要捕获鼠标在chart上移动时候的鼠标位置。我们通过C1Chart的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 points计算这条线,然后在这条仿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轴以Tooltip的方式展现。
下载本文示例: