如何将计时器从秒数倒计时转换为以分钟和秒计数?

时间:2014-10-09 21:40:00

标签: c# .net winforms

我有numericUpDown1,当我设置它的值时,它将值保存在选项文本文件中:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            Options_DB.Set_Radar_Images_Time(numericUpDown1.Value);
        }

在form1设计器中将timer1间隔设置为1000ms。

在timer1 tick事件中我有:

private void timer1_Tick(object sender, EventArgs e)
        {
           numbers_radar = Convert.ToInt64(numericUpDown1.Value);
        }

现在我想将timer tick事件分配给:label21.Text并显示倒计时的分钟数。 如果我将numericUpDown1设置为10,那么它将倒计时10分钟。

格式应该是:分钟:秒(00:00)。

每次定时器变为1时,都应调用此方法:fileDownloadRadar(); 每当它到达1时,定时器应重置为numericUpDown1值,并重新开始重新计数,每次最后调用方法fileDownloadRadar();

numericUpDown1设置为最小值5和最大值60

修改

现在我尝试了这段代码但是在启动计时器时我没有看到label21上的任何变化。 分钟从0开始,但在这种情况下应该是29(numericUpDown1的值)。

我应该检查分钟数和秒数== 1或== 0吗?什么更多逻辑1或0?

private void timer1_Tick(object sender, EventArgs e)
        {
            numOfMinutes = Convert.ToInt32(numericUpDown1.Value);
            int seconds = numOfMinutes % 60;
            int minutes = numOfMinutes / 60;
            seconds --;
            string time = minutes + ":" + seconds;
            label21.Text = time;
            if (seconds == 1)
            {
                minutes --;
            }
            if (minutes == 1 && seconds == 1)
            {
                numOfMinutes = Convert.ToInt32(numericUpDown1.Value);
                fileDownloadRadar();
            }
        }

1 个答案:

答案 0 :(得分:1)

我认为你可以更好地使用TimeSpan对象并按如下方式开始。

在对象中声明一个TimeSpan变量(因此是私有字段):

private TimeSpan span;

在启动计时器的代码下方,初始化span变量:

timer1.Start(); // this should exist somewhere
TimeSpan span = new TimeSpan(0, numericUpDown1.Value, 0);

在您的计时器事件处理程序中,编写以下代码:

private void timer1_Tick(object sender, EventArgs e)
{
    span = span.Subtract(new TimeSpan(0, 0, 1));
    label21.Text = span.ToString(@"mm\:ss");

    if (span.TotalSeconds < 1)
    {
        span = new TimeSpan(0, numericUpDown1.Value, 0);
        fileDownloadRadar();
    }
}

我不确定if语句中你想要什么,但我希望这会对你有所帮助。