2016-12-27 3 views
0

私が書いた基本的なWindowsフォームアプリケーション用のコードが少しあります。しかし、何かが間違っています。私はアプリを起動している、すべてがOKですが、私はタイマーを開始する場合は、初めての実行と繰り返しはありません。私は何をすべきか?Visual C#Timer Not Ticking

ご迷惑をおかけして申し訳ありません。実際にタイマーが実行され、timer1_Tick_1は毎秒呼び出さ

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

チェックは、私はそのテキストを設定し、スタートボタンを押すとダニイベントがtimer1_Tick_1 – Trey

+0

にバインドされていることを確認するが、テキストが、その時は何それはイベント –

+0

を修正するためにバインドされていることを確認イムそう繰り返していませんポイント...あなたはtickイベントにブレークポイントを設定しましたか?同様にトリガされ得ていないthatsのことを確認するためにdurdur_button_Clickで – Trey

答えて

4

。問題は、ローカル変数zamantimer1_Tick_1にあることです。常に同じ値のsaat * 60 * 60 + dakika * 60 + saniye;を取得するため、常にその初期値が表示されます。ローカル変数を削除し、代わりにzamanフィールドのみを使用してください。タイマーが起動したときにその最初の計算を行います。

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

ありがとう、時には私たちは何か重要なことを逃すことができます:) –

1

アレックスが言ったように、あなたは、Tickイベントハンドラ内で、それはダニので、すべての時間(毎秒)、それだけで値をリセットしzamanを宣言します。ダンプイベントハンドラの外側で変数を宣言し、それらを変更する必要があります。

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

}