.NETでスクロールバーのスクロールイベントが2回起こってしまいます。

解決


よしなり  2004-07-21 23:52:40  No: 84702  IP: [192.*.*.*]

何もないフォームにスクロールバーを貼っつけて、一回だけスクロールすると、『●』が出力ウインドウに2回表示されてしまいます。メッセージボックスも二つ表示されます。何故でしょうか?

Private Sub HScrollBar1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll
        Debug.WriteLine("●")
        MessageBox.Show("777")
End Sub

編集 削除
魔界の仮面弁士  2004-07-22 10:29:24  No: 84703  IP: [192.*.*.*]

Private Sub HScrollBar1_Scroll(ByVal sender As Object, ByVal e As ScrollEventArgs) Handles HScrollBar1.Scroll
  Debug.WriteLine(String.Format("●Type={0}, NewValue={1}", e.Type, e.NewValue))
End Sub

と書いた上で、いろいろなスクロール方法を試してみてください。

・つまみをドラッグする。
・余白部分をクリックする。
・余白部分を押し続ける。
・両端のボタンをクリックする。
・両端のボタンを押し続ける。
・矢印キーを押す。
・矢印キーを押し続ける。

編集 削除
よしなり  2004-07-22 19:32:31  No: 84704  IP: [192.*.*.*]

レスありがとうございます。
私が試したのは『・両端のボタンをクリックする』のみでした。
以下のコードで全ての場合を試しました。

Private Sub HScrollBar1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll
        Static int_i As Integer = 0

        If int_i = 0 Then
            Me.HScrollBar1.LargeChange = 1
        End If

        int_i = int_i + 1
        Debug.WriteLine(int_i.ToString)
    End Sub

・つまみをドラッグする。→一回ずつイベントが起動します。
・余白部分をクリックする。→二回ずつイベントが起動します。
・余白部分を押し続ける。→奇数・偶数の両方で止まるので、おそらく一回ずつイベントが起動します。
・両端のボタンをクリックする。二回ずつイベントが起動します。
・両端のボタンを押し続ける。奇数・偶数の両方で止まるので、おそらく一回ずつイベントが起動します。
・矢印キーを押す。→最初は一回、後は二回ずつイベントが起動します。
・矢印キーを押し続ける。奇数・偶数の両方で止まるので、おそらく一回ずつイベントが起動します。

ん〜正直、正確には把握しずらいです。

編集 削除
魔界の仮面弁士  2004-07-22 23:06:50  No: 84705  IP: [192.*.*.*]

> 以下のコードで全ての場合を試しました。
ではなく、私のコードで試して見てください。

編集 削除
よしなり  2004-07-24 10:37:14  No: 84706  IP: [192.*.*.*]

大変失礼しました。早速試行してみました。

・つまみをドラッグする。
●Type=ThumbTrack, NewValue=0       ←①クリック
●Type=ThumbTrack, NewValue=2       ←②ドラッグ中
●Type=ThumbPosition, NewValue=2    ←③ボタンを離す
●Type=EndScroll, NewValue=2        ←③ボタンを離す

・余白部分をクリックする。
●Type=LargeIncrement, NewValue=10  ←①クリック
●Type=EndScroll, NewValue=10       ←②ボタンを離す

・余白部分を押し続ける。
●Type=LargeIncrement, NewValue=10  ←①クリック
●Type=LargeIncrement, NewValue=20  ←②クリック継続中
●Type=EndScroll, NewValue=20       ←③ボタンを離す

・両端のボタンをクリックする。
●Type=SmallIncrement, NewValue=1   ←①クリック
●Type=EndScroll, NewValue=1        ←②ボタンを離す

・両端のボタンを押し続ける。
●Type=SmallIncrement, NewValue=1   ←①クリック
●Type=SmallIncrement, NewValue=2   ←②クリック継続中
●Type=EndScroll, NewValue=2        ←③ボタンを離す

・矢印キーを押す。
●Type=EndScroll, NewValue=0        ←①1回目
●Type=SmallIncrement, NewValue=1   ←②2回目
●Type=EndScroll, NewValue=1        ←②2回目
●Type=SmallIncrement, NewValue=2   ←③3回目
●Type=EndScroll, NewValue=2        ←③3回目

・矢印キーを押し続ける。
●Type=SmallIncrement, NewValue=1   ←①矢印キーを押す
●Type=SmallIncrement, NewValue=2   ←②矢印キー押し継続中
●Type=EndScroll, NewValue=2        ←③矢印キーを離す

詳しいことはわからないですが、最初に『ThumbTrack』等が発生して、最後に必ず『EndScroll』イベントが発生する。だから単純にスクロールイベントのみで見た場合、複数回スクロールイベントが発生したように見えたわけですね。スクロールイベントの種類も知らなかったとは...まだまだ若輩です。
ありがとうございました!

編集 削除