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 になっていないかどうかもチェックしておきましょう。