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

  1. コメントはまだありません。

  1. トラックバックはまだありません。

*

 
WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera