《 ドラッグ&ドロップ処理例 》 ※異なるフォーム間もOK
ドラッグ&ドロップ処理では、3つのマウスイベントを利用します。
ドラッグ開始時は、開始されたコントロールに「MouseDown」イベントが発生
ドロップ時は、開始されたコントロールに「MouseUp」イベントが発生します。
ここで注意。マウスが放された時、マウスポインタが開始したコントロール上になくても
開始コントロールにMouseUpイベントが発生するということです。
したがって、ドロップ処理をする唯一のイベントは、MouseMoveしかありません。
マウスが開放された時、必ず「MouseUp」⇒「MouseMove」と連続してイベントが発生することをうまく利用します。
==============================================================================
’どのフォーム間もドラッグ&ドロップ出来るように標準モジュールへパブリック変数を用意
Public DDBUF1 'コピーバッファ
Public DDBUF2 'コピーバッファ
Public DDBUF3 'コピーバッファ
Public DDSTATUS 'マウスの状態フラグ 0…何もしない 1…ドロップ処理をさせる
Public DDCONTROL '開始コントロールの名前保存(自分自身へのDDをさせないため)
==============================================================================
'@マウスボタンクリック時(ドラッグ開始場所の情報をコピーバッファ変数に格納)
Private Sub B1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
DDCONTROL = Me.Name & "/" &
Me.ActiveControl.Name 'フォーム名と自分自身のコントロール名を保存
DDBUF1 = 'コピー情報
DDBUF2 = 'コピー情報
DDBUF3 = 'コピー情報
' :
End Sub
==============================================================================
'Aマウスボタン開放時(ボタン開放時はフラグを立てるだけ)
Private Sub B1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As
Single)
DDSTATUS= 1
End Sub
==============================================================================
'Bマウスボタン移動時(ボタン開放のフラグがある場合、ドロップ処理をする)
Private Sub B2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
If DDSTATUS<> 1 Then Exit Sub Else
DDSTATUS= 0
If DDCONTROL = Me.Name & "/" &
Me.ActiveControl.Name Then Exit Sub
'自分自身へのDDなら処理しない
’【ドロップ処理】
’ :
’ :
’ :
End Sub
==============================================================================
'C詳細エリア等マウスボタン移動時(無関係な場所で開放されたらDDをキャンセルさせるため)
Private Sub 詳細_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
DDSTATUS= 0
End Sub
==============================================================================