多个倒数计时器+按钮

时间:2016-05-02 13:41:16

标签: c# winforms variables button timer

注意:这个问题也与此问题有关

我有一个计时器,它由一个启动所谓活动倒计时的按钮激活。但是我有一个问题,当我再次按下相同的按钮时,程序必须使用另一个时间(在数据网格内指定)并再次开始倒计时,如果我再次按下按钮,再过一次等等。

我应该使用多个计时器,还是有一种方法可以使用相同的计时器,但如果我按下按钮会有新的(“重置”)值?

(如果你们想要我展示更多的代码,请告诉我我会在这里发布)

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

我需要在这里放一个按钮,所以如果按下它,我的程序将开始另一个倒计时。但我不知道我是否还要为此创造另一个时间。

1 个答案:

答案 0 :(得分: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();
    }
}

其他一些事情:

  • 您确定要使用dataGridView
  • int f = 1;的第二列开始吗?
  • 我不明白你的时间转换因此我改变了它。现在它预计dataGridView中的倒计时时间为秒。但也许你的代码适合你的目的