Déplacer picturebox dans form

Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
- - Dernière réponse : cs_Le Pivert
Messages postés
6435
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 décembre 2019
- 20 déc. 2010 à 10:08
Bonjour,

Voici le code que j'utilise pour déplacer un picturebox dans une fenêtre :

    Dim x As Integer
    Dim y As Integer

    Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown, PictureBox1.MouseDown, PictureBox2.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            x = e.X
        End If
    End Sub

    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove, PictureBox1.MouseMove, PictureBox2.MouseMove
        If e.Button = Windows.Forms.MouseButtons.Left Then
            Panel1.Left += (e.X - x)
        End If
    End Sub


Ce code marche bien, seulement il y a des scintillements lors du déplacement (fond noir), on ne voit pas non plus tous les pixels. Je recherche un moyen pour rendre le déplacement beaucoup plus fluide.
Etant forcé à travailler en vb.net , comment je pourrais faire la même chose mais avec une autre méthode ?

Merci pour vos réponses.
Afficher la suite 

11 réponses

Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
0
Merci
Personne pour m'aider ?
Commenter la réponse de tuyn00txa
Messages postés
6435
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 décembre 2019
91
0
Merci
Bonjour,
Essaie ceci:

Public Class Form1
    Dim x As Integer
    Dim y As Integer

    Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            x = e.X
            y = e.Y
        End If
    End Sub

    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        If e.Button = Windows.Forms.MouseButtons.Left Then
            PictureBox1.Left += (e.X - x)
            PictureBox1.Top += (e.Y - y)
        End If
    End Sub
End Class



@+ Le Pivert
Commenter la réponse de cs_Le Pivert
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
0
Merci
Bonjour Le Pivert, en faite je veux qu'un mouvement de translation donc pas de "y".

Merci pour ton aide
Commenter la réponse de tuyn00txa
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
salut,

applique le doublebuffering à ta form

++

[hr]
Commenter la réponse de PCPT
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
0
Merci
salut PCPT, j'ai bien changé le paramètre doublebuffering à "true" mais le mouvement est toujours aussi lent... et on voit toujours le scintillement.


Merci pour ton aide
Commenter la réponse de tuyn00txa
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
... sauf que ta question est "déplacer un picturebox dans une fenêtre" alors que ton code touche au panel....

te reste à voir si tu as donc bien appliqué les modifs au bon élément
Commenter la réponse de PCPT
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
0
Merci
J'ai essayé avec seulement "picturebox1" mais ça ne marche pas. J'ai aussi rajouté ces 3 lignes de codes au form1_load.

        Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        Me.SetStyle(ControlStyles.UserPaint, True)
        Me.SetStyle(ControlStyles.DoubleBuffer, True)



Voici mon code que j'essaye :

    Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown ', PictureBox2.MouseDown
        If e.Button = MouseButtons.Left Then
            x = e.X
        End If
    End Sub

    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove ', PictureBox2.MouseMove
        If e.Button = MouseButtons.Left Then
            PictureBox1.Left += (e.X - x)
        End If
    End Sub
Commenter la réponse de tuyn00txa
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
qu'on soit sûr de bien parler de la même chose (l'effet de scintillement)

lance ton projet, réduit VS et toutes tes fenêtre sauf celle de ton application, que tu redimentionnes plus ou moins à la même taille que ta picturebox

enfin déplace cette fenêtre (par la barre de titre) comme tu déplaces ta picturebox actuellement

y a t'il ce même effet de scintillement sur le bureau?
Commenter la réponse de PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
ou.... autre test
ouvre notepad "en petit" au dessus de ta fenêtre, que tu déplaces...
ta form scintille aussi?

dans ce cas... on peut rien faire
Commenter la réponse de PCPT
Messages postés
27
Date d'inscription
samedi 8 janvier 2011
Statut
Membre
Dernière intervention
12 juin 2011
0
Merci
désolé PCPT, j'ai mal expliqué mon problème, en faite quand je déplace ma picturebox1 dans ma form, le déplacement de la picturebox1 est saccadé (1er problème) et le fond de la form1 bascule entre le "backcolor" et l'image arrière plan. (2e problème)

Lorsque j'essaye de mettre "backcolor" transparent pour qu'on le voille pas, ça me met "Valeur de propriété non valide".

Encore merci pour ton aide.
Commenter la réponse de tuyn00txa
Messages postés
6435
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 décembre 2019
91
0
Merci
tuyn00txa,
Je veux bien t'envoyer mon projet si tu me communiques ton e-mail sur MP. Comme cela tu pourras voir si cela vient de ta machine.


@+Le Pivert
Commenter la réponse de cs_Le Pivert