2016-05-02 2 views
0

注:この質問は、この1に関連しているだけでなく複数のカウントダウンタイマー+ボタン

私はなっ活動のカウントダウンを開始し、ボタンによって活性化されるタイマーを持っています。しかし、同じボタンをもう一度押すと問題が発生します。プログラムは別の時間(データグリッド内で指定)を使用してカウントダウンを再度開始しなければなりません。

複数のタイマーを使用するか、同じタイマーを使用する方法はありますか?ボタンを押すと新しい(リセット)値が表示されますか?

(君たちが私はちょうど私がここに投稿します私に教えて、より多くのコードを表示したい場合)

private bool timeSet2 = false; 
int f = 1; 
private void timer3_Tick(object sender, EventArgs e) 
{ 

    DateTime timeConvert; 
    DateTime dateTime = DateTime.Now; 

    string timeOp = dataGridView1.Rows[f].Cells[2].Value + ""; 
    f++; 

    if (!timeSet2) // only get the value once 
    { 
     DateTime.TryParse(timeOp, out timeConvert); 
     milliSecondsLeft = (int)timeConvert.TimeOfDay.TotalMilliseconds; 
     timeSet2 = true; 
    } 

    milliSecondsLeft = milliSecondsLeft - 1000; 

    if (milliSecondsLeft > 0) 
    { 
     var span = new TimeSpan(0, 0, 0, 0, milliSecondsLeft); 
     lblLeft.Text = span.ToString(@"hh\:mm\:ss"); 
    } 
    else 
    { 
     timer3.Stop(); 
    } 

私はそれを押すと、私のプログラムがするので、右ここにボタンをフィットする必要がありますもう一度カウントダウンを開始してください。しかし、私はこのために別の時間を作らなければならないかどうかはわかりません。

+0

どのようなタイマーを使用していますか?ほとんどの(すべて?)タイマーで間隔を変更できます。たとえば、Windows Forms Timerには[インターバルプロパティ](https://msdn.microsoft.com/en-us/library/system.windows.forms.timer.interval%28v=vs.110%29.aspx)があります。あなたは変えることができます。 –

+0

@MatthewWatson私は最も一般的なタイマーを使用しています。タイマーは1000ミリ秒の間隔で自分のフォームで時計を実行するために使用します。 – MattDAVM

答えて

1

同じタイマーを使用してカウントダウンごとにリセットすることができます。しかし、私はあなたがタイマーの機能を誤解していると思います。 timer_Tickイベントは、タイマーの間隔が経過するたびに発生します。ボタンクリックイベントの変数milliSecondsLeftを更新します。

button_Clickイベントにコードを移動する必要があります。

private void button1_Click(object sender, EventArgs e) 
{ 
    milliSecondsLeft = Convert.ToInt32(dataGridView1.Rows[f].Cells[2].Value)*1000; 
    f++; 
    timer3.Start(); 
} 

あなたtimer_Tickイベントは、次のようになります。

private void timer3_Tick(object sender, EventArgs e) 
{ 
    milliSecondsLeft = milliSecondsLeft - 1000; 
    if (milliSecondsLeft > 0) 
    { 
     var span = new TimeSpan(0, 0, 0, 0, milliSecondsLeft); 
     lblLeft.Text = span.ToString(@"hh\:mm\:ss"); 
    } 
    else 
    { 
     timer3.Stop(); 
    } 
} 

いくつかの他の事を:

  • はあなたの2番目の列を始めたいあなたは確かにありますdataGridViewint f = 1;
  • 時間変換がわからないので変更しました。今すぐあなたのdataGridViewのカウントダウン時間を秒で期待しています。しかし、あなたのコードはあなたの目的に合っているかもしれません。
+0

私の変換はちょっと面倒だった、私は正直でなければならない。最初は、 'string'値を' DateTime'値に変換しました。次に、 'Double'に変換してミリ秒-1000のカウントダウンを行いました。その後、再び' DateTime'に変換して情報を表示しました私のラベルに。 – MattDAVM

+0

と私の時間値は2番目の列にあるので、私は確信しています。そして、fは私に2番目の行の定義を与えるでしょう(私の最初の行は既に別のボタンで使われています、それはなぜhahaですか) – MattDAVM

関連する問題