Slider 控件的另一特性是设定值的范围的能力。在下面的实现中,如果用户在单击 Slider 控件的同时按 SHIFT 键,就会产生 MouseDown 事件。该事件的代码设置了 SelectRange 和 SelStart 属性。当释放鼠标键时,将产生 MouseUp 事件,在该事件的代码中可以设置 SelLength 属性,由此即可得到值的范围。
下面的代码用到了如下对象:
用 Slider 控件设定值的范围
如果要使 Slider 控件能够选定值的范围,就必须将 SelectRange 属性设为 True。可用 Form 对象的 Load 事件来实现,如下所示:
Private Sub Form_Load()
sldSelect.SelectRange = True
End Sub
另外,也可以在设计时将该值设置为 True,只需用鼠标右键单击控件,并单击“属性”显示“属性页”对话框即可。
为了选定范围,在移动 slider 的滑块时必须按住 SHIFT 键。MouseDown 事件具有 shift 参数,通过它能够确定 Shift 键是否被按下了。可以用 If 语句进行检测,代码如下:
Private Sub sldSelect_MouseDown _ (Button As Integer, Shift As Integer, _ x As Single, y As Single) If Shift = 1 Then '
如果按下了Shift
键,'
在此处进行处理。End If
End Sub
如果按了 SHIFT 键,则代码将 SelStart 和 SelLength 属性设置为合适的值。其中 SelStart 属性指定了选定的值范围起点。在这里,SelStart 属性将被设为滑块所在的位置,也就是 Slider 控件的 Value 属性。
SelLength 属性指定了选定的值范围的大小;该属性以 SelStart 的值为起点。在 MouseDown 事件中,将选定新的范围,所以先前的范围必须被清除,也就是说将 SelLength 属性设置为 0。下面的代码完成了这个操作:
sldSelect.SelStart = SldResize.Value '
将先前的SelLength
(如果有的话)设置为0.
sldSelect.SelLength = 0
要选定一个范围,必须在拖动鼠标的同时按 SHIFT 键。设置新范围的代码应该放在 MouseUp 事件中,当 slider 的滑块被释放时会产生该事件。下面的代码用一个简单的公式设置了 SelLength 属性,即用滑块的值减掉 SelStart 属性的值:
sldSelect.Value - sldSelect.SelStart
然而,用户有可能在选定范围的过程中释放了 SHIFT 键。在这种情况下,不应选定范围。所以上述代码只有当 Shift 键被按下时才应被执行。同 MouseDown 事件一样,可以用 If 语句进行检测:
Private Sub sldSelect_MouseUp _ (Button As Integer, Shift As Integer, _ x As Single, y As Single) If Shift = 1 Then '
如果用户从某点向后退,'
将会产生错误。On Error Resume Next
'
否则用SelStart
和当前值设置SelLength
。sldSelect.SelLength = _
sldSelect.Value - sldSelect.SelStart
Else
'
如果用户释放了SHIFT
键,将SelLength
'
设置为0
(以清除SelRange
)并退出。sldSelect.SelLength = 0
End If
End Sub
全部代码如下所示:
Private Sub Form_Load() sldSelect.SelectRange = True End Sub Private Sub sldSelect_MouseDown _ (Button As Integer, Shift As Integer, _ x As Single, y As Single) If Shift = 1 Then sldSelect.SelStart = sldSelect.Value '
将先前的SelLength
(如果有)设置为0.
sldSelect.SelLength = 0
End If
End Sub
Private Sub sldSelect_MouseUp _
(Button As Integer, Shift As Integer, _
x As Single, y As Single)
If Shift = 1 Then
'
如果用户从某点向后退,'
将会产生错误。On Error Resume Next
'
否则用SelStart
和当前值设置SelLength
。sldSelect.SelLength = _
sldSelect.Value - sldSelect.SelStart
Else
'
如果用户释放了SHIFT
键,则将SelLength
'
设置为0
(以清除SelRange
)并退出。sldSelect.SelLength = 0
End If
End Sub