[C#] Déplacer une picturebox (incrémenter x) [Résolu]

Signaler
Messages postés
25
Date d'inscription
mardi 13 mars 2007
Statut
Membre
Dernière intervention
8 avril 2009
-
Messages postés
25
Date d'inscription
mardi 13 mars 2007
Statut
Membre
Dernière intervention
8 avril 2009
-
Bonsoir à tous,

J'ai une question toute bête, mais impossible de trouver ma réponse.
Je souhaiterais déplacer une picturebox sur une ligne (incrémenter juste son abscisse) jusqu'à un certain point.

Comment dois-je utiliser pictureBox.Locate.X ?

Merci par avance !

6 réponses

Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
48
public MaForm()
{
    InitializeComponents();
    monTimer.Intervalle = 40; //40ms entre les traitements (ce qui te fait du 25 traitements à la secondes)

    monTimer.Tick += new EventHandler(monTimer_Tick);
    // ...
}

private void go_Click(object sender, EventArgs e)
{
    InitPositions(); // là tu mets une méthode qui remet les picturebox à leur position initiale
    monTimer.Start(); // Tu lances le timer
}

private void monTimer_Tick(object sender, EventArgs e)
{
    // Tu entreras dans cette méthode toutes les 40 millisecondes une fois que tu as fait "monTimer.Start();"
    // Donc tu peux t'amuser à faire tous les déplacements ici
    // Et quand il est temps d'arrêter (que la picturebox est sortie de la fenêtre par exemple)
    // monTimer.Stop(); (J'avais écris monTimer.Enabled = false; mais c'est vrai que c'est plus propre comme ça
}

Krimog :
while (!(succeed = try())) ;
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
48
Salut.

Je crois que Location.X est en lecture seule.
Tu peux faire pictureBox.Location = new Point(nouveauX, pictureBox.Location.Y);

Si c'est pour animation, utilise un Timer, pour que ta fonction ne soit pas bloquante et qu'ainsi ta fenêtre se rafraichisse.
(Choisis l'intervalle et connecte une fonction à l'événement Tick)

Tu devrais avoir un truc du genre :
private void monTimer_Tick(object sender, EventArgs e)
{
    pictureBox.Location = new Point(pictureBox.Location.X + 10, pictureBox.Location.Y);
    if (pictureBox.Location.X >= xMax)
    {
        monTimer.Enabled = false;
    }
}

Krimog :
while (!(succeed = try())) ;
Messages postés
25
Date d'inscription
mardi 13 mars 2007
Statut
Membre
Dernière intervention
8 avril 2009

OK, merci, je vais essayer ça !
Encore merci pour ta réponse
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Salut, petite précision, PictureBox.Location.X n'est pas en lecture seule, mais Point est un type valeur il n'est donc pas possible d'utiliser cette notation.. D'ou l utilisation du "new" comme dans l'exemple de Krimog ou alors la propriété PictureBox.Left .
Messages postés
25
Date d'inscription
mardi 13 mars 2007
Statut
Membre
Dernière intervention
8 avril 2009

Re-bonjour !

J'ai effectivement adapté et testé ce code.
Il fonctionne mais... je ne comprends pas bien comment m'en servir.

Je voudrais que, lorsque l'on clique sur un bouton, cela déplace les picturebox.
Voilà en gros ce que j'ai (j'ai 3 pictureBox qui sont visibles ou pas en fonction de la position de la 1ère),
mais... Comment lancer le timer et dire aux picturebox de se déplacer avec le temps ?

// Ma classe Timer
private void timer1_Tick(object sender, EventArgs e)
        {
            laser1.Location = new Point(laser1.Location.X + 10, laser1.Location.Y);
            laser12.Location = new Point(laser1.Location.X + 10, laser1.Location.Y);
            laser13.Location = new Point(laser1.Location.X + 10, laser1.Location.Y);

            if ((laser1.Location.X >= 125) && (laser1.Location.X <= 460))
            {
                monTimer.Enabled = false;
                laser1.Visible = true;
            }

            else if ((laser1.Location.X >= 461) && (laser1.Location.X <= 630))
            {
                laser1.Visible = false;
                laser12.Visible = true;
            }

            else if ((laser1.Location.X >= 631) && (laser1.Location.X <= 710))
            {
                laser12.Visible = false;
                laser13.Visible = true;
            }

            else if ((laser1.Location.X >= 711) && (laser1.Location.X <= 735))
            {
                laser13.Visible = false;
                laser1.Location = new Point(125, laser1.Location.Y);
            }
        }

        // Mon bouton qui démarre le timer pour commencer le déplacement des picturebox
        private void go_Click(object sender, EventArgs e)
        {
            monTimer.Start();
            timer1_Tick (?????);
        }

ENCORE merci pour votre aide !
Messages postés
25
Date d'inscription
mardi 13 mars 2007
Statut
Membre
Dernière intervention
8 avril 2009

PARFAIT !
Merci infiniment !!!