Déplacement d'une form par un glisser d'un composant [Résolu]

Signaler
-
 Avé moi -
Bonjour,

Tout est dans la question : Je voudrais, qu'en bougeant un objet (par un clic maintenu), la form bouge avec. Est-ce possible ?


La raison de cela, c'est que pour avoir une form plus jolie, j'ai mis la valeur "none" a "formborderstyle" et j'ai mis plein d'image (Bouton fermer, minimiser)

J'aimerai le faire avec un panel, mais si ce n'est pas possible, par une image.

Merci à tout ceux qui vont m'aider

(Si Banana32 passe dans le coin : C'est pour le même programme que ma question précédente)

Une petite image pour illustrer (l'image est longue a charger):


Bien sur le panel ne s’arrête pas au petit trait blanc (qui ne sont que des ligne)

7 réponses


Salut,

Tu peux déplacer ton formulaire en te servant des événements MouseDown et MouseMove de n'importe quel contrôle. On utilise Point.Add et Point.Subtract.

Option Strict On
Public Class Form1
    Dim ptO As Point
    Private Sub Panel1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            'mémorisation de la position du clic gauche
            ptO = Point.Add( _
                  New Point(e.X + SystemInformation.FrameBorderSize.Width, _
                            e.Y + SystemInformation.FrameBorderSize.Height + SystemInformation.CaptionHeight), _
                  New Size(DirectCast(sender, Panel).Location))
        End If
    End Sub

    Private Sub Panel1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
        If e.Button = Windows.Forms.MouseButtons.Left Then
            'déplacement du formulaire en se servant de la position du curseur
            Me.Location = Point.Subtract(Cursor.Position, New Size(ptO))
        End If
    End Sub
End Class

D'ailleurs tu peux tout virer, la ligne devient :
ptO = Point.Add(New Point(e.X, e.Y), New Size(DirectCast(sender, Panel).Location))
 
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
6
Bonjour,

C'est la form qu'on déplace généralement, voici le code :

Option Explicit On
Public Class Form1
  Private dernierpoint As Point

  Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
    If e.Button Windows.Forms.MouseButtons.Left Then dernierpoint New Point(e.X, e.Y)
  End Sub

  Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
    If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub
    Left = Left + (e.X - dernierpoint.X)
    Top = Top + (e.Y - dernierpoint.Y)
  End Sub

End Class


Cordialement, Joe.
Et comme par magie ça marche. Merci ehjoe
Merci. Effectivement ce code code marche.

Je vais être plus précis : En déplaçant le panel, la form bouge en même temps. En sachant que le bord haut-gauche du panel a une position 0; 0 par rapport a la form.


Ce n'est pas possible. En fait, cela serait une sorte d'imitation de la barre bleu d'une form.
Ca marche mais il y a un petit problème, une fois qu'on maintient le clic et qu'on bouge la souris, la form remonte d'un 20-30ène de pixel, est-ce normal ?

Si formborderstyle est sur None, sors + SystemInformation.CaptionHeight
Cela fonctionne à la perfection. Merci à toi Banana32

Toujours aussi efficace et rapide