Creo que es mas simple aun..
Existe una forma mas sencilla de mover un control usando la API SendMessage:
Supongamos que quiero mover el Picture2 a mmm, algun lado XD
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" ( _
ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Sub ReleaseCapture Lib "User32" ()
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2
Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Call ReleaseCapture
If Button = vbLeftButton Then
Call SendMessage(Picture2.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub
Con eso mueves el Picture2 a cualquier lado.., {al hacerle click y moverlo}
Ahora para que puedas arrastrar el Picture2 y otro control lo acepte debes de establecer su propiedad DragMode a Automático..
Supongamos que queremos arrastrar un Picture2 a un control de Picture1(0) {Picture1 sera una Matriz}
El Picture1 tiene un evento que se llama cada vez que se arrastra un 'algo' encima de este, el evento se llama DragDrop:
Private Sub Picture1_DragDrop(Index As Integer, Source As Control, X As Single, Y As Single)
MsgBox Index
End Sub
Si juntas todo el code.., al arrastrar el Picture2 a un control PIcture1 {Mas preciso a una Matriz de Picture1} te mostrara el Index del control al que haz arrastrado el picture2
Ahí ya tienes una idea, a partir de ahí es sencillo
SaluDOS!!!