|
分類:[VB.NET/VB2005 以降]
2016/06/16(Thu) 00:29:35 編集(投稿者)
開発環境 Microsoft Visual Studio Community 2015 使用言語 VB.Net (Visual Basic 2015) フレームワーク .NET Framework 4.5.2
OS Windows7 Professional SP1 64bit CPU Intel(R) Core(TM) i7 CPU 870 @2.93GHz 2.93GHz RAM 16.0GB
はじめまして、初心者なりに自作アプリを作ろうと、色々な記事を読み漁っています。
まず、私が悩んでいる現象について簡単に述べます。
1. ラベルをドラッグで移動できるようにしたが、ドラッグ中にマウスの右ボタンや中央ボタンをクリックすると、その後のドラッグ処理が不安定になる。
2. 具体的には、MouseMoveイベントが起こることを期待してマウスカーソルを移動させた際、ある程度の速度でマウスカーソルを移動させると、 マウスカーソルが移動中のラベルから脱出してしまい、Label1.MouseMoveではなく、Label1.MouseLeaveが発生する。
3. この現象は、余計なことをせず左ボタンのみを押下してドラッグを行っている限りは発生しない。
4. 左ボタンでのドラッグ中に、例えば右ボタンを押して、左右のボタンが同時に押下されている状態のドラッグでも発生しない。
5. 4の後、左ボタンは押下したまま、それ以外のボタンを「離して」、押されているマウスボタンが「左のみ」になった時に発生する。
6. 5の後、再び右ボタンを押下して左右のボタン同時押しに戻すと、発生しなくなる。
7. 「発生していない」場合、ラベルはフォームの外までドラッグで引っ張ることができる。 (見た限り、左ボタンを離さない間は他のあらゆるイベントが無視されている印象)
8. 「発生している」場合、ラベルはフォームの端までしか移動することができない。 また、移動中のラベルが他のコントロールの下に潜り込んだ場合も移動がストップする。
以上になります。 このような挙動、どなたかご説明できる方はいらっしゃいませんでしょうか?
(以下、Form1クラスモジュール内のコード)
Private MouseA As Point'マウスボタン押下時の、マウスポインタの座標を取得 Private LabelA As Point'マウスボタン押下時の、Label1の座標を取得
'ラベル上でマウスの左ボタンが押下された時の処理
Private Sub Label1_MouseDown(sender As Object, e As MouseEventArgs) Handles Label1.MouseDown
If e.Button = MouseButtons.Left Then
MouseA = Cursor.Position LabelA = sender.location
End If
End Sub
'ラベル上でマウスの左ボタンが押下されたまま、マウスポインタが移動したときの処理
Private Sub Label1_MouseMove(sender As Object, e As MouseEventArgs) Handles Label1.MouseMove
If e.Button = MouseButtons.Left Then
sender.location = LabelA + (Cursor.Position - MouseA)
End If
End Sub
以上、分かり辛くて申し訳ありませんが諸先輩方の知恵をお借りしたく存じます。 何卒ご協力の程、よろしくお願い申し上げます。
|