Winforms平台下创建Chart的可移动Y轴提示

发布时间:2014/11/02 00:11 发布者:Alice

返回博客中心

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轴,如下所示:

charttooltip

 

最后附上本文的Demo如下:Sample_MovableAxis.zip (14.59 kb)

如果你对C1Chart有兴趣,可以到我们的官方网页下载该控件试用:/developer

如果你对此有疑问,欢迎到我们的GCDN论坛获取更多的帮助:http://gcdn.grapecity.com.cn/index.aspx

 


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网