2016-12-27 3 views
0

Es gibt ein wenig Code für grundlegende Windows Form Application, die ich schrieb. Aber etwas läuft schief. Ich beginne die App, alles ist in Ordnung, aber wenn ich den Timer starte, läuft es zum ersten Mal und wiederholt sich nicht. Was soll ich machen?Visual C# -Timer nicht Ticking

Entschuldigung für Grammatikfehler.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Timers; 
using System.Windows.Forms; 

namespace Zamanlayıcı 
{ 
public partial class Form1 : Form 
{ 

    public int saat; 
    public int dakika; 
    public int saniye; 
    public int zaman; 

    public Form1() 
    { 
     InitializeComponent(); 

    } 

    private void baslat_button_Click(object sender, EventArgs e) 
    { 
     timer1.Interval = 1000; 
     timer1.Start(); 
    } 

    private void durdur_button_Click(object sender, EventArgs e) 
    { 
     timer1.Stop(); 
    } 

    private void demizle_button_Click(object sender, EventArgs e) 
    { 
     saat_box.Clear(); 
     dakika_box.Clear(); 
     saniye_box.Clear(); 
     zaman_text.Text = "00:00:00"; 

    } 

    private void ses_checkbox_CheckedChanged(object sender, EventArgs e) 
    { 

    } 

    private void timer1_Tick_1(object sender, EventArgs e) 
    { 
     int saat = int.Parse(saat_box.Text); 
     int dakika = int.Parse(dakika_box.Text); 
     int saniye = int.Parse(saniye_box.Text); 
     int zaman = saat * 60 * 60 + dakika * 60 + saniye; 

     int saat2 = zaman/60/60; 
     int dakika2 = zaman/60 % 60; 
     int saniye2 = zaman % 60; 

     if(zaman > 0) { 
     zaman--; 
     zaman_text.Text = saat2.ToString("00") + ":" + dakika2.ToString("00") + ":" + saniye2.ToString("00"); 
     }if(zaman == 0) 
     { 
      MessageBox.Show("Zaman doldu!", "Bitti", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
     } 
    } 
} 
} 
+0

Überprüfen Sie, ob die Zecke Ereignis timer1_Tick_1 gebunden – Trey

+0

Wenn ich die Taste Start drücken seine den Text festlegen, aber Wiederholung nicht so sicher im, es Ereignis zu korrigieren gebunden ist –

+0

Was der Text das ist Punkt .. hast du einen Breakpoint im Tick-Event gesetzt? – Trey

Antwort

4

Eigentlich läuft der Timer und timer1_Tick_1 wird jede Sekunde aufgerufen. Das Problem ist, dass Sie eine lokale Variable zaman in der timer1_Tick_1 haben, die immer den gleichen Wert erhält saat * 60 * 60 + dakika * 60 + saniye;, so dass Sie immer diesen Anfangswert sehen. Entfernen Sie die lokale Variable und verwenden Sie stattdessen nur das Feld zaman; machen seine erste Berechnung, wenn der Timer beginnt:

public partial class Form1 : Form { 

     public int saat; 
     public int dakika; 
     public int saniye; 
     public int zaman; 

     public Form1() { 
      InitializeComponent(); 

     } 

     private void baslat_button_Click(object sender, EventArgs e) { 
      timer1.Interval = 1000; 
      int saat = int.Parse(textBox1.Text); 
      int dakika = int.Parse(textBox2.Text); 
      int saniye = int.Parse(textBox3.Text); 
      zaman = saat * 60 * 60 + dakika * 60 + saniye; 
      timer1.Start(); 
     } 

     private void durdur_button_Click(object sender, EventArgs e) { 
      timer1.Stop(); 
     } 

     private void demizle_button_Click(object sender, EventArgs e) { 
      textBox1.Clear(); 
      textBox2.Clear(); 
      textBox3.Clear(); 
      textBox4.Text = "00:00:00"; 

     } 

     private void ses_checkbox_CheckedChanged(object sender, EventArgs e) { 

     } 

     private void timer1_Tick_1(object sender, EventArgs e) { 


      int saat2 = zaman/60/60; 
      int dakika2 = zaman/60 % 60; 
      int saniye2 = zaman % 60; 

      if (zaman > 0) { 
       zaman--; 
       textBox4.Text = saat2.ToString("00") + ":" + dakika2.ToString("00") + ":" + saniye2.ToString("00"); 
      } 
      if (zaman == 0) { 
       MessageBox.Show("Zaman doldu!", "Bitti", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
      } 
     } 
    } 
+0

Vielen Dank, manchmal können wir etwas verpassen, das wichtig ist :) –

1

Wie Alex sagte, Sie zaman innerhalb der tick Event-Handler deklarieren, so jedes Mal, es tickt (jede Sekunde), setzt er nur den Wert. Sie sollten Ihre Variablen außerhalb des Tick-Event-Handlers deklarieren und sie ändern.

public partial class Form1 : Form 
{ 
    public int saat; 
    public int dakika; 
    public int saniye; 
    public int zaman; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void baslat_button_Click(object sender, EventArgs e) 
    { 
     timer1.Interval = 1000; 
     int saat = int.Parse(textBox1.Text); 
     int dakika = int.Parse(textBox2.Text); 
     int saniye = int.Parse(textBox3.Text); 
     zaman = saat * 3600 + dakika * 60 + saniye;  //You were multiplying by 60 2x - just multiply by 3600 

     timer1.Start();  
    } 

    private void timer1_Tick_1(object sender, EventArgs e) 
    { 
     int saat2 = zaman/3600; //You were dividing by 60 2x - just divide by 3600 
     int dakika2 = zaman/60 % 60; 
     int saniye2 = zaman % 60; 

     if (zaman > 0) 
     { 
      zaman--; 
      textBox4.Text = saat2.ToString("00") + ":" + dakika2.ToString("00") + ":" + saniye2.ToString("00"); 
     } 
     if (zaman == 0) { 
      MessageBox.Show("Zaman doldu!", "Bitti", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
     } 

}