事件实例
本节的内容可以参考CaseStudy目录下的示例文件: GaugeEvents.Table。
我们在前面的章节中,设计了一个下图所示的仪表,并提供了模板文件:
到目前位置,这个仪表是"死"的,这节的任务是让它"活"起来,如下面的动画:
要求:
1、在Range上单击鼠标,指针会移到鼠标位置。
2、可以用鼠标拖动指针到目标位置
3、用鼠标单击Off按钮,指针能停靠到Off位置
4、加减按钮在不同的状态下(如鼠标进入、离开、按下会释放),系统会用不同的颜色填充例如这两个按钮。
5、单击加减按钮,可以加减当前值。
6、鼠标进入或离开指针时,指针会有不同的填充颜色。
提示:这里的加减和Off按钮都是用SingleMark模拟的。
实现步骤:
1、我们首先要增加四组CommonFilling,分别是:
commonFillings有四组:
normalButton | 正常状态的按钮 |
pressedButton | 按下鼠标状态的按钮 |
hotButton | 鼠标悬停状态的按钮 |
normalPointer | 正常状态的指针 |
hotPointer | 鼠标悬停状态的指针 |
这四组CommonFilling的设置:
再增加两组CommonGradient用,分别是:
normal | 正常状态时渐变设置 |
pressed | 鼠标状态的渐变设置 |
<commonGradients>
如果不记得如何添加上述设置,可以参考: 共享Filling和Gradient设置
2、将PointerDragMove事件代码设置为:
e.Gauge.Value = Math.Round( e.NewValue,
1)
3、ItemClick事件代码设置为:
If
e.Item.Name =
"minusButton"
Then
'如果单击是的minusButton按钮
If
e.Gauge.Value > e.Gauge.Minimum
Then
'如果当前值大于最小值
e.Gauge.Value = Math.Max(e.Gauge.Minimum, e.Gauge.Value - 5)
'则当前值减5
Else
e.Gauge.Value =
Double.NaN
'否则回到Off状态
End
If
ElseIf
e.Item.Name =
"plusButton"
Then
'如果单击是的plusButton按钮
If
Double.IsNaN(e.Gauge.Value)
Then
'如果当前状态是Off
e.Gauge.Value = e.Gauge.Minimum
'则指针移到最小值位置
Else
e.Gauge.Value = Math.Min(e.Gauge.Maximum, e.Gauge.Value + 5)
'否则当前值加5
End
If
ElseIf
e.Item.Name =
"offMark"
Then
'如果单击的是offMark按钮
e.Gauge.Value =
Double.NaN
'指针回到off状态
End
If
4、ItemMouseDown事件代码设置为:
If
TypeOf
e.Item
Is
GaugeRange
Then
'如果是在Range上按下鼠标
Dim
newValue
As
Double
= e.Gauge.Pointer.GetValueAt(e.X, e.Y)
'获取鼠标位置的值
e.Gauge.Value = Math.Round(newValue,
1)
'则将指针移到鼠标位置
End
If
5、ItemStateChanged事件代码设置为:
If
TypeOf
e.Item
Is
GaugePointer
Then
'如果是指针
If
e.ItemHot
OrElse
e.ItemPressed
Then
'如果是鼠标悬停或按下状态
e.Gauge.Pointer.Filling.CommonFillingName =
"hotPointer"
Else
e.Gauge.Pointer.Filling.CommonFillingName =
"normalPointer"
End
If
ElseIf
e.Item.Name =
"minusButton"
OrElse
e.Item.Name =
"plusButton"
Then
'如果是加减按钮
Dim
smk
As
SingleMark = e.Item
'将item转转为SingleMark,方便设置代码
If
e.ItemPressed
Then
'如果是按下状态
smk.Filling.CommonFillingName =
"pressedButton"
ElseIf
e.ItemHot
Then
'如果是鼠标选定状态
smk.Filling.CommonFillingName =
"hotButton"
Else
'如果是正常状态
smk.Filling.CommonFillingName =
"normalButton"
End
If
If
e.ItemPressed
Then
'如果是按下状态
smk.Gradient.CommonGradientName =
"pressed"
Else
'如果是非按下状态
smk.Gradient.CommonGradientName =
"normal"
End
If
End
If