C1Chart在WinForm平台下的同步(二):缩放同步

发布时间:2014/12/05 00:12 发布者:alice

返回博客中心

在上篇文章中,我们讨论了C1Chart在WinForm平台下的同步(一):滚动条同步,我们讨论了如何在运行时保持两个C1Chart的滚动条同步。

本文就在上篇文章的基础上,继续深入讨论在WinForm平台下,保持两个图表缩放的同步。同样的,在文章的最后,会附上本文所用到的Demo。

首先,都是一样的,在设计界面拖拽两个C1Chart,保持大小和位置的一致,以及给两个C1Chart导入相同的数据。

代码参考:

c1Chart1.SaveChartToFile("Chart1_Data.xml");
c1Chart2.LoadChartFromFile("Chart1_Data.xml");

接着,设置C1Chart的交互,将Interaction.Enable属性设置为true。确保在C1Chart缩放行为可用。

代码参考:

            c1Chart1.Interaction.Enabled = true;
            c1Chart1.Interaction.Actions["Zoom"].Modifier = Keys.None;
            c1Chart1.Interaction.Actions["Scale"].Modifier = Keys.Control;
            c1Chart1.Interaction.Actions["Translate"].Modifier = Keys.Shift;
            c1Chart1.Interaction.Actions["Rotate"].Modifier = Keys.Alt;

            c1Chart2.Interaction.Enabled = true;
            c1Chart2.Interaction.Actions["Zoom"].Modifier = Keys.None;
            c1Chart2.Interaction.Actions["Scale"].Modifier = Keys.Control;
            c1Chart2.Interaction.Actions["Translate"].Modifier = Keys.Shift;
            c1Chart2.Interaction.Actions["Rotate"].Modifier = Keys.Alt;

然后,通过LayoutLabels事件,获取其中一个的ScrollBar的Scale,赋值给另一个C1Chart。

调用该事件代码:

  this.c1Chart1.LayoutLabels += new EventHandler(c1Chart1_LayoutLabels);
  this.c1Chart2.LayoutLabels += new EventHandler(c1Chart2_LayoutLabels);

 

在该事件中同步的处理代码:

 void c1Chart1_LayoutLabels(object sender, EventArgs e)
        {
            this.c1Chart2.ChartArea.AxisX.ScrollBar.Scale = c1Chart1.ChartArea.AxisX.ScrollBar.Scale;
            this.c1Chart2.ChartArea.AxisY.ScrollBar.Scale = c1Chart1.ChartArea.AxisY.ScrollBar.Scale;
            this.c1Chart2.ChartArea.AxisX.ScrollBar.Value = c1Chart1.ChartArea.AxisX.ScrollBar.Value;
            this.c1Chart2.ChartArea.AxisY.ScrollBar.Value = c1Chart1.ChartArea.AxisY.ScrollBar.Value;

        }

        void c1Chart2_LayoutLabels(object sender, EventArgs e)
        {
            this.c1Chart1.ChartArea.AxisX.ScrollBar.Scale = c1Chart2.ChartArea.AxisX.ScrollBar.Scale;
            this.c1Chart1.ChartArea.AxisY.ScrollBar.Scale = c1Chart2.ChartArea.AxisY.ScrollBar.Scale;
            this.c1Chart1.ChartArea.AxisX.ScrollBar.Value = c1Chart2.ChartArea.AxisX.ScrollBar.Value;
            this.c1Chart1.ChartArea.AxisY.ScrollBar.Value = c1Chart2.ChartArea.AxisY.ScrollBar.Value;

        }

 

注意:设置ScrollBar.Value,是因为缩放会导致滚动条发生移动,这样就能保持两个c1Chart滚动条的一致性。

通过以上代码,就能保证两个C1Chart在运行时,缩放保持同步。

例如,运行时,鼠标在C1Chart1上进行了缩放操作,C1Chart2会自动缩放保持同步。C1Chart2中也是同理。

最后,附上同步的Demo。

 

如果你对C1Chart感兴趣,请到我们的官网下载最新版本:/developer/componentone-winform/controls/chart

如果你有疑问,可以到GCDN论坛获得技术支持:http://gcdn.grapecity.com.cn/showforum-68.html

本系列同步文章参考

C1Chart在WinForm平台下的同步(一):滚动条同步

C1Chart在WinForm平台下的同步(二):缩放同步

C1Chart在WinForm平台下的同步(三):TriangleMarker同步


关于葡萄城

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

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