IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.NET] Limiter le déplacement d'un objet [Débutant]


Sujet :

Windows Forms

  1. #1
    Membre actif
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Points : 226
    Points
    226
    Par défaut [VB.NET] Limiter le déplacement d'un objet
    Bonjour tout le monde,

    j'ai besoin de votre aide pour un petit problème qui me casse la tête depuis des heures , je vous explique au moindre détail : j'ai un Bouton que je déplace avec l'événement MouseDown et MouseMove à l'intérieur d'un Panel et j'ai beau essayé de limiter son déplacement pour qu'il ne puisse plus sortir des limites du Panel mais j'y arrive pas, ou plutôt je bloque à un certain point, voici le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Public Class Form1
     
        Dim M As Point
     
        Private Sub Button1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
     
            If e.Button = Windows.Forms.MouseButtons.Left Then
     
                M = e.Location
     
            End If
     
        End Sub
     
        Private Sub Button1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseMove
     
            If ((Button1.Location.Y < (0)) Or ((Button1.Location.Y > (0)) Or (Button1.Location.X < (0)) Or (Button1.Location.X > (113))) And (e.Button = Windows.Forms.MouseButtons.Left)) Then
     
                Button1.Location += New Point(0, 0)
     
     
            Else
     
                If (e.Button = Windows.Forms.MouseButtons.Left) Then
     
                    Button1.Location += e.Location - M
     
                End If
     
            End If
     
        End Sub
     
    End Class
    Merci pour votre aide et à bientôt !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonsoir,
    voici une première approche avec la propriété Clip du curseur dont on limite le déplacement à la surface du panel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        Dim M As Point
        Private Sub Button2_MouseDown(sender As Object, e As MouseEventArgs) Handles Button2.MouseDown
     
            M.X = MousePosition.X - DirectCast(sender, Button).Left
            M.Y = MousePosition.Y - DirectCast(sender, Button).Top
     
        End Sub
     
        Private Sub Button2_MouseMove(sender As Object, e As MouseEventArgs) Handles Button2.MouseMove
     
            If e.Button = MouseButtons.Left Then
                Cursor.Clip = Me.Panel1.RectangleToScreen(Me.Panel1.ClientRectangle)
     
                DirectCast(sender, Button).Left = MousePosition.X - M.X
                DirectCast(sender, Button).Top = MousePosition.Y - M.Y
            Else
                Cursor.Clip = Nothing
            End If
        End Sub

  3. #3
    Membre actif
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Points : 226
    Points
    226
    Par défaut
    Salut chrismonoye,

    Je n'ai pas bien compris ton exemple, c'est en quelque sorte ce que je cherche à faire seulement je dois préciser les limites du bouton parce que là il limite le déplacement du curseur (une fois le MouseDown et MouseMove enclanchées) ! Merci de bien vouloir m'aider

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonsoir,
    pourquoi utiliser le curseur ?.
    Dans ce contexte, parce qu’il est intimement lié au Bouton dans ses déplacements et qu'il offre des propriétés .Net Framework, justement optimisées pour les déplacements.
    Ensuite pour que le Bouton reste entièrement dans le Panel, il suffit de restreindre le champ d'action du Curseur, qui correspond pour le moment au rectangle de la zone cliente du Panel.
    Il faut donc lui appliquer les correctifs suivants :
    - Déplacer son origine à l'intérieur du Panel des valeurs X et Y de la Location du point réactif du Curseur sur le Bouton.
    - Réduire ses dimensions des valeurs de celles du Bouton.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                Dim rect As New Rectangle
                rect = Me.Panel1.ClientRectangle
                rect.X += ptC.X
                rect.Y += ptC.Y
                rect.Width -= Button1.Width
                rect.Height -= Button1.Height
    Ce qui donne globalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
        Dim ptM As Point
        Dim ptC As Point
     
        Private Sub Button1_MouseDown(sender As Object, e As MouseEventArgs) Handles Button1.MouseDown
     
            ptM.X = MousePosition.X - DirectCast(sender, Button).Left
            ptM.Y = MousePosition.Y - DirectCast(sender, Button).Top
     
            ptC = e.Location
     
        End Sub
     
        Private Sub Button1_MouseMove(sender As Object, e As MouseEventArgs) Handles Button1.MouseMove
     
            If e.Button = MouseButtons.Left Then
                Dim rect As New Rectangle
                rect = Me.Panel1.ClientRectangle
                rect.X += ptC.X
                rect.Y += ptC.Y
                rect.Width -= Button1.Width
                rect.Height -= Button1.Height
     
                Cursor.Clip = Me.Panel1.RectangleToScreen(rect)
     
                DirectCast(sender, Button).Left = MousePosition.X - ptM.X
                DirectCast(sender, Button).Top = MousePosition.Y - ptM.Y
            Else
                Cursor.Clip = Nothing
            End If
        End Sub

  5. #5
    Membre actif
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Points : 226
    Points
    226
    Par défaut
    ça a fonctionné ! Merci "chrismonoye" ! c'est exactement ce que je cherchais je vais essayer de comprendre le fonctionnement du code ! un grand merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Limiter le déplacement d'objet à une feuille
    Par grand_alex dans le forum Visio
    Réponses: 1
    Dernier message: 16/06/2008, 10h16
  2. Limite de déplacement d'objet
    Par tanith dans le forum Ogre
    Réponses: 1
    Dernier message: 29/01/2008, 11h24
  3. Limiter les déplacement de la souris a la fenetre
    Par Mathieu.J dans le forum OpenGL
    Réponses: 22
    Dernier message: 11/06/2004, 12h55
  4. Réponses: 10
    Dernier message: 01/12/2003, 23h17
  5. Limiter le déplacement de la souris
    Par el_bouleto dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/11/2002, 23h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo