【问题标题】:Multiple countdown timer + button多个倒计时+按钮
【发布时间】:2016-05-02 13:41:15
【问题描述】:

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

我有一个计时器,该计时器由一个按钮激活,该按钮开始对假定活动进行倒计时。但是我有一个问题,当我再次按下同一个按钮时,程序必须使用另一个时间(在数据网格中指定)并再次开始倒计时,如果我再次按下按钮,另一个时间等等。

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

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

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

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

【问题讨论】:

  • 你用的是什么定时器?大多数(全部?)计时器都可以让您更改它们的间隔。例如,Windows 窗体计时器有一个 Interval property,您可以更改它。
  • @MatthewWatson 我正在使用最常见的计时器,人们用它来以他们的形式做时钟,间隔为 1000 毫秒。

标签: c# winforms variables button timer


【解决方案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 中的倒计时时间以秒为单位。但也许您的代码适合您的目的

【讨论】:

  • 我的转换有点乱,老实说。首先,我将string值转换为DateTime值,然后将其转换为Double只是为了使毫秒倒计时-1000,然后我再次将其转换为DateTime以显示信息在我的标签上。
  • 是的,我敢肯定,因为我的时间值在第二列。 f 会给我第二行的定义(我的第一行已经被另一个按钮使用,这就是为什么哈哈)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
相关资源
最近更新 更多