2011/07/19(Tue) 22:09:30 編集(投稿者)
shu さん
> コントロールの移動が実装出来るなら、通常のドラッグアンドドロップはいらないと思う。
> 移動後どこでマウスアップされたかを調べそこのコントロールへドロップと同じ処理をすると
> よいかと思います。
何時もありがとうございます。早速やってみました。
上手くできたかと思ったのですが、上手く追加できたり、できなかったりします。。。
↓このようにしていたのを
--------------------------
Sub PictureBox1MouseMove(sender As Object, e As MouseEventArgs)
If mouseDownPoint <> Point.Empty Then
'ドラッグとしないマウスの移動範囲を取得する
Dim moveRect As New Rectangle(mouseDownPoint.X - SystemInformation.DragSize.Width / 2, _
mouseDownPoint.Y - SystemInformation.DragSize.Height / 2, _
SystemInformation.DragSize.Width, _
SystemInformation.DragSize.Height)
'ドラッグとする移動範囲を超えたか調べる
If Not moveRect.Contains(e.X, e.Y) Then
'ドラッグの準備
Dim pic As PictureBox = DirectCast(sender, PictureBox)
'ドラッグ&ドロップ処理を開始する
Dim dde As DragDropEffects = pic.DoDragDrop(Me.pictureBox1, DragDropEffects.Copy)
mouseDownPoint = Point.Empty
End If
End If
End Sub
--------------------------
↓このようにしたのですが、
---------------------------
Dim startX As Integer
Dim startY As Integer
Sub PictureBox1MouseMove(sender As Object, e As MouseEventArgs)
'左クリックの場合
If e.Button = MouseButtons.Left Then
'コントロール取得
Dim control As Control = CType(sender, Control)
'コントロールの位置を設定
control.Left = control.Left + e.X - startX
control.Top = control.Top + e.Y - startY
'リフレッシュ
End If
End Sub
Sub PictureBox1MouseUp(sender As Object, e As MouseEventArgs)
Dim pic As PictureBox = DirectCast(sender, PictureBox)
'ドラッグ&ドロップ処理を開始する
Dim dde As DragDropEffects = pic.DoDragDrop(Me.pictureBox1, _
DragDropEffects.Copy)
'左クリックの場合
If e.Button = MouseButtons.Left Then
'コントロール取得
Dim control As Control = CType(sender, Control)
'コントロールの位置を設定
control.Left = 155
control.Top = 35
'リフレッシュ
Me.Refresh()
End If
End Sub
---------------------------
おそらく、リストボックス内に入ったときに画像が変化するような効果がないために追加しにくいのでは?と思います・・・
また、コントロールそのものを移動しているために、
Listboxでドロップしたときに、ピクチャーボックスとリストボックスが重なっている状態のため上手くイベントが発生しない
ことがあるのではないかと、感じました。
(コントロールを重ねて、マウスUPやマウスDOWNのイベントを調べてみると、下側にあるコントロールは反応しないですよね?)
とすると、またさらに違う方法で、表現はできないのか、と思っています。
例えば、ドラッグしたときには、マウスポインタのところに画像を表示する、、とか。。。
何かいい手はないでしょうか・・・