2013-01-09 61 views
0

我想知道我是如何創建一個標籤,每5秒添加「總和+1」?我已經嘗試了一個if循環,但不幸的是它在一秒鐘後重置。 感謝您在優勢的關注添加總計到定時器

`

using System.Diagnostics; 
// using system.diagnotics voor stopwatch 

namespace WindowsFormsApplication7 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

     } 

     private Stopwatch sw = new Stopwatch(); 

     private void button1_Click(object sender, EventArgs e) 
     { 
      timer1.Enabled = true; 
      sw.Start(); 

      if (timer1.Enabled == true) { button1.Text = "stop"; } 
      else { button1.Text = "false"; sw.Stop(); } 

     } 

     private void timer1_Tick(object sender, EventArgs e) 
     { 
      int hours = sw.Elapsed.Hours; 
      int minutes = sw.Elapsed.Minutes; 
      int seconds = sw.Elapsed.Seconds; 
      int sum = 0; 
      label1.Text = hours + ":" ; 
      if (minutes < 10) { label1.Text += "0" + minutes + ":"; } 
      else { label1.Text += minutes + ":"; } 

      if (seconds < 10) { label1.Text += "0" + seconds ; } 
      else { label1.Text += seconds ; } 

      if (seconds ==5) { sum = sum +=1; } 


      label2.Text = Convert.ToString(sum); 
     } 
    } 
}` 
+0

問題已經被回答,但是,你可能並不是指'sum = sum + = 1'。 'sum + = 1'與'sum = sum + 1'是相同的東西。 – Ashley

+1

什麼是計時器滴答的時間間隔? –

回答

4

sum應該是一個類字段。您也可以使用自定義的格式字符串用於TimeSpan。

int sum = 0; 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     // int sum = 0; local variable will be set to zero on each timer tick 
     label1.Text = sw.Elapsed.ToString(@"hh\:mm\:ss"); 

     // btw this will not update sum each five seconds 
     if (sw.Elapsed.Seconds == 5) 
      sum++; // same as sum = sum +=1; 

     label2.Text = sum.ToString(); 
    } 

只有當前超時時間的第二個值爲5時,您當前的實現纔會增加總和。永遠不會發生(取決於你的計時器間隔)。如果您將計時器間隔設置爲1000毫秒,則可以增加每個計時器的總和,但設置爲label2.Text = (sum % 5).ToString()

+0

生病也試圖創建一個類字段謝謝berezovsky – mrName

1

你必須移動sum出計時器回調因爲你是它每次定時器結束

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private int sum = 0; 
    private DateTime lastUpdate; 
    private Stopwatch sw = new Stopwatch(); 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     label1.Text = string.Format("{0:00}:{1:00}:{2:00}", 
         sw.Elapsed.Hours, sw.Elapsed.Minutes, sw.Elapsed.Seconds); 

     if (DateTime.Now >= lastUpdate.AddSeconds(5)) 
     { 
      sum++; 
      lastUpdate = DateTime.Now; 
      label2.Text = sum.ToString(); 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (timer1.Enabled == true) 
     { 
      sw.Stop(); 
      button1.Text = "stop"; 
     } 
     else 
     { 
      sum = 0; 
      lastUpdate = DateTime.Now; 
      timer1.Enabled = true; 
      sw.Start(); 
      button1.Text = "Start"; 
     } 
    } 
+0

更新的答案每天5秒正確地更新'sum' –

1

每次你的秒錶TICKS時間設置爲0,總和內TICK,它會復位和啓動從

int sum=0; 

因此,儘量使sum變量GLOBAL在timer1_Tick事件之外,它會繼續增加。

+0

好吧thnx生病檢查如何使一個全局變量 – mrName