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

cs_Stargirlfr 25 Messages postés mardi 13 mars 2007Date d'inscription 8 avril 2009 Dernière intervention - 7 avril 2009 à 22:49 - Dernière réponse : cs_Stargirlfr 25 Messages postés mardi 13 mars 2007Date d'inscription 8 avril 2009 Dernière intervention
- 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 !
Afficher la suite 

6 réponses

Répondre au sujet
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 8 avril 2009 à 19:11
+3
Utile
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())) ;
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de krimog
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 8 avril 2009 à 11:36
0
Utile
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())) ;
Commenter la réponse de krimog
cs_Stargirlfr 25 Messages postés mardi 13 mars 2007Date d'inscription 8 avril 2009 Dernière intervention - 8 avril 2009 à 11:47
0
Utile
OK, merci, je vais essayer ça !
Encore merci pour ta réponse
Commenter la réponse de cs_Stargirlfr
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 8 avril 2009 à 14:22
0
Utile
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 .
Commenter la réponse de Lutinore
cs_Stargirlfr 25 Messages postés mardi 13 mars 2007Date d'inscription 8 avril 2009 Dernière intervention - 8 avril 2009 à 18:56
0
Utile
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 !
Commenter la réponse de cs_Stargirlfr
cs_Stargirlfr 25 Messages postés mardi 13 mars 2007Date d'inscription 8 avril 2009 Dernière intervention - 8 avril 2009 à 19:26
0
Utile
PARFAIT !
Merci infiniment !!!
Commenter la réponse de cs_Stargirlfr

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.