2010-04-23 2 views
0

Je veux déplacer une forme de diamant dans la forme (par exemple 2 pixels toutes les 200ms) de manière horizontale. J'ai utilisé le code suivant dans l'événement From_Paint.Pouvons-nous déplacer la forme (Diamant) en C#

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    Graphics g = e.Graphics; 
    Point p1 = new Point(5,0); 
    Point p2 = new Point(10, 5); 
    Point p3 = new Point(5, 10); 
    Point p4 = new Point(0, 5); 
    Point[] ps = { p1, p2, p3, p4, p1 }; 
    g.DrawLines(Pens.Black, ps); 
} 

Je sais comment déplacer une image mais comment faire avec la forme.

Merci, Ani

Répondre

2

Vous devez suivre votre position actuelle dans une variable de niveau formulaire. Si vous faites cela, votre événement Form1_Paint peut changer l'emplacement du pixel X chaque fois qu'il dessine.

Il suffit d'ajouter un minuteur à votre formulaire et de définir son intervalle à 200 ms. Chaque 200ms, ajoutez 2 à votre pixel X actuel, et invalidez votre contrôle (ainsi il se redessine).


Edit: Ajouter à votre formulaire:

int xOffset = 0; 

Ensuite, dans votre timer_Tick:

private void timer1_Tick(object sender, EventArgs e) 
{ 
    if (xOffset < 500) 
     xOffset += 2; 
    else 
     timer1.Enabled = false; // This will make it only move 500 pixels before stopping.... Change as desired. 

    this.Invalidate(); // Forces repaint 
} 

Changer votre événement de peinture:

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    Graphics g = e.Graphics; 
    Point p1 = new Point(5 + xOffset,0); 
    Point p2 = new Point(10 + xOffset, 5); 
    Point p3 = new Point(5 + xOffset, 10); 
    Point p4 = new Point(0 + xOffset, 5); 
    Point[] ps = { p1, p2, p3, p4, p1 }; 
    g.DrawLines(Pens.Black, ps); 
} 
+0

bien ce sont mes coordonnées .... comment les faire incrémenter 2pixel sur chaque tick ... J'ai essayé d'utiliser + = opérateur, mais ne fonctionne pas .. Point p1 = nouveau Point (5,0); Point p2 = nouveau Point (10, 5); Point p3 = nouveau Point (5, 10); Point p4 = nouveau Point (0, 5); – Ani

+0

Vous devez stocker, au niveau de la classe, un entier qui est votre coordonnée X (ou offset) ... –

+0

@Ani: J'ai ajouté du code pour démontrer ... –

0

utilisation Timer redessiner alors à chaque tick.

+0

comment puis-je augmenter les points de Diamonds ... à chaque tick jusqu'à ce qu'il atteigne la fin de la forme – Ani

Questions connexes