2012-08-02 78 views
0

我有四個按鈕被稱爲「ship1,ship2」等。 我希望他們移動到窗體的右側(以相同的速度和同時開始),並且每次我點擊一個「船」時,所有的船隻都應該停下來。我知道我需要使用一個計時器(我已經編寫了使用線程的代碼,但是在停止船隻時它給了我麻煩)。我不知道如何使用計時器。我不知道如何使用計時器。我不知道如何使用計時器。我不知道如何使用計時器。使用定時器移動按鈕

我試圖讀取MDSN中的定時器信息,但我不理解它。 那麼你能幫助我嗎?

HERES使用線程的代碼。 我不想使用它。我需要使用定時器! (我張貼在這裏,因爲它不給我後,沒有任何代碼

private bool flag = false; 
    Thread thr; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     flag = false; 
     thr = new Thread(Go); 
     thr.Start(); 

    } 

    private delegate void moveBd(Button btn); 

    void moveButton(Button btn) 
    { 
     int x = btn.Location.X; 
     int y = btn.Location.Y; 
     btn.Location = new Point(x + 1, y); 
    } 

    private void Go() 
    { 
     while (((ship1.Location.X + ship1.Size.Width) < this.Size.Width)&&(flag==false)) 
     { 
      Invoke(new moveBd(moveButton), ship1); 
      Thread.Sleep(10); 
     } 

     MessageBox.Show("U LOOSE"); 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     flag = true; 
    } 
+1

這似乎是作業\分配。如果是,我會更新你的標籤。 – zeencat 2012-08-02 15:30:12

+0

哇。你不能點擊這樣的按鈕。您正在阻止作爲UI線程的主線程。使用[timer](http://msdn.microsoft.com/en-us/library/system.timers.timer(v = vs.71).aspx)與已用事件。問題在於,除非你有一個很短的'Interval',比如0.04秒(25 FPS),否則你不會得到流暢的運動。如果您正在製作遊戲,請查看[XNA](http://www.xnadevelopment.com/index.shtml) – musefan 2012-08-02 15:37:16

+0

@ zeencat它不是。我正在嘗試構建一款遊戲。 – Noam650 2012-08-02 16:10:58

回答

1

你有一派Windows.Forms.Timer

您可以通過啓動一個定時器:

Timer timer = new Timer(); 

timer.Interval = 1000; //one second 
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); 
timer.Enabled = true; 
timer.Start(); 

你需要處理Elapsed事件的事件處理程序,您可以在其中放置代碼以移動「按鈕」:

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
     MoveButton();  
} 
+0

System.Windows.Forms.Timer將是一個更好的選擇,否則在Timer_Elapsed事件中檢查InvokeRequired幾乎是不可避免的,以避免交叉線程異常。否則同意。 – dash 2012-08-02 15:39:47

+0

好點!將編輯 – dtsg 2012-08-02 15:46:27

+0

@Duane,當我想讓它停止移動時,我該如何停止時鐘? – Noam650 2012-08-02 16:12:25