VB6.0 用MSchart作动态曲线显示时总是多了一条过原点的直线,请问是什么原因?

VB6.0 用MSchart作动态曲线显示时总是多了一条过原点的直线,请问是什么原因?,第1张

这个问题比较复杂。我研究了2小时(老实说,我在此之间还没有使用过MSChart控件),现在答复如下:

问题根源在于下面这一句:

MSChart1.ChartData = MyData '数据获取

这里把二维数组MyData赋给MSChart1.ChartData,而数组MyData是一个固定大小(0~5000,0~1)的数组,在Timer1中,这个数组的前面部分(第一个下标为0~i,0~1)被赋予了值:

MyData(i, 0) = MyData_x(i) 'x轴数据,时间

MyData(i, 1) = MyData_y(i) 'y轴数据,函数值

而后面部分(第一个下标为i+1~5000,0~1)未被赋值,故仍为0,也就是说,后面的点实际上就是原点,这就是导致所画线条总是与坐标原点相连的原因。

那么怎么改进呢?在执行下句:

MSChart1.ChartData = MyData

之前, MyData里的数据只能包含前面0~i个点的数据,而不能是所有5000个点!这就要用到动态数组。但如果直接把MyData定义为二维动态数组,而它的第一维是可变的,但第二维是不变的,不能使用Preserve保留字保存已有数据(只有最后一维是可变时才可使用Preserve保留字)!

把两个下标交换位置,不行!不符合MSChart1.ChartData 对数据的要求!

只好另外定义一个二维动态数组MyData2,在Timer1_Timer事件中动态定义,并把MyData中的前面的数据复制到MyData2中,再把MyData2赋给MSChart1.ChartData 。

*** 作如下:

(1)在窗体的通用段中增加如下定义:

Dim MyData2() As Integer

(2)略加修改Timer1_Timer事件代码如下:

Private Sub Timer1_Timer()

Dim m

ReDim MyData2(i, 1)

MyData_x(i) = i '时间作为x轴

MyData_y(i) = 500 * Sin(i / 10) + 1000 '时间的正弦函数值

MyData(i, 0) = MyData_x(i) 'x轴数据,时间

MyData(i, 1) = MyData_y(i) 'y轴数据,函数值

If x_max >= 10000 Then x_max = 10000

If y_max >= 10000 Then y_max = 10000

If MyData(i, 0) >= x_max Then x_max = x_max * 2 '防止数据溢出

If MyData(i, 1) >= y_max Then y_max = y_max * 2

For m = 0 To i

MyData2(m, 0) = MyData(m, 0)

MyData2(m, 1) = MyData(m, 1)

Next

MSChart1.ChartData = MyData2 '数据获取

i = i + 1

End Sub

其他代码均不变。运行程序,大功告成!

你是说从Y的刻度上加入与X平行的刻度线?

你可以修改Y轴的Interval属性达到效果,就是Y轴刻度的大小。

另外你还可以加入两个Serial在当前的ChartArea,就用你画折线的办法画两条直线,不是很难。备注的话很简单,当你在每个Serial中加入Point的时候,可以指定他的Label。

可以的,你可以找出数据库中折线各个点的X的最大值,你画直线的时候加一个X更大的点就行了

就是说X轴是时间格式的,数据例如有4个,1号,5号,25号,30号

你不想让X轴上还有另外的2号等等没用的刻度是吗?

简单,在Point加入之前,就把X值转化为string,当然你一定要先记得排序一下

1、菜单中的工程-部件-添加"Microsoft ADO Data Control 6.0 (OLEDB)"和"Microsoft Chart Control 6.0 (OLEDB)"

2、在窗体中添加ADODC和MSChart并设置ADODC的数据源连接(查询或表)和MSChart的图表类型(直方图、饼图等)和DataSource属性为Adodc1

3、剩下的用语句对应好就差不多了。

补充:Visual Basic是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。从任何标准来说,VB都是世界上使用人数最多的语言——不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11557311.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存