在WinForm平台下,如果有两个相同的C1Chart,如何保持两者在运行时候的同步呢?
在接下来的一系列文章,我们专门讨论C1Chart的同步。首先就先来介绍滚动条同步。
在文章的最后,有本文所用到的Demo,本文介绍的都是再此基础上进行同步讨论。
首先,在设计界面拖拽两个C1Chart,保持大小和位置的一致,以及给两个C1Chart导入相同的数据。
代码参考:
c1Chart1.SaveChartToFile("Chart1_Data.xml"); c1Chart2.LoadChartFromFile("Chart1_Data.xml");
接着,C1Chart的滚动条在默认情况下是不显示的,因此需要通过代码或是设计界面将其显示出来。
代码参考:
this.c1Chart1.ChartArea.AxisX.ScrollBar.Visible = true; this.c1Chart1.ChartArea.AxisY.ScrollBar.Visible = true; this.c1Chart2.ChartArea.AxisX.ScrollBar.Visible = true; this.c1Chart2.ChartArea.AxisY.ScrollBar.Visible = true;
其次,调用ScrollBar.AxisScroll事件,当轴的滚动条发生滚动,会触发该事件。
调用代码参考:
this.c1Chart1.ChartArea.AxisX.ScrollBar.AxisScroll += new AxisScrollEventHandler(c1_ScrollBar_AxisScroll); this.c1Chart1.ChartArea.AxisY.ScrollBar.AxisScroll += new AxisScrollEventHandler(c1_ScrollBar_AxisScroll); this.c1Chart2.ChartArea.AxisX.ScrollBar.AxisScroll += new AxisScrollEventHandler(c2_ScrollBar_AxisScroll); this.c1Chart2.ChartArea.AxisY.ScrollBar.AxisScroll += new AxisScrollEventHandler(c2_ScrollBar_AxisScroll);
通过AxisScroll事件,获取其中一个滚动条的值,然后通过Value属性赋值给另一个滚动条。
在该事件中同步的处理代码:
void c1_ScrollBar_AxisScroll(object sender, AxisScrollEventArgs e) { if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll) { this.c1Chart2.ChartArea.AxisX.ScrollBar.Value = e.NewValue; } else { this.c1Chart2.ChartArea.AxisY.ScrollBar.Value = e.NewValue; } } void c2_ScrollBar_AxisScroll(object sender, AxisScrollEventArgs e) { if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll) { this.c1Chart2.ChartArea.AxisX.ScrollBar.Value = e.NewValue; } else { this.c1Chart2.ChartArea.AxisY.ScrollBar.Value = e.NewValue; } }
通过以上代码,就能保证两个C1Chart在运行时,滚动条保持同步。
例如,运行时,鼠标在C1Chart1上拖拽滚动条发生了移动,C1Chart2会自动移动滚动条保持同步。C1Chart2中也是同理。
最后,附上同步的Demo。
C1Chart_keepScrollbar.zip (12.60 kb)
如果你对C1Chart感兴趣,请到我们的官网下载最新版本:/developer/componentone-winform/controls/chart
如果你有疑问,可以到GCDN论坛获得技术支持:http://gcdn.grapecity.com.cn/showforum-68.html
本系列同步文章参考: