2010-04-24 7 views
3

Ici, je dois créer un losange en utilisant la méthode drawlines et le faire bouger horizontalement le long d'un chemin à mi-chemin du haut du formulaire.C# - déplace une forme jusqu'à un point situé à mi-hauteur du formulaire

J'ai créé un losange et il se déplace horizontalement, mais je veux qu'il commence à se déplacer à partir d'une position qui est à mi-chemin du haut de la forme.

C'est le code pour créer un diamant,

private void Form1_Paint(object sender, PaintEventArgs e) 
    { 

     Graphics g = e.Graphics; 
     Point p1 = new Point(5+x, 0); 
     Point p2 = new Point(10+x, 5); 
     Point p3 = new Point(5+x, 10); 
     Point p4 = new Point(0+x, 5); 
     Point[] ps = { p1, p2, p3, p4, p1 }; 
     Pen p_yellow = new Pen(Color.Yellow, 5); 
     g.DrawLines(p_yellow, ps); 
     this.BackColor = System.Drawing.Color.DarkBlue; 
    } 

je peux le faire bouger à l'aide de la minuterie et suivant est le code,

private void timer1_Tick(object sender, EventArgs e) 
    { 
     if (x < 500) 
      x += 2; 
     else 
      timer1.Enabled = false; 
     this.Invalidate(); 
    } 

s'il vous plaît me dire comment amener le diamant un point qui est à mi-chemin du haut du formulaire?


private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    int height = 10; 
    int middle = height/2; 
    int middleform = Form1.height/2; 
    int diamondMiddleOfTheForm; 
    diamondMiddleOfTheForm = middleForm - middle; 

    Graphics g = e.Graphics; 
    Point p1 = new Point(5 + x, 0 + diamondMiddleOfTheForm); 
    Point p2 = new Point(10 + x, 5 + diamondMiddleOfTheForm); 
    Point p3 = new Point(5 + x, 10 + diamondMiddleOfTheForm); 
    Point p4 = new Point(0 + x, 5 + diamondMiddleOfTheForm); 
    Point[] ps = { p1, p2, p3, p4, p1 }; 
    Pen p_yellow = new Pen(Color.Yellow, 5); 
    g.DrawLines(p_yellow, ps); 
    this.BackColor = System.Drawing.Color.DarkBlue; 
} 

Il montre une erreur à middleForm = Form1.Height/2 et diamondMiddleOfTheForm = middleForm - middle

Je suis désolé de mon erreur, si je l'ai fait une mise en œuvre de ce que vous avez dit ...

Répondre

2

vous devez trouver la hauteur du diamant, d'abord. prendre le point le plus haut dans le diamant: 0, et ajoutez le point le plus bas du diamant: 10

height = 10

puis trouver le milieu du diamant, à la verticale:

middle = height/2

puis trouver au milieu de la forme:

middleForm = form.Height/2

alors cal culer la position du diamant en le déplaçant « vers le haut » à partir du milieu de la forme par la moitié de la hauteur du diamant:

diamondMiddleOfTheForm = middleForm - midddle

la variable « diamondMiddleOfTheForm » vous indique où pour compenser vos valeurs « y »

 Point p1 = new Point(5+x, 0+diamondMiddleOfTheForm); 
     Point p2 = new Point(10+x, 5+diamondMiddleOfTheForm); 
     Point p3 = new Point(5+x, 10+diamondMiddleOfTheForm); 
     Point p4 = new Point(0+x, 5+diamondMiddleOfTheForm); 
+0

Etes-vous sûr de vouloir utiliser form.Height? Je pense qu'il serait préférable que vous utilisiez form.ClientRectangle.Height, de sorte qu'il semble centré dans la "zone de travail", faute d'un meilleur terme. –

+0

oui. J'oublie toujours ClientRectangle. :) –

+0

oh! Je n'ai jamais utilisé ça ... je vais essayer maintenant ... merci de me donner un indice ... – user324707