Devexpress中Chart控件坐标的移动

来源:互联网 发布:html5 js 编辑:程序博客网 时间:2024/06/06 20:53

在利用Devexpress的Chart控件作图时,常要对控件的坐标进行设置,否则,图形会在界面上不断地累加,如下图所示。横坐标不断累积,从而使图形显得臃肿,现在,我们要添加代码对横坐标进行设置,使其可以进行移动。


解决的方法及步骤如下:

1)可以到Dexexpress中查看XtraCharts的sample,可以查看当中的real-time Chart,里面有相关的解决代码。

代码如下:

            void timer_Tick(object sender, EventArgs e) {            if(Series1 == null || Series2 == null)                return;            DateTime argument = DateTime.Now;            SeriesPoint[] pointsToUpdate1 = new SeriesPoint[interval];            SeriesPoint[] pointsToUpdate2 = new SeriesPoint[interval];            for(int i = 0; i < interval; i++) {                pointsToUpdate1[i] = new SeriesPoint(argument, value1);                pointsToUpdate2[i] = new SeriesPoint(argument, value2);                argument = argument.AddMilliseconds(1);                UpdateValues();            }            DateTime minDate = argument.AddSeconds(-TimeInterval);            int pointsToRemoveCount = 0;            foreach(SeriesPoint point in Series1.Points)                if(point.DateTimeArgument < minDate)                    pointsToRemoveCount++;            if(pointsToRemoveCount < Series1.Points.Count)                pointsToRemoveCount--;            Series1.Points.AddRange(pointsToUpdate1);            Series2.Points.AddRange(pointsToUpdate2);            if(pointsToRemoveCount > 0)             {                Series1.Points.RemoveRange(0, pointsToRemoveCount);                Series2.Points.RemoveRange(0, pointsToRemoveCount);            }            if(AxisXRange != null)                AxisXRange.SetMinMaxValues(minDate, argument);        }

这段代码中以时间为横坐标,当横坐标上的时间小于预设的时间时,series上的点落入删除的区间,最后调用points的removeRange

删除这些点。

2)我的实现方案

DevExpress.XtraCharts.SeriesPoint p = new DevExpress.XtraCharts.SeriesPoint(st, val); chartControl1.Series[0].Points.Add(p);            nowLength++;           if (nowLength > xlength)           {                    chartControl1.Series[0].Points.RemoveRange(0, nowLength - xlength);      nowLength = xlength;            }
xlength是自己设定的一个int,表示你期望在横坐标上显示的点,当现在的点数nowLength超过这个值,就会将最前面的这个差额

减去。从而一直维护下去。

执行效果:

其实,这里的逻辑可以更简单,上述程序的意思就是在界面上点数量一定时,增添一个点,最前面就删除一个点。所以,有以下程序变种,逻辑相同,程序却更为简单:
DevExpress.XtraCharts.SeriesPoint p = new DevExpress.XtraCharts.SeriesPoint(st, val);chartControl1.Series[0].Points.Add(p);nowLength++;if (nowLength > xlength){      chartControl1.Series[0].Points.RemoveRange(0, 1);} 

第一篇技术博文,希望能够在CSDN,和各位大侠一起成长,我这只菜青色的小鸟,希望在各位大侠的帮助下翱翔蓝天,蜕变为大鹏。

请多多指教。