Déplacer picturebox dans form

tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011 - 17 déc. 2010 à 00:41
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 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.

11 réponses

tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011
18 déc. 2010 à 21:22
Personne pour m'aider ?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
18 déc. 2010 à 22:06
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
0
tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011
18 déc. 2010 à 22:21
Bonjour Le Pivert, en faite je veux qu'un mouvement de translation donc pas de "y".

Merci pour ton aide
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 déc. 2010 à 17:14
salut,

applique le doublebuffering à ta form

++

[hr]
0

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

Posez votre question
tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011
19 déc. 2010 à 21:49
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 déc. 2010 à 21:59
... 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
0
tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011
19 déc. 2010 à 22:17
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 déc. 2010 à 22:50
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?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 déc. 2010 à 22:57
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
0
tuyn00txa Messages postés 27 Date d'inscription samedi 8 janvier 2011 Statut Membre Dernière intervention 12 juin 2011
19 déc. 2010 à 23:21
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
20 déc. 2010 à 10:08
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
0
Rejoignez-nous