cs_Stargirlfr
Messages postés25Date d'inscriptionmardi 13 mars 2007StatutMembreDernière intervention 8 avril 2009
-
7 avril 2009 à 22:49
cs_Stargirlfr
Messages postés25Date d'inscriptionmardi 13 mars 2007StatutMembreDerniè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.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201548 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
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201548 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;
}
}
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 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 .
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Stargirlfr
Messages postés25Date d'inscriptionmardi 13 mars 2007StatutMembreDerniè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);
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 (?????);
}