C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 161 を表示中)
■93031 / )  TrackBarでクリックした位置に移動する方法
□投稿者/ 小次郎 (1回)-(2019/11/15(Fri) 23:01:54)

分類:[.NET 全般] 

2019/11/15(Fri) 23:02:06 編集(投稿者)
VBでTrackBarを使っていて、
TrackBar上をクリックした時に、
そのクリックした位置にスライダーが移動するようにしたいと考えています。


http://www.ramanet.net/89/vb-net-trackbar%E3%81%A7%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%97%E3%81%9F%E4%BD%8D%E7%BD%AE%E3%81%AB%E7%A7%BB%E5%8B%95.html


ここにコードが掲載されているのですが、
この方法だと、マウスをアップした時に移動する仕様になっています。
マウスをダウンした時に移動させたいため、
以下のように修正しました。

これでクリックした位置に移動することはできるのですが、
なぜかクリックした時
TrackBar1_ValueChanged
が2回実行されてしまいます。

例えば、TrackBar1.Valueが1の状態で200の位置をクリックしたとすると、

TrackBar1_ValueChanged   TrackBar1.Value = 8  が実行
TrackBar1_MouseDown     TrackBar1.Value = 200 に設定
TrackBar1_ValueChanged   TrackBar1.Value = 200  が実行

というようなかたちです。
なぜ、MouseDown よりも前に ValueChangedが実行されるのでしょうか?
これを阻止するにはどうすれば良いですか?



    Private Sub TrackBar1_ValueChanged(sender As Object, e As EventArgs) Handles TrackBar1.ValueChanged

		' 計算処理

    End Sub

    Private Sub TrackBar1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackBar1.MouseDown

        If e.Button <> Windows.Forms.MouseButtons.Left _
            OrElse 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
            Dim seekWidth As Double = TrackBar1.Width - 16
            Dim ticWidth As Double = seekWidth / (TrackBar1.Maximum - TrackBar1.Minimum)
            TrackBar1.Value = CInt((e.X - 8) / ticWidth) + TrackBar1.Minimum
        End If


    End Sub

返信 編集キー/


管理者用

- Child Tree -