- 題名: コントロールをマウス移動する際にグリッドスナップしても連続してドラッグしたい
- 日時: 2012/09/25 14:53:26
- ID: 30972
- この記事の返信元:
- (なし)
- この記事への返信:
- [30973] Re[1]: コントロールをマウス移動する際にグリッドスナップしても連続してドラッグしたい2012/09/25 22:39:34
- ツリーを表示
■No30973に返信(Azuleanさんの記事)
フォームモジュールに以下の様なコードを記述しています。
フォームには、ピクチャーボックスが配置してあります。
そのピクチャーボックスをグリッドスナップさせようとしています。
よろしくお願いします。
Private Pic1Left As Long
Private Pic1Top As Long
Private ptDrag As Point
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
Pic1Left = PictureBox1.Left
Pic1Top = PictureBox1.Top
ptDrag = PictureBox1.PointToClient(Control.MousePosition) 'マウスダウンした時のカーソル位置を取得する
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
Dim pic2 As PictureBox
Dim Targetpt As Point
Dim pt As Point
If e.Button = Windows.Forms.MouseButtons.Left Then
pic2 = DirectCast(sender, PictureBox) '移動するピクチャーボックスをpic2として
pt = PictureBox1.Parent.PointToClient(Control.MousePosition) '現在のカーソル位置を取得する
Targetpt = pt - ptDrag
If pic2.Left > (Pic1Left + (pic2.Width \ 2)) Then '半分以上移動した時のみ、幅分移動した位置に設定する
pic2.Left = Pic1Left + pic2.Width
ElseIf pic2.Left < (Pic1Left - (pic2.Width \ 2)) Then '半分以上移動した時のみ、幅分移動した位置に設定する
pic2.Left = Pic1Left - pic2.Width
Else
pic2.Left = Targetpt.X '以外は元の位置に戻す
End If
If pic2.Top > (Pic1Top + (pic2.Height \ 2)) Then '半分以上移動した時のみ、高さ分移動した位置に設定する
pic2.Top = Pic1Top + pic2.Height
ElseIf pic2.Top < (Pic1Top - (pic2.Height \ 2)) Then '半分以上移動した時のみ、高さ分移動した位置に設定する
pic2.Top = Pic1Top - pic2.Height
Else
pic2.Top = Targetpt.Y '以外は元の位置に戻す
End If
End If
End Sub
分類:[.NET]
お世話様です。シマウマです。
コントロールをマウスで移動させて、グリッドにスナップするような
プログラムを組んだのですが、MouseMoveでスナップ移動後すると、
マウスの制御から外れてしまって、マウスを一度マウスアップして
再度ドラッグ開始させないと次の座標に移動できません。
感覚としては、グリッド移動してもマウスを連続的にドラッグ移動
できるようにしたいのですが、どうればいいでしょうか。
ご存じ方よろしくご指導願います。