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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 157 fois - Téléchargée 32 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 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
10 nov. 2003 à 09:50
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 1
4 nov. 2003 à 09:39
Terrible !
Merci
Cyberdevil Messages postés 483 Date d'inscription mardi 10 juillet 2001 Statut Membre Dernière intervention 12 juillet 2006
1 nov. 2003 à 20:34
ça a lair super, on attend la fenetre magnétique !
Tiens nous au courant !

++
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
1 nov. 2003 à 12:00
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
1 nov. 2003 à 00:25
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.