2017-03-13 13 views
0

私は、一時停止する機能を持つC#winformsアプリケーションでカウントダウンタイマー(30分)を作成しようとしていましたが、一時停止が発生した場所から再開しました。私は、System.Windows.Forms.Timerの特定の一時停止機能がないことを知っているので、これを達成するためにいくつかのソリューションを試しました。私はインターネットを精査したが、自分のシナリオに適用できるものは見つけられなかった。私が試したことのすべては、30分後に再びタイマーを開始するか、またはポーズなしでどこから継続するかのいずれかになります。これは私を怒らせる。誰かがこれを行うための代替方法を助けたり提案したりできますか?これは私の最初の投稿ですので、何か誤りがあった場合は謝ります。以下のコード。私は問題を引き起こしているコードをコメントアウトしました。構文的にも論理的にも正しいわけではありません。c#countdown timer pause

public partial class FormWithTimer : Form 
{ 
    System.Windows.Forms.Timer timerx = new System.Windows.Forms.Timer(); 

    DateTime startTime = DateTime.Now; 
    DateTime stopTime = DateTime.Now; 

    public FormWithTimer() 
    { 
     InitializeComponent(); 
     TimerLabel.Text = "30:00"; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    void timer_Tick(object sender, EventArgs e) 
    { 

    } 

    public void StartButton_Click(object sender, EventArgs e) 
    { 
     startTime = DateTime.Now; 

     BeginTextBox.Text = startTime.ToString(); 


     TimerLabel.Visible = true; 
     timerx.Tick += (obj, args) => 
      TimerLabel.Text = (TimeSpan.FromMinutes(30) - (DateTime.Now - startTime)).ToString("mm\\:ss"); 

     timerx.Enabled = true; 

    } 

    public void PauseButton_Click(object sender, EventArgs e) 
    { 

     if (PauseButton.Text == "Pause") 
     { 
      timerx.Stop(); 
      PauseButton.Text = "Start"; 
      stopTime = DateTime.Now; 
     } 
     else 
     { 
      PauseButton.Text = "Pause"; 

      timerx.Start(); 
      TimerLabel.Visible = true; 
      //timerx.Tick += (obj, args) => 
      // TimerLabel.Text = (TimeSpan.FromMinutes(30) - (DateTime.Now - (startTime - stopTime))).ToString("mm\\:ss"); 

      timerx.Enabled = true; 
     } 

    } 

} 
+0

あなたはタイマーを一時停止するのはなぜ? 10分後に一時停止すると、20分後に最初に再開したい場合は再開しますか? – Adil

+3

さて、 'DateTime pauseStart'と呼ばれる別の変数を追加する際の問題は何ですか?また、ユーザーがタイマーのポーズを解除すると、その差を' startTime'に追加しますか? – Psi

+0

ボタンをクリックしたときに設定された 'startTime'を使用している' StartButton_Click'を使用している場合はどうすれば "unpausing"しますか? – doctorlove

答えて

1

私はあなたがそれを一時停止得たときにそれがあった場所タイマーは継続持ってしようとしていると思います。これを行うには

、私はそのことについてはstopTimeを使用することをお勧めします:あなたの「一時停止、一時停止を解除」で

- ルーチン:

public void PauseButton_Click(object sender, EventArgs e) 
{ 

    if (PauseButton.Text == "Pause") 
    { 
     timerx.Stop(); 
     PauseButton.Text = "Start"; 
     stopTime = DateTime.Now; 
    } 
    else 
    { 
     PauseButton.Text = "Pause"; 
     startTime += (DateTime.Now - stopTime); 

     timerx.Start(); 
     TimerLabel.Visible = true; 

     timerx.Enabled = true; 
    } 

} 
+0

Perfect!それはまさに私が後にしていることです。ありがとうございました! – sharpy77