DragOver method

Résolu
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 23 sept. 2011 à 10:39
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 25 sept. 2011 à 07:31
Bonjour

Essayant d'appliquer la methode dragover pour
faire deplacer un picturebox sur la form
voila un code que j'ai ecrit

Private lastmouselocation As New Point
Private WithEvents box As New PictureBox
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim pt(3) As Point
        pt(0) = New Point(0, 0)
        pt(1) = New Point(side / 2, side / 2)
        pt(2) = New Point(0, side)
        pt(3) = New Point(0, 0)
        Dim region(pt.Length - 1) As Byte
        For x = 0 To pt.Length - 1
            region(x) = CType(PathPointType.Line, Byte)
        Next
        Dim path As New GraphicsPath(pt, region)
        Me.Controls.Add(box)
        box.Region = New Region(path)
        box.Location = New Point(20, 20)
        box.BackColor = Color.Blue
        box.Visible = True
        box.AllowDrop = True
 End Sub

Private Sub box_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles box.DragOver
        Dim deltax, deltay As Integer
        If e.X - lastmouselocation.X > 0 Then
            deltax = 1
        ElseIf e.X - lastmouselocation.X < 0 Then
            deltax = -1
        Else
            deltax = 0
        End If

        If e.Y - lastmouselocation.Y > 0 Then
            deltay = 1
        ElseIf e.Y - lastmouselocation.Y < 0 Then
            deltay = -1
        Else
            deltay = 0
        End If

        DirectCast(sender, PictureBox).Location = New Point(DirectCast(sender, PictureBox).Location.X + deltax, DirectCast(sender, PictureBox).Location.Y + deltay)

    End Sub

    
    Private Sub box_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles box.MouseDown
        DirectCast(sender, PictureBox).DoDragDrop(DirectCast(sender, PictureBox), DragDropEffects.Move)
        lastmouselocation = DirectCast(sender, PictureBox).PointToScreen(e.Location)
End Sub


le problème ce n'est pas commode si on bouge
trop vite la souris elle sort en dehors du triangle et donc toujours y remettre le curseur

Merci d'avance

4 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
24 sept. 2011 à 23:43
Bonjour Ucfoutu

Je viens de trouver la solution
Oui ce n'est pas la méthode drag over mais bien
mouse move
j'ai trouvé un code en vb6
http://www.bigresource.com/Tracker/Track-vb-10oXnlCmjX/
code vb6
Private Type TMousePos
   X As Single
   Y As Single
End Type

Private m_tCurPos As TMousePos

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
   m_tCurPos.X = X
   m_tCurPos.Y = Y
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
   Dim tNew As TMousePos
   If Button = vbLeftButton Then
      With tNew
      .X = (X + Picture1.Left) - m_tCurPos.X
      .Y = (Y + Picture1.Top) - m_tCurPos.Y
      Call Picture1.Move(.X, .Y)
      End With
   End If
End Sub


et l'ai adapté en vb.net
à quoi sert le dragover si on obtient le meme
résultat avec mousemove ?
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 sept. 2011 à 07:31
A pouvoir passer d'un container à l'autre

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 sept. 2011 à 17:05
Bonjour,ShayW

Je ne vais pas te répondre par du code (je ne suis pas VB.Nettiste), mais par la description d'un mécanisme que j'ai utilisé à l'époque (il y a longtemps) sous VB6 pour ce type de picturebox. C'était pire avec les miennes car elles étaient en plus "transparentes" en tout ou parties (composées de périmètres de différentes formes à l'intérieur desquels c'était transparent, et chaque picturebox n'était réellement cliquable que sur les parties non transparentes).
J'avais mis au dessus de chacune d'elles un label normal (rectangulaire) complètement transparent et recouvrant la totalité de la picturebox. Et c'est ce label que j'accrochais et déplaçait au Mouse_move (pas par un dragover), en imposant à la picturebox de suivre le même déplacement que celui du label.
Toutes les autres démarches que j'avais tentées (accrocher pour la déplacer la picturebox) aboutissaient à des résultats en effet assez désastreux et quelquefois de surcroît très lents.
Voilà, si cela peut t'aider à rechercher un mécanisme plus fluide.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 sept. 2011 à 17:19
Je viens de retrouver ma démo dans mes tiroirs.
Elle est- bien évidemment en VB6
Si tu le souhaites, je peux te mettre ici les parties qui t'intéressent, à savoir tout ce qui touche au déplacement de ces pictureboxes "spéciales", après les avoir créées. (donc pas leur création à proprement parler)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous