none
deplacer un objet avec la souris vb2013 RRS feed

  • Question

  • bonjour

     je voudrais savoir comment accrocher un objet par exemple un label le déplacer et lorsqu'il rencontre un autre objet un label par exemple  il puisse être repositionner dans le form en utilisant New point (10,20) par exemple

     merci e m’aider  et aussi a trouver un tuto qui précise tout cela

     je voudrais savoir  aussi si je peux utiliser dragenter ?

    dimanche 29 mai 2016 08:46

Réponses

  • Utiliser les Events Mouse...:

     Public Label1Initial As Point
        Public Label1Location As Point
        Public DeplacerLabel1 As Boolean = False
    
    
        Private Sub Label1_MouseDown(sender As Object, e As MouseEventArgs) Handles Label1.MouseDown
            DeplacerLabel1 = True
            Label1Location = e.Location
    
        End Sub
    
        Private Sub Label1_MouseMove(sender As Object, e As MouseEventArgs) Handles Label1.MouseMove
            If DeplacerLabel1 = True Then
                'Tester si collision: les contrôles sont des rectangles
                If TestCollision(Label1, Label2) = False Then
                    'label1 peut bouger
                    Label1.Location = New Point(Label1.Location + e.Location - Label1Location)
                End If
    
                Me.Refresh()
            End If
        End Sub
    
        Private Sub Label1_MouseUp(sender As Object, e As MouseEventArgs) Handles Label1.MouseUp
            DeplacerLabel1 = False
        End Sub
    
        Private Function TestCollision(ByRef unLabel As Label, ByRef Cible As Label) As Boolean
            TestCollision = False
            Dim RectLabel1 As New Rectangle(unLabel.Location, unLabel.Size)
            Dim RectCible As New Rectangle(Cible.Location, Cible.Size)
    
            If (RectLabel1.Left < RectCible.Right And RectLabel1.Right > RectCible.Left And RectLabel1.Top < RectCible.Bottom And RectLabel1.Bottom > RectCible.Top) Then
                TestCollision = True
            Else
                TestCollision = False
            End If
    
        End Function

    Je vous laisse travailler sur la logique de la collision que vous recherchez....

    • Marqué comme réponse SIMONGEORGES dimanche 29 mai 2016 10:59
    dimanche 29 mai 2016 10:08
  • Le bouton "Reset"? cela réinitialise la position à la position de départ:

    Public Label1Initial As Point
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Label1Initial = Label1.Location
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Label1.Location = Label1Initial
        End Sub



    dimanche 29 mai 2016 15:44

Toutes les réponses

  • Utiliser les Events Mouse...:

     Public Label1Initial As Point
        Public Label1Location As Point
        Public DeplacerLabel1 As Boolean = False
    
    
        Private Sub Label1_MouseDown(sender As Object, e As MouseEventArgs) Handles Label1.MouseDown
            DeplacerLabel1 = True
            Label1Location = e.Location
    
        End Sub
    
        Private Sub Label1_MouseMove(sender As Object, e As MouseEventArgs) Handles Label1.MouseMove
            If DeplacerLabel1 = True Then
                'Tester si collision: les contrôles sont des rectangles
                If TestCollision(Label1, Label2) = False Then
                    'label1 peut bouger
                    Label1.Location = New Point(Label1.Location + e.Location - Label1Location)
                End If
    
                Me.Refresh()
            End If
        End Sub
    
        Private Sub Label1_MouseUp(sender As Object, e As MouseEventArgs) Handles Label1.MouseUp
            DeplacerLabel1 = False
        End Sub
    
        Private Function TestCollision(ByRef unLabel As Label, ByRef Cible As Label) As Boolean
            TestCollision = False
            Dim RectLabel1 As New Rectangle(unLabel.Location, unLabel.Size)
            Dim RectCible As New Rectangle(Cible.Location, Cible.Size)
    
            If (RectLabel1.Left < RectCible.Right And RectLabel1.Right > RectCible.Left And RectLabel1.Top < RectCible.Bottom And RectLabel1.Bottom > RectCible.Top) Then
                TestCollision = True
            Else
                TestCollision = False
            End If
    
        End Function

    Je vous laisse travailler sur la logique de la collision que vous recherchez....

    • Marqué comme réponse SIMONGEORGES dimanche 29 mai 2016 10:59
    dimanche 29 mai 2016 10:08
  • Il y a aussi la fonction IntersectsWith à voir:

    Private Function TestCollision(ByRef unLabel As Label, ByRef Cible As Label) As Boolean
            TestCollision = False
            Dim RectLabel1 As New Rectangle(unLabel.Location, unLabel.Size)
            Dim RectCible As New Rectangle(Cible.Location, Cible.Size)
    
            'If (RectLabel1.Left < RectCible.Right And RectLabel1.Right > RectCible.Left And RectLabel1.Top < RectCible.Bottom And RectLabel1.Bottom > RectCible.Top) Then
            '    TestCollision = True
            'Else
            '    TestCollision = False
            'End If
            If RectLabel1.IntersectsWith(RectCible) = True Then
                TestCollision = True
            Else
                TestCollision = False
            End If
        End Function

    dimanche 29 mai 2016 11:11
  • merci beaucoup

    je viens de  le tester cela fonctionne bien par contre je ne comprends pas  comment est fiat le code du bouton poussoir  pouvez vous m'expliquer merci d'avance

    dimanche 29 mai 2016 13:19
  • Le bouton "Reset"? cela réinitialise la position à la position de départ:

    Public Label1Initial As Point
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Label1Initial = Label1.Location
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Label1.Location = Label1Initial
        End Sub



    dimanche 29 mai 2016 15:44
  • un grand merci
    dimanche 29 mai 2016 21:10