Déplacement d'une form par un glisser d'un composant

Résolu
tictac08 - 25 mai 2013 à 11:30
 Avé moi - 11 sept. 2015 à 01:31
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

Utilisateur anonyme
25 mai 2013 à 16:21
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
1
Utilisateur anonyme
25 mai 2013 à 17:57
D'ailleurs tu peux tout virer, la ligne devient :
ptO = Point.Add(New Point(e.X, e.Y), New Size(DirectCast(sender, Panel).Location))
 
1
ehjoe
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
6
25 mai 2013 à 12:05
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.
0
Et comme par magie ça marche. Merci ehjoe
0
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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 ?
0
Utilisateur anonyme
25 mai 2013 à 17:54
Si formborderstyle est sur None, sors + SystemInformation.CaptionHeight
0
Cela fonctionne à la perfection. Merci à toi Banana32

Toujours aussi efficace et rapide
0