【问题标题】:Reset button in a countdown timer倒数计时器中的重置按钮
【发布时间】:2016-08-29 19:04:01
【问题描述】:

我有一个按钮,我按下它就会开始倒计时。 但是,如果我再次按下同一个按钮,计时器必须重置并再次倒计时(我的程序定义了另一个时间,但现在这无关紧要)。

有什么方法可以在同一个 button_click 中进行此重置? 也许检查按钮是否被再次单击,以便我可以重置计时器值?

我有这个计时器滴答声

private int milliSecondsLeft = 0;
private int t = 0;
private bool timeSet = false;
private void timer2_Tick(object sender, EventArgs e)
{
    string timeOp = dataGridView1.Rows[t].Cells[5].Value + "";
    t++;
    DateTime timeConvert;
    DateTime dateTime = DateTime.Now;

    if (!timeSet) 
    {
        DateTime.TryParse(timeOp, out timeConvert);
        milliSecondsLeft = (int)timeConvert.TimeOfDay.TotalMilliseconds;
        timeSet = true;
        timeSetNxt = false;
    }

    milliSecondsLeft = milliSecondsLeft - 1000;

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

还有这个button_click

每次我按下按钮时,它都会转到t++;,然后它会在我的数据网格上读取另一个时间值。这就是为什么它必须重置

int t = 1;
private void btn2_Click(object sender, EventArgs e)
{
    timer2.Start();
    lblLeft.Text = dataGridView1.Rows[t].Cells[5].Value.ToString();
    string value = dataGridView1.Rows[t].Cells[5].Value.ToString(); 
    lblLeft.Text = value.ToString();
    t++;
}

【问题讨论】:

  • 你的代码在哪里!到目前为止,您尝试过什么?
  • 要重置timer2,只需调用Stop(),然后调用Start()(如果您需要运行“获取值一次”逻辑,然后重置timeSet)。逻辑和问题解释得不是很清楚(例如timer3突然是什么?)。
  • @Sinatr 只是在几次测试中更改了数字,忘记将其更改回原始值,抱歉 D:
  • @Sinatr 我尝试在该问题中使用 Dan 的答案,但它并没有改变我的时间价值。当我多次按下按钮时,我的计时器仍停留在它开始的第一个值上。它不会重置并转到另一个时间值。

标签: c# winforms button timer countdowntimer


【解决方案1】:

您可以使用 Button 的 Tag 属性为您要创建的逻辑设置一个标志。 在按钮点击事件上

if (btnExample.Tag==0)
{
   btnExample.Tag=1;
   //call startCountDown function
}
else
{ 
   btnExample.Tag=0;
   // call reset
}

【讨论】:

  • 如何使用标签?
  • 在编写代码之前确保你知道要做什么。这样更容易。
【解决方案2】:

显示您的计时器代码。获取重置次数。使用下面的代码。

  int button_clicked = new int(); 

  private void button1_Click(object sender, EventArgs e)
  {
      // How many times you have Reset
      button_clicked++;
      // Your Timer Code
  }

每次点击都可以启动一个新的计时器。另外,处理最后一个。 您可以使用button_clicked 来了解计时器是否已启动,从而在button_clicked > 0 是否已启动时进行处置

【讨论】:

  • @MattDAVM 如果您更仔细地提出问题,我们将不胜感激。你说"If I press the button again, now I want this value to become like "11:13:46" 但你为什么要那样。什么是逻辑。
  • 我有一个数据网格,它有一些时间值,每次我按下按钮时,这个值都将用作计时器倒计时。由于我上面有多个值,因此每次按下按钮时,程序都必须重置计时器并读取下一行并将此值转换为计时器倒计时。
【解决方案3】:

我会检查定时器是否启用

if (!timer2.Enabled) StartTimer2();
else ResetTimer2();

【讨论】:

  • 时间未更改为下一个值。
  • 你做了milliSecondsLeft = milliSecondsLeft + 8 小时吗?
  • 8 小时?不,我没有。
猜你喜欢
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多