2009-09-11 3 views
0

J'ai testé le code dans cette page Web qui est pour déplacer un picturebox dans l'exécution: http://www.davidsuarez.es/2007/11/mover-y-soltar-controles-con-drag-drop-visual-basic/Comment est-ce que je peux éviter qu'une imagebox disparaisse quand je bouge et la place sur une autre image en cours d'exécution?

J'ai créé un formulaire avec deux pictureboxex: Picture1 et Picture2 (la page est en espagnol, donc je copier le code modifié ici):

Dim DY As Single 
Dim DX As Single 
Dim Flag_MouseMove As Boolean 

Private Sub CancelarDrag(Source As Control) 
Source.Visible = True 
Source.Drag vbCancel 
End Sub 

Private Sub FinalizarDrag(Source As Control, Button As Integer) 
If Button = vbLeftButton Then 
Source.Visible = True 
Source.ZOrder 
Source.Drag vbEndDrag 
End If 
End Sub 

Private Sub IniciarDrag(Source As Control, Button As Integer, X As Single, Y As Single) 
If Button = vbLeftButton Then 
DX = X 
DY = Y 

Source.Drag vbBeginDrag 
Source.Visible = False 
Source.Drag 
End If 
End Sub 

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single) 
Dim ejeY, ejeX As Single 

ejeX = X - 60 
ejeY = Y - 60 
ejeX = ejeX - DX 
ejeY = ejeY - DY 

Source.Visible = True 
Source.Move ejeX, ejeY 
Source.Drag vbEndDrag 
Source.ZOrder 
End Sub 

Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single) 
CancelarDrag Picture1 
End Sub 

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 
IniciarDrag Picture1, Button, X, Y 
Flag_MouseMove = True 
End Sub 

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 
FinalizarDrag Picture1, Button 
Flag_MouseMove = False 
End Sub 

Private Sub Picture2_DragDrop(Source As Control, X As Single, Y As Single) 
CancelarDrag Picture2 
End Sub 

Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 
IniciarDrag Picture2, Button, X, Y 
Flag_MouseMove = True 
End Sub 

Private Sub Picture2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 
FinalizarDrag Picture2, Button 
Flag_MouseMove = False 
End Sub 

le code fonctionne bien, sauf si le curseur se trouve dans la zone de l'autre picturebox et je laisse tomber mon picturebox mobile là. L'image en mouvement disparaît et ne revient jamais tant que je n'ai pas rechargé le formulaire. Comment puis-je éviter cette "imagebox disparaissant" ?.

Répondre

0

Je l'ai eu! Le problème est dans la fonction "IniciarDrag". Le contrôle de la source doit toujours être visible, cela résout tous les problèmes (comme essayer de placer le contrôle en dehors du formulaire!):

Source.Visible = True