Visual Basic 中学校 掲示板 投稿内容
タグのない投稿を抽出 統計 RSS

Visual Basic 中学校 > 投稿一覧 >

マウスホイールが動いていない

タグの編集...

投稿者   (高校生)   投稿日時 2016/8/10 11:46:33
ラベルをマウスホイールイベントで動かしてピクチャーボックスを動かすということをやっているのですが、マウスホイールイベントが反応してくれません。
  Private Sub MouseWheelマウスホイール(sender As Object, e As MouseEventArgs)
        If (Control.ModifierKeys And Keys.Control) = Keys.Control Then
            If e.Delta > 0 Then
                Call PictureBoxの大きさ変更(sender)

            ElseIf e.Delta < 0 Then
                Call PictureBoxの大きさ変更(sender)
            End If
        End If
    End Sub


Private Sub PictureBoxの大きさ変更(L As Label)


        Dim x移動距離 As Integer = mp移動距離.X

        Dim y移動距離 As Integer = mp移動距離.Y

        Dim soサイズ加算値 As New Point(0, 0)

        Dim ps画像サイズ As New Point(sentaku.Size)

        Dim mo画像移動加算値 As New Point(0, 0)

        Dim pp画像位置 As New Point(sentaku.Location) 'フォーム上の画像の位置 



        Select Case L.Name

            Case "ue"

                soサイズ加算値 = New Point(0, -y移動距離)

                mo画像移動加算値 = New Point(0, y移動距離)

            Case "sita"

                soサイズ加算値 = New Point(0, y移動距離)

                mo画像移動加算値 = New Point(0, 0)

            Case "hidari"

                soサイズ加算値 = New Point(-x移動距離, 0)

                mo画像移動加算値 = New Point(x移動距離, 0)

            Case "migi"

                soサイズ加算値 = New Point(x移動距離, 0)

                mo画像移動加算値 = New Point(0, 0)

            Case "hidariue"

                soサイズ加算値 = New Point(-x移動距離, -y移動距離)

                mo画像移動加算値 = New Point(x移動距離, y移動距離)

            Case "migiue"

                soサイズ加算値 = New Point(x移動距離, -y移動距離)

                mo画像移動加算値 = New Point(0, y移動距離)

            Case "migisita"

                soサイズ加算値 = New Point(x移動距離, y移動距離)

                mo画像移動加算値 = New Point(0, 0)

            Case "hidarisita"

                soサイズ加算値 = New Point(-x移動距離, y移動距離)

                mo画像移動加算値 = New Point(x移動距離, 0)

        End Select




        '画像の大きさを1x1以下にはしないように 

        If ps画像サイズ.X + soサイズ加算値.X < 1 Or ps画像サイズ.Y + soサイズ加算値.Y < 1 Then

            soサイズ加算値 = New Point(0, 0)

            mo画像移動加算値 = New Point(0, 0)

        End If




        '画像のサイズと位置をセット 

        ps画像サイズ.Offset(soサイズ加算値)

        pp画像位置.Offset(mo画像移動加算値)

        sentaku.Size = ps画像サイズ

        sentaku.Location = pp画像位置



    End Sub


もし原因がわかる方がいらしましたらよろしくお願いします。

投稿者 魔界の仮面弁士   (社会人)   投稿日時 2016/8/10 12:48:50
> Private Sub MouseWheelマウスホイール(sender As Object, e As MouseEventArgs)

Button の Click イベントなどだと、末尾に
 Handles Button1.Click
といった記述がありますよね。しかし上記にはそれがありません。

ということは、上記の Sub メソッドは、いずれのコントロールのイベントにも
割り当てられていないということです。

(Handles を使わずに割り当てる方法もありますが、今回はそうでは無いのでしょうし)

投稿者 shu   (社会人)   投稿日時 2016/8/10 12:55:26
MouseWheelマウスホイール

がマウスホイールのイベントハンドラにくっついていないのではないでしょうか?

AddHandler Control.MouseWheel, addressof MouseWheelマウスホイール

などでイベント発生時の処理として実行できるようにする必要があります。
Controlはイベントを発生させるコントロールになります。

投稿者   (高校生)   投稿日時 2016/8/11 09:52:51
すみません。書き忘れましたが、イベントハンドラはあります。
  AddHandler L.MouseWheel, AddressOf MouseWheelマウスホイール

投稿者 魔界の仮面弁士   (社会人)   投稿日時 2016/8/11 11:42:10
その L が何を指しているのか分かりませんが、少なくとも当方では、
下記のコードで、Label1 上でのホイール操作を拾うことができています。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        AddHandler Label1.MouseWheel, AddressOf MouseWheel実験
    End Sub

    Private Sub MouseWheel実験(sender As Object, e As MouseEventArgs)
        Dim s As String = String.Format("{0}, {1:HH\:mm\:ss\.ffff}", e.Delta, Now)
        ListBox1.Items.Insert(0, s)
    End Sub
End Class


『L』以外のコントロールの上でホイール操作をしていたりしませんか?

投稿者   (高校生)   投稿日時 2016/8/11 14:05:45
『L』というのはラベルです。説明不足ですいません。
ここ以外にはホイール操作はしていません。

投稿者 魔界の仮面弁士   (社会人)   投稿日時 2016/8/11 16:57:39
一つ確認しておきたいのですが、私の提示したサンプルで、
ホイール操作は拾えたでしょうか?
Button と Label と ListBox のみを配置したフォームで確認してみてください。



下記では、私のサンプルではイベントを受信できていて、
東さんのコードでは受信できない状態と仮定して回答しています。

もしも、私のサンプルでも受信できないようであれば、
念のため、OS と VB バージョンを教えてください。

-------
(1)何らかの事情で AddHandler し損ねているのかもしれません。

Load イベント中にエラーが発生して AddHandler の行まで到達して
いなかったとか……あるいは、For Each 等でコントロールを列挙しようとして
別の Controls を列挙していたということは無いでしょうか。

念のため、AddHandler している行にブレークポイントを貼っておき、
八方向の Label すべてに対して AddHandler し終わっているか、
ステップ実行を使って、事前に確認してみてください。

あるいは AddHandler するのはやめて、
 Handles ue.MouseWheel, sita.MouseWheel, migi.MouseWheel
を使って、確実に事前割り当てしてしまうのも手かと思います。



(2)受信したイベントを処理し損ねている可能性はないでしょうか。

提示されたコントロールだと、Ctrl キーを押しているときにしか反応しませんし、
mp移動距離 が (0, 0) になっているとリサイズされませんが、大丈夫でしょうか。
あるいは、Label の Name の大文字小文字などを間違えていませんか?

そういう事ではなく、たとえば「Private Sub MouseWheelマウスホイール」の
行にブレークポイントを貼ったとしても、一時停止されない状態であるのだと
すでに確認されているのかもしれませんが、念のために聞いてみました。



(3)ホイール操作時に、マウスは Label の上にありましたか?

前回の回答にも被りますが、カーソルが別のコントロールの上にあると
ホイール操作は受信されません。ホイール操作時にずれないようにしてください。

透明な Label だと操作可能領域が分かりにくいので、一時的に、
Label の BorderStyle を FixedSingle にし、
Label の BackColor も目立つ不透明色にしておくと良いかもしれません。


(4)拾えないのが Label だけなのかどうかを確認してみましょう。

Label 以外のもの、たとえば Form1 や sentaku に対しても
AddHandler した上で、ホイール操作を試してみてください。

Label 以外のコントロールに対してホイール操作した時にはブレークし、
Label の上でホイール操作した時にはブレークしない状態でしょうか?

また、操作対象のコントロールもしくはその親コントロールが
Enabled = False になっていないかどうかもチェックしておきましょう。