Rendre un controle déplaçable à la souris (.net)

0/5 (5 avis)

Snippet vu 8 755 fois - Téléchargée 30 fois

Contenu du snippet

Trois Evenements à ajouter dans un contrôle, et celui-ci devient déplaçable à la souris et magnétique. Il suffit de modifier la valeur de la variable MagneticDistance pour changer la taille du magnétsme.
Je pense qu'il y a des améliorations à apporter, n'hésitez pas à me les indiquer

Source / Exemple :


Public MagneticDistance As Long = 10

Private StartMousePos As Point
Private StartControlPos As Point

Private Sub Tools_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
    StartMousePos = Me.PointToScreen(New Point(e.X, e.Y))
    StartControlPos = New Point(Me.Left, Me.Top)
End Sub

Private Sub Tools_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
    StartMousePos = Nothing
End Sub

Private Sub Tools_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
    If e.Button = MouseButtons.Left Then
        Dim NewMousePos As Point = Me.PointToScreen(New Point(e.X, e.Y))
        Dim NewLeft As Long = StartControlPos.X + NewMousePos.X - StartMousePos.X
        Dim NewTop As Long = StartControlPos.Y + NewMousePos.Y - StartMousePos.Y
        If NewLeft < MagneticDistance And (Me.Dock = DockStyle.Left Or Me.Dock = DockStyle.None) Then
            'magnetisme à gauche
            NewLeft = 0
            Me.Dock = DockStyle.Left
        ElseIf NewTop < MagneticDistance And (Me.Dock = DockStyle.Top Or Me.Dock = DockStyle.None) Then
            'magnetisme en haut
            NewTop = 0
            Me.Dock = DockStyle.Top
        ElseIf (NewTop + Me.Height) > (Me.ParentForm.Height - MagneticDistance) And (Me.Dock = DockStyle.Bottom Or Me.Dock = DockStyle.None) Then
            'magnetisme en bas
            NewTop = NewTop + Me.Height
            Me.Dock = DockStyle.Bottom
        ElseIf (NewLeft + Me.Width) > (Me.ParentForm.Width - MagneticDistance) And (Me.Dock = DockStyle.Right Or Me.Dock = DockStyle.None) Then
            'magnetisme à droite
            NewTop = NewTop + Me.Width
            Me.Dock = DockStyle.Right
        Else
            'pas magnétisé
            Me.Dock = DockStyle.None
            'il arrive que le control ne soit pas sous la souris, il faut alors le recentrer
            Dim ControlPos As Point = Me.ParentForm.PointToScreen(New Point(Me.Left, Me.Top))
            Dim MousePos As Point = Me.ParentForm.PointToClient(NewMousePos)
            If NewMousePos.X < ControlPos.X Or NewMousePos.X > (ControlPos.X + Me.Width) Then
                StartControlPos.X = StartMousePos.X - (Me.Width \ 2)
                'NewLeft = StartControlPos.X
            End If
            If NewMousePos.Y < ControlPos.Y Or NewMousePos.Y > (ControlPos.Y + Me.Height) Then
                StartControlPos.Y = StartMousePos.Y - (Me.Height \ 2)
                'NewTop = StartControlPos.Y
            End If
        End If

        Me.Left = NewLeft
        Me.Top = NewTop
    End If
End Sub

Conclusion :


Un copier-coller suffira largement à votre bonheur

A voir également

Ajouter un commentaire

Commentaires

cs_Warny
Messages postés
478
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015
-
Vous trouverez maintenant un projet plus complet avec zip et deux classes ici
http://www.vbfrance.com/code.aspx?ID=17715
cs_yous
Messages postés
136
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 avril 2009
-
Terrible !
Merci
Cyberdevil
Messages postés
483
Date d'inscription
mardi 10 juillet 2001
Statut
Membre
Dernière intervention
12 juillet 2006
-
ça a lair super, on attend la fenetre magnétique !
Tiens nous au courant !

++
cs_Warny
Messages postés
478
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015
-
le zip viendra, je suis en train de programmer une form magnetique qui pourrat se comporter come les toolbars d'office ou les fenêtres de projets de visual studio.
cs_Urgo
Messages postés
780
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 avril 2009
1 -
Met un zip stp
J'ai la flemme ^^
9/10

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.