在上篇文章中,我们讨论了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
本系列同步文章参考: