VB.NET – TrackBarでクリックした位置に移動
Trackbarでシークバーのようにクリックした位置に移動させたいと思っていたんだけど、
Trackbarにはそういったプロパティやイベントがみあたらない・・・
「LargeChange」プロパティというのがあって、
マウスのクリックや、PAGE UP および PAGE DOWN キーを押したときにスライダが移動するポジション数を指定できるのだが、0にしたら移動するかも!?なんて期待を持ちながら設定してみたけどスライダがまったく動かず・・・当たり前か><
クリックした場所に必ず目盛りがあるわけではないし、Trackbar標準機能ではできないのかなぁ。
仕方なく、無理やり実装してみた。
方法は、LargeChangeを0にしてマウスイベントを制御してスライダの位置を設定。
PAGE UPやPAGE DOWNキーで移動しなくなるけどこれらのキーを使う人はほとんどいないでしょう!?ということで。
Private scrollflg As Boolean
Private Sub TrackBar1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackBar1.MouseDown
scrollflg = False
End Sub
Private Sub TrackBar1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackBar1.MouseUp
Dim seekWidth As Double
Dim seekValue As Integer
Dim ticWidth As Double
‘左クリック以外は移動しない
If e.Button <> Windows.Forms.MouseButtons.Left Then
Exit Sub
End If
‘スクロール移動した場合は移動しない
If scrollflg = True Then
Exit Sub
End If
‘TrackBar範囲以外の場合は移動しない
If e.X < 0 OrElse e.X > TrackBar1.Width OrElse e.Y < 0 OrElse e.Y > TrackBar1.Height Then
Exit Sub
End If
If e.X < 8 Then
TrackBar1.Value = TrackBar1.Minimum
ElseIf e.X > TrackBar1.Width – 8 Then
TrackBar1.Value = TrackBar1.Maximum
Else
seekWidth = TrackBar1.Width – 16
ticWidth = seekWidth / (TrackBar1.Maximum – TrackBar1.Minimum)
seekValue = CInt((e.X – 8) / ticWidth) + TrackBar1.Minimum
TrackBar1.Value = seekValue
End If
End Sub
Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
scrollflg = True
End Sub
8を引いたりしてるのはTrackBarコントロールの端から8pxのところに目盛り位置があるから(両端合わせて16)
一応それっぽい動きはしているけど、もっと良い方法があったらご教授願いますm(..)m
コメントはまだありません。