让指针动起来
这里的让指针动起来不是指拖动指针,这里指的是给仪表的指针指定SweepTime值,开启动画效果。那么当指针的value值不一样的时候,会让指针(以及绑定的装饰件)从上一个值向当前最新值变化的时候有动画效果。SweepTime的单位为秒,为大于等于0的整数值,比如SweepTime值是0,那么值的变化是瞬间完成的,没有动画效果;又比如SweepTime值是2,那么会在2秒之内完成变化的动画效果。
如果指针的值来源于数据表,可以在表格的DataColChanged事件里更新指针的值。但是往往不会在一边显示大屏的时候一边编辑表格数据,特别是后台数据库的数据发生变化的时候,也不会触发表事件。所以一般都是在窗口计时器(或者使用计划管理)里定时查询数据并更新指针的值。如果时效要求高当然也可以使用OpenQQ进行即时的数据刷新。本帮助使用计时器处理。
首先启用窗口计时器,间隔1000,然后到TimerTick事件写代码:
Dim gg As WinForm.Gauges =
e.Form.Controls("Guages1")
Dim k = gg.BaseControl
k.CoverShapes("时间").text
= Format(Date.Now, "yyyy年MM月dd日 HH:mm:ss")
把主区的主指针的SweepTime值设置为2,Value设置为0(仪表设置的Minimum),到窗口afterload事件把主指针Value设置为100(仪表设置的Maximum),这样窗口一打开,指针就会出现从最小值移动到最大值的动画效果。
但是2秒后指针就会停止,如果要让指针继续动起来,就必要在2秒后重新设置指针的Value值。前面为了显示时间,计时器间隔是1000,所以2秒的话,只需要取当前时间的秒数除以2取余数为0就更新指针值即可。
但是指针动画有个问题,只在仪表最小值和最大值之间的值变化才出现动画效果。比如最大值为100,如果我们把指针设置为120,指针到100后就会停止,并不会继续转动到120,所以我们必须先重置指针的值为最小值。
在这之前我们设计主区径向仪表的时候已经把StartAngle 设置为0,SweepAngle 设置为360,也就是说从最小值0转动到最大值100,也就是刚好从角度为0°开始转动了360°,刚好一个圆周,使得指针Value分别为最小值和最大值的时候,指针的位置都在0°角度的位置,是重叠的。
不过由于转了一圈后,指针的值为100,值再大也动不了了,这时如果指针值设置为0.会发现指针变成反转,不是想要的效果。但是前面我们也说了,如果SweepTime的值为0,指针的值会瞬间变化。所以可以利用这种特性,先把SweepTime的值改为0,然后把Value值改为0,这时从100到0,指针是瞬间变化,再加上value为0和100时位置是重叠的,所以肉眼根本看不出指针有变化。最后我们再把SweepTime的值改回2,然后把Value值再改为100,指针又愉快的旋转起来了。
更改TimerTick事件代码如下:
效果
其它卡片的指针值一般情况下应该根据后台获取的数据动态更新,计时器查询间隔根据自己的需要设置。这里为了测试效果,设置为每5秒更新一次。
卡片一:水球是直接绑定主指针的,直接设置
gg.Gauges(2).Value = Rand.Next(1000,8000)
卡片二:在线人数的几个项目都是绑定副指针的,给副指针赋值参考
gg.Gauges(3).MorePointers(0).Value = Rand.Next(1000, 6000)
卡片五:动态更新8个产业倾向的标题和值。这里首先要保证始终都是按数量从大到小排序的,所以前面afterload生成仪表的时候,注意给仪表的Name。以及标题的Name属性赋值,方便直接引用更改:
卡片四:重新生成饼图。上面卡片五的项目图形都是固定的,这种不需要重新生成,直接改其中的某些值即可。但是饼图的形状和大小都不一样的,只能重新生成。窗口Afterload已经有生成的代码,多个地方需要使用的相同代码,我们放到自定义函数里,然后使用的地方改为使用函数即可:
Functions.Execute("生成饼图", gg)