2011-12-27 66 views
0

我想用橢圓做一個簡單的模擬。在用戶界面中,會出現一個按鈕。用戶將按下按鈕,然後以1秒的間隔,橢圓將被繪製到pictureBox。像交通燈...如何畫一個間隔的橢圓到PictureBox中

我想我需要使用計時器事件,但不知道如何。 我該如何實現它?

我最誠摯的問候......

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

您希望我們爲您編寫代碼?通過。 – 2011-12-27 14:38:25

+0

@Cody Gray我只需要任何想法或建議? – 2011-12-27 14:42:38

+0

您是否閱讀過[documentation](http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx)? – 2011-12-27 14:49:50

回答

1

我不太明白你問的目的了,但是我猜你可以通過以下鏈接閱讀親近。

first將運行你需要知道的有關定時器控制的大部分內容。

second將讓您進入繪製橢圓的方式。

關於如何構建代碼,簡單地說,我會得到啓動計時器的按鈕,然後timerElapsed事件將控制在圖片框中每1秒創建一次橢圓。

如需更多解釋,我認爲最好是將一些代碼放在一起,這樣我們才能更好地理解您的意圖。那麼我們可以幫助更多。希望這有助於。

[EDIT1]

這將創建一個橢圓,直到計時器停止時,您可以添加一個按鈕來停止定時器1:

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); 
} 

不要忘記你需要將定時器拖到設計,然後在屬性窗格上雙擊勾號事件。

這個答案認爲DrawCell類沒有什麼問題。

[EDIT2]

我在想什麼我張貼,這將創建橢圓直到計時器停止。所以你可能想要添加一個while語句來控制繪製多少個橢圓。查看this link以查看其他實現該方法的方法。

通過這種方式,您可以設置要繪製的橢圓的數量,這是一個示例,但有很多方法可以將其拉下。

//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

謝謝你的朋友,我有兩個班,分別繪製一張地圖和省略號到地圖上。但是根據一些限制,顏色是不同的。我想要做的是以1秒的間隔逐一繪製這些橢圓。 – 2011-12-27 16:44:13

+0

我添加了一些代碼。你能看看嗎? – 2011-12-27 16:55:56

+1

我猜你可以將'CreateEllipse();'方法放入定時器事件'Tick'中。你只需要設置'timer1.Interval = 1000;'嘗試用一些代碼更新你的問題,所以我們可以幫助更多。你是怎麼試圖做到的? – 2011-12-27 16:58:32