2011-12-27 1 views
0

Je veux faire une simulation simple en utilisant des ellipses. Dans l'interface utilisateur, il y aura un bouton. L'utilisateur appuiera sur le bouton, puis avec une seconde d'intervalle, les ellipses seront dessinées dans pictureBox. Comme un feu de circulation ...Comment dessiner des ellipses avec un intervalle dans PictureBox

Je suppose que j'ai besoin d'utiliser Timer Event, mais je ne sais pas comment. Comment puis-je l'atteindre?

Mes meilleures salutations ...

CodeWork:

public void Button1_Click(Object sender, EventArgs e) 
{ 
    DrawMap ortamcizdir = new DrawMap(p_box_map, bmp, ZoomControl, panel1); 
    DrawCell hucrecizdir = new DrawCell (p_box_map, bmp, a, ZoomControl, ZoomKontrolBolen); 
} 

class DrawCell 
{ 
    for (int z = 0; z < Ortamlar.HucreSayisi; z++) 
    { 
     Pen Kalem = new Pen(Brushes.CadetBlue); 
     Rectangle rect = new Rectangle(((Ortamlar.HUCREKorX[z]/ScaleFactor - Ortamlar.HUCREYaricap[z]/ScaleFactor) 
         * ZoomKontrolCarpan)/ZoomKontrolBolen, (Ortamlar.HUCREKorY[z]/ScaleFactor - Ortamlar.HUCREYaricap[z]/ScaleFactor) * 
         ZoomKontrolCarpan/ZoomKontrolBolen, (2 * Ortamlar.HUCREYaricap[z]/ScaleFactor) * ZoomKontrolCarpan/ZoomKontrolBolen 
         , (2 * Ortamlar.HUCREYaricap[z]/ScaleFactor) * ZoomKontrolCarpan/ZoomKontrolBolen); 

     if (Ortamlar.HUCREYZ[z] == "001:400") 
     { 
       g.DrawString(Ortamlar.HUCREKB[z].ToString(), Font, Brushes.Black, ((Ortamlar.HUCREKorX[z]/ScaleFactor) 
        * ZoomKontrolCarpan)/ZoomKontrolBolen, 600 - (Ortamlar.HUCREKorY[z]/ScaleFactor) * 
        ZoomKontrolCarpan/ZoomKontrolBolen); 
       g.MultiplyTransform(new Matrix(1, 0, 0, -1, 0, 600)); 
       g.DrawEllipse(Kalem, rect); 

       g.FillEllipse(Brushes.Wheat, rect); 
       g.ResetTransform(); 

       picturebox1.Image = bmp; 
       bmp1 = (Bitmap)picturebox1.Image; 
      } 
      if (Ortamlar.HUCREYZ[z] == "401:800") 
      { 
         g.DrawString(Ortamlar.HUCREKB[z].ToString(), Font, Brushes.Black, ((Ortamlar.HUCREKorX[z]/ScaleFactor) 
        * ZoomKontrolCarpan)/ZoomKontrolBolen, 600 - (Ortamlar.HUCREKorY[z]/ScaleFactor) * 
        ZoomKontrolCarpan/ZoomKontrolBolen); 
         g.MultiplyTransform(new Matrix(1, 0, 0, -1, 0, 600)); 
         g.DrawEllipse(Kalem, rect); 

         g.FillEllipse(Brushes.Yellow, rect); 

         g.ResetTransform(); 
         picturebox1.Image = bmp; 
         bmp2 = (Bitmap)picturebox1.Image; 
      } 
      if (Ortamlar.HUCREYZ[z] == "801:120") 
      { 
         g.DrawString(Ortamlar.HUCREKB[z].ToString(), Font, Brushes.Black, ((Ortamlar.HUCREKorX[z]/ScaleFactor) 
        * ZoomKontrolCarpan)/ZoomKontrolBolen, 600 - (Ortamlar.HUCREKorY[z]/ScaleFactor) * 
        ZoomKontrolCarpan/ZoomKontrolBolen); 
         g.MultiplyTransform(new Matrix(1, 0, 0, -1, 0, 600)); 
         g.DrawEllipse(Kalem, rect); 

         g.FillEllipse(Brushes.Green, rect); 
         g.ResetTransform(); 

         picturebox1.Image = bmp; 
         bmp3 = (Bitmap)picturebox1.Image; 
      } 
      if (Ortamlar.HUCREYZ[z] == "121:161") 
      { 
         g.DrawString(Ortamlar.HUCREKB[z].ToString(), Font, Brushes.Black, ((Ortamlar.HUCREKorX[z]/ScaleFactor) 
        * ZoomKontrolCarpan)/ZoomKontrolBolen, 600 - (Ortamlar.HUCREKorY[z]/ScaleFactor) * 
         ZoomKontrolCarpan/ZoomKontrolBolen); 
         g.MultiplyTransform(new Matrix(1, 0, 0, -1, 0, 600)); 
         g.DrawEllipse(Kalem, rect); 

         g.FillEllipse(Brushes.Blue, rect); 

         g.ResetTransform(); 
         picturebox1.Image = bmp; 
         bmp4 = (Bitmap)picturebox1.Image; 
      } 
    } 
} 
+1

Vous voulez que nous écrivions le code pour vous? Passer. –

+0

@Cody Grey J'ai juste besoin d'idées ou de suggestions? –

+0

Avez-vous lu la [documentation] (http://msdn.microsoft.com/fr-fr/library/system.windows.forms.timer.aspx)? –

Répondre

1

Je ne comprends pas tout à fait l'objet de ce que vous demandez, mais im devine que vous pouvez approcher en lisant ces liens .

Le first vous présentera la plupart de ce que vous devez savoir sur le contrôle de minuterie. Le second vous indiquera comment dessiner les ellipses. A propos de la façon de structurer votre code, en bref, je voudrais obtenir le bouton pour démarrer le minuteur, puis l'événement timerElapsed contrôlerait la création d'ellipses dans la zone d'image, toutes les 1seconde. Pour plus d'explications, je pense qu'il serait préférable que vous mettiez du code ensemble afin que nous puissions mieux comprendre vos intentions. Ensuite, nous pourrions peut-être aider davantage. J'espère que cela aide cependant.

[edit1]

Cela va créer des ellipses jusqu'à ce que le chronomètre est arrêté, vous pouvez ajouter un bouton pour arrêter timer1:

public void Button1_Click(Object sender, EventArgs e) 
{ 
    timer1.Interval = 1000; 
    timer1.Start(); 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    DrawMap ortamcizdir = new DrawMap(p_box_map, bmp, ZoomControl, panel1); 
    DrawCell hucrecizdir = new DrawCell (p_box_map, bmp, a, ZoomControl, ZoomKontrolBolen); 
} 

Ne pas oublier que vous devez faire glisser la minuterie sur la conception, puis double-cliquez sur l'événement Tick dans le volet .

Cette réponse considère que rien ne cloche avec la classe DrawCell.

[Edit2]

Je pensais à ce que j'Affichée et cela créerait jusqu'à ce que le minuteur ellipses s'arrête. Vous pouvez donc ajouter une instruction while pour contrôler le nombre d'ellipses à dessiner. Vérifiez this link pour voir d'autres façons de mettre en œuvre cela.

De cette façon, vous pouvez définir la quantité d'ellipses à dessiner, c'est un exemple, mais il y a de nombreuses façons de le retirer.

//create this field and property before the constructor 
public int counter; 
public int Counter 
{ 
    get { return counter; } 
    set { counter = value; } 
} 

//button click sets the interval to 1sec, starts timer and sets the int Counter to 0 
private void button1_Click(object sender, EventArgs e) 
{ 
    timer1.Interval = 1000; 
    timer1.Start(); 
    Counter = 0; 
} 

//the tick event iterates the Counter property +1 everytime the timer advances 1sec and while Counter is under 5 for example it creates those objects 
private void timer1_Tick(object sender, EventArgs e) 
{ 
    Counter++; 
    while (counter < 5) 
    { 
     DrawMap ortamcizdir = new DrawMap(p_box_map, bmp, ZoomControl, panel1); 
     DrawCell hucrecizdir = new DrawCell (p_box_map, bmp, a, ZoomControl, ZoomKontrolBolen); 
    } 
} 
+0

Merci mon ami, j'ai 2 classes qui dessine une carte et des ellipses sur la carte, respectivement. Mais selon certaines contraintes, la couleur est différente. Ce que je veux faire est de dessiner ces ellipses une à une avec des intervalles de 1 seconde. –

+0

J'ai ajouté du code. Pourriez-vous jeter un coup d'oeil? –

+1

Im devinant que vous pouvez placer la méthode 'CreateEllipse();' dans l'événement de minuterie 'Tick'. Vous avez juste besoin de mettre 'timer1.Interval = 1000;' Essayez de mettre à jour votre question avec du code afin que nous puissions vous aider davantage. Comment avez-vous essayé de le faire? –

Questions connexes