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

Résolu
cs_Stargirlfr Messages postés 25 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 8 avril 2009 - 7 avril 2009 à 22:49
cs_Stargirlfr Messages postés 25 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 8 avril 2009 - 8 avril 2009 à 19:26
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

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 48
8 avril 2009 à 19:11
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())) ;
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 48
8 avril 2009 à 11:36
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())) ;
0
cs_Stargirlfr Messages postés 25 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 8 avril 2009
8 avril 2009 à 11:47
OK, merci, je vais essayer ça !
Encore merci pour ta réponse
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 avril 2009 à 14:22
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 .
0

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

Posez votre question
cs_Stargirlfr Messages postés 25 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 8 avril 2009
8 avril 2009 à 18:56
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 !
0
cs_Stargirlfr Messages postés 25 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 8 avril 2009
8 avril 2009 à 19:26
PARFAIT !
Merci infiniment !!!
0
Rejoignez-nous