事件实例

本节的内容可以参考CaseStudy目录下的示例文件: GaugeEvents.Table。

我们在前面的章节中,设计了一个下图所示的仪表,并提供了模板文件

到目前位置,这个仪表是"死"的,这节的任务是让它"活"起来,如下面的动画:

要求:

1、在Range上单击鼠标,指针会移到鼠标位置。

2、可以用鼠标拖动指针到目标位置

3、用鼠标单击Off按钮,指针能停靠到Off位置

4、加减按钮在不同的状态下(如鼠标进入、离开、按下会释放),系统会用不同的颜色填充例如这两个按钮。

5、单击加减按钮,可以加减当前值。

6、鼠标进入或离开指针时,指针会有不同的填充颜色。

提示:这里的加减和Off按钮都是用SingleMark模拟的。

实现步骤:

1、我们首先要增加四组CommonFilling,分别是:

commonFillings有四组:

normalButton 正常状态的按钮
pressedButton 按下鼠标状态的按钮
hotButton 鼠标悬停状态的按钮
normalPointer 正常状态的指针
hotPointer 鼠标悬停状态的指针

这四组CommonFilling的设置:

<commonFillings>
 <commonFilling name="normalButtonbrushType="Gradientcolor="Whitecolor2="DimGray"/>
 <commonFilling name="pressedButtonbrushType="Gradientcolor="MistyRosecolor2="LightCoral"/>
 <commonFilling name="hotButtonbrushType="Gradientcolor="Whitecolor2="SeaGreen"/>
 <commonFilling name="normalPointerbrushType="Gradientcolor="128, 255, 128color2="192, 255, 192"/>
 <commonFilling name="hotPointerbrushType="Gradientcolor="192, 255, 192color2="0, 192, 0"/>
</commonFillings>

再增加两组CommonGradient用,分别是:

normal 正常状态时渐变设置
pressed 鼠标状态的渐变设置
 
这两组commonGradient的设置如下:

<commonGradients>

 <commonGradient name="normaldirection="RadialOutercenterPointX="0.7centerPointY="0.7focusScaleX="0.2focusScaleY="0.2"/>
 <commonGradient name="presseddirection="RadialOutercenterPointX="0.6centerPointY="0.6focusScaleX="0.2focusScaleY="0.2"/>
</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


本页地址:http://www.foxtable.com/webhelp/topics/3927.htm