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

在上篇文章中,我们讨论了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。

发布于 2014/12/05 00:00

ComponentOne Enterprise

在上篇文章中,我们讨论了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同步

ComponentOne Enterprise | 下载试用

ComponentOne 是一套专注于企业 .NET开发、支持 .NET Core 平台,并完美集成于 Visual Studio 的第三方控件集,包含 300 多种 .NET开发控件,提供表格数据管理、数据可视化、报表和文档、日程安排、输入和编辑、导航和布局、系统提升工具等七大功能,被誉为“.NET开发的‘瑞士军刀’”。

ComponentOne 为您提供专业的产品咨询服务,并由技术支持工程师为您1对1解答。>> 发帖提问

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态