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] [C#] Deplacer manuellement un controle panel


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2004
    Messages : 145
    Par défaut [VB.net] [C#] Deplacer manuellement un controle panel
    Salut,
    mon probleme est de pouvoir permettre au user de deplacer manuellement un cadre (un panel transparent cadré)...j'y arrive à peu près (j'ai pas encore fini mon code) avec ce bout de code
    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
     
    Private Sub cadre_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles cadre.MouseMove
            If AllowMove  Then
                Thread.Sleep(20)
                Dim newCadreLocation as New System.Drawing.Point
                newCadreLocation.X  = (e.X - oldPosMouseX) + oldCadreLocation.X
                newCadreLocation.Y  = (e.Y - oldPosMouseY) + oldCadreLocation.Y
                cadre.Location =newCadreLocation 
            End If
    End Sub
     
     
    Private Sub cadre_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles cadre.MouseDown
            oldPosMouseX = e.X
            oldPosMouseY = e.Y
            oldCadreLocation= cadre.Location
            AllowMove = True
    End Sub
     
     
    Private Sub cadre_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles cadre.MouseUp
            AllowMove = False
    End Sub
    mais le problème est que en deplacement il ya tjour une traine de ce controle qui commence du location initial du cadre au moment ou je le dépose...comme indiqué:



    Est ce que je peux regler ça par code...ou bien c'est à cause de la faiblaisse de ma carte graphique...

    Merci d'avance...

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    La technique la plus simple est d'utiliser Invalidate() sur la Form ou le conteneur du cadre déplacé.
    Voir l'aide sur Control.Invalidate()

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2004
    Messages : 145
    Par défaut
    Bon j'ai changer un tt petit peu, je ne deplace plus un panel mais un rectangle que je dessine moi même...mais le resultat est le même: on voi un cadre se deplacer sur notre image:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    Public Class Form1
        Inherits System.Windows.Forms.Form
        Dim WithEvents Picture As PictureBox
        Dim R As Rectangle
        Dim allowMove As Boolean = False
        Private oldpos As New System.Drawing.Point(0, 0)
        Private oldPosRec As New System.Drawing.Point(0, 0)
     
    #Region " Code généré par le Concepteur Windows Form "
     
        Public Sub New()
            MyBase.New()
     
            'Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
     
        End Sub
     
        'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
     
        'Requis par le Concepteur Windows Form
        Private components As System.ComponentModel.IContainer
     
        'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
        'Elle peut être modifiée en utilisant le Concepteur Windows Form.  
        'Ne la modifiez pas en utilisant l'éditeur de code.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(800, 637)
            Me.Name = "Form1"
            Me.Text = "Form1"
     
        End Sub
     
    #End Region
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Picture = New PictureBox
            Dim image As New Bitmap("c:\test\1.jpg")
            Picture.Image = image
            Picture.Size = image.Size
            Picture.Location = New System.Drawing.Point((Me.Width - Picture.Width) / 2, (Me.Height - Picture.Height) / 2)
            Me.Controls.Add(Picture)
        End Sub
        Private Sub Picture_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Picture.Paint
            Dim blackPen As New Pen(Color.Black, 2)
            R = New Rectangle(R.X, R.Y, 100, 100)
            e.Graphics.DrawRectangle(blackPen, R)
        End Sub
        Private Sub Picture_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Picture.MouseDown
            If e.X > R.X And e.X < R.X + R.Width Then
                If e.Y > R.Y And e.Y < R.Y + R.Height Then
                    Picture.Cursor = Cursors.Hand
                    oldpos.X = e.X
                    oldpos.Y = e.Y
                    oldPosRec.X = R.X
                    oldPosRec.Y = R.Y
                    allowMove = True
                End If
            End If
        End Sub
        Private Sub Picture_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Picture.MouseMove
            If allowMove Then
                R.X = e.X - (oldpos.X - oldPosRec.X)
                R.Y = e.Y - (oldpos.Y - oldPosRec.Y)
                If R.X > Picture.Width - R.Width Then
                    R.X = Picture.Width - R.Width
                End If
                If R.X < 0 Then
                    R.X = 0
                End If
                If R.Y > Picture.Height - R.Height Then
                    R.Y = Picture.Height - R.Height
                End If
                If R.Y < 0 Then
                    R.Y = 0
                End If
                Picture.Invalidate()
            End If
        End Sub
        Private Sub Picture_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Picture.MouseUp
            allowMove = False
            Picture.Cursor = Cursors.Default
        End Sub
     
        Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
            If Not Picture Is Nothing Then
                Picture.Location = New System.Drawing.Point((Me.Width-Picture.Width) / 2,(Me.Height - Picture.Height) / 2)
            End If
        End Sub
    End Class
    Voici le code, au cas ou ça peut aider...
    Merci.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    Remplace Picture.Invalidate() par Me.Invalidate()

  5. #5
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2004
    Messages : 145
    Par défaut
    Citation Envoyé par NicolasG
    Remplace Picture.Invalidate() par Me.Invalidate()
    Dans mon code, je redessine le cadre dans l'evenement Paint du picturebox, donc je doit appeler ...avec ça ne marche pas...
    Ca me suffis largement car mon cadre ne dépasse pas le picture box...
    Merci pour ton interet...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/12/2009, 23h24
  2. [VB.NET] Passer une valeur de control entre deux form
    Par TheMacleod dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/12/2005, 11h07
  3. [VB.NET] ListView, Deplacer un element
    Par lancelot69 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/01/2005, 17h37
  4. [VB.NET] Evenement par défaut sur controle personnalisé
    Par anthony70 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 31/08/2004, 16h19
  5. [VB.NET] Probleme d'affichage de controle
    Par mic56 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 09/06/2004, 15h03

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