2010-06-20 8 views
2

J'ai fait pas mal de recherches et je n'ai rien trouvé d'utile.Faire glisser l'objet en utilisant For Loop (C#)

Est-il possible de "glisser" ou "déplacer" en utilisant C#, un objet d'un emplacement à l'autre en utilisant une simple boucle For?

Merci

+2

Oui, c'est possible. Quel type d'application? Console, Windows, Web? –

+0

Il s'agit d'une application Windows Forms –

Répondre

3

je vous suggère d'utiliser plutôt un Timer. Il existe d'autres options, mais ce sera simpliste si vous voulez éviter les problèmes de threads, etc.

L'utilisation d'une ligne droite nécessite que vous pompiez la file d'attente de messages en utilisant Application.DoEvents() pour vous assurer que Windows a la possibilité de rendre le contrôle mis à jour sinon la boucle for serait exécutée sans mettre à jour l'interface utilisateur et le contrôle semblerait passer de l'emplacement source à l'emplacement cible.

Voici un exemple de QAD pour animer un bouton dans la direction Y lorsque vous cliquez dessus. Ce code suppose que vous mettez un contrôle de minuterie sur le formulaire appelé animationTimer.

private void button1_Click(object sender, EventArgs e) 
{ 
    if (!animationTimer.Enabled) 
    { 
    animationTimer.Interval = 10; 
    animationTimer.Start(); 
    } 
} 

private int _animateDirection = 1; 
private void animationTimer_Tick(object sender, EventArgs e) 
{ 
    button1.Location = new Point(button1.Location.X, button1.Location.Y + _animateDirection); 

    if (button1.Location.Y == 0 || button1.Location.Y == 100) 
    { 
    animationTimer.Stop(); 
    _animateDirection *= -1; // reverse the direction 
    } 
} 
+0

Dépend des circonstances bien sûr, mais je suis d'accord qu'il semble probable que l'utilisation d'un temporisateur serait utile pour tout ce qu'il veut faire. –

+0

ooh parfait, merci: D –

1

Si l'on suppose que l'objet dont vous parlez est une sorte de Control vous pouvez simplement changer la propriété Location de celui-ci.

donc quelque chose comme ceci:

for(int i = 0; i < 100; i++) 
{ 
    ctrl.Location.X += i; 
} 

devrais-je prendre travailler.