组件事件
所有组件,不管是形状(Shapes)还是装饰件(Decorators),以及指针(Pointer)和指针帽(Cap)都可以触发事件。
需要注意的是,只有组件的HitTestable属性设置为True,这个组件才能触发事件,所以如果你不希望某个组件触发事件,只需将其HitTestable属性设置为False即可。
仪表有12个组件事件,我把这12个事件分成了三组,后面的分组在前面一组的基础上,会增加新的e参数,所以越往后的分组,e参数越多:
事件 | 触发条件 | e参数 | ||||||||||||||||
ItemClick | 单击某个组件后触发 |
|
||||||||||||||||
ItemDoubleClick | 双击某个组件后触发 | |||||||||||||||||
ItemMouseEnter | 鼠标进入某个组件后触发 | |||||||||||||||||
ItemMouseLeave | 鼠标离开某个组件后触发 | |||||||||||||||||
ItemStateChanged | 某个组件的状态发生变化后触发 | |||||||||||||||||
ItemMouseDown | 在某个组件上按下鼠标后触发 |
增加的e参数有:
|
||||||||||||||||
ItemMouseUp | 在某个组件上释放鼠标后触发 | |||||||||||||||||
ItemMouseMove | 在某个组件上移动鼠标后触发 | |||||||||||||||||
PointerDragBegin | 开始拖拽某个指针时触发 |
这四个事件是指针专属的,增加的e参数有:
|
||||||||||||||||
PointerDragEnd | 结束拖拽某个指针时触发 | |||||||||||||||||
PointerDragMove | 在拖拽某个指针的过程中触发 | |||||||||||||||||
PointerDragCancel | 按ESC键取消拖拽某个指针后触发 |
一个示例
例如想通过拖动指针来调整指针的当前值,只需在PointerDragMove加上一行代码:
e.Pointer.Value = e.NewValue
如果希望按下鼠标后,将指针移到鼠标位置,可以在ItemMouseDown事件中加上代码:
e.Gauge.Pointer.Value = e.Gauge.GetValueAt(e.X, e.Y)
区分组件
一个仪表会有很多组件,如果要区分组件,可以给组件设置Name属性,然后在代码中判断Name属性来区分组件。
需要注意的是,主指针和指针帽没有Name属性,所以无法通过Name属性判断。
下面是一个ItemClick事件的代码,演示了如何区分各种组件:
Dim
rg
As
RadialGauge = e.Gauge
If
e.Item
Is
rg.Pointer
Then
'单击主指针的代码
ElseIf
e.Item
Is
rg.Cap
Then
'单击指针帽的代码
Else
Select
Case
e.Item.Name
Case
"名称1"
'单击"名称1"组件的代码
Case
"名称2"
'单击"名称2"组件的代码
End
Select
End
If
有的时候,某个类型的组件只有一个,那么可以不设置Name属性,直接在代码中判断组件类型,例如:
If
TypeOf
e.Item
Is
GaugeRange
Then
'如果单击的是Range
e.Gauge.Value = e.Gauge.Pointer.GetValueAt(e.X, e.Y)
'则将指针移到鼠标位置
End
If
重要提示:
1、如果某个组件不触发事件,请检查其HitTestable属性是否被误设置为False了,一定要设置为True才行的哦。
2、HitTestable属性默认为True,如果某些组件不需要触发事件,请记得将其HitTestable属性设置为False,以免其干扰其他组件。