DragOver method [Résolu]

cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 23 sept. 2011 à 10:39 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 24 sept. 2011 à 23:43
3
Merci
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 ?

Merci cs_ShayW 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cs_ShayW
Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 sept. 2011 à 07:31
3
Merci
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

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 23 sept. 2011 à 17:05
0
Merci
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 23 sept. 2011 à 17:19
0
Merci
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
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.